# matlab小波去噪的函数

matlab中有相关的实现函数吗？

• 写回答

#### 1条回答默认 最新

• 鹅毛在路上了 Matlab领域优质创作者 2022-07-06 21:44
关注

当然有啊，db小波基为例：

clc,clear
%装载采集的信号 leleccum.mat
x = audioread('MUsic_Test.wav');
Fs = 44100;
windowLength = 256;%帧长
win = hamming(windowLength,'periodic');%窗口函数（汉明窗）
overlap = 128; %帧移（一般为帧长的一半）
ffTLength = windowLength; %做DFT的点数，一般和帧长一样
snr = 20;  %设定信噪比，单位dB
noise = randn(size(x));         % 用randn函数产生高斯白噪声
Nx = length(x);                 % 求出信号x长
signal_power = 1/Nx*sum(x.*x);  % 求出信号的平均能量
noise_power = 1/Nx*sum(noise.*noise);  % 求出噪声的能量
noise_variance = signal_power / ( 10^(snr/10) );  % 计算出噪声设定的方差值
noise = sqrt(noise_variance/noise_power)*noise;   % 按噪声的平均能量构成相应的白噪声
y = x + noise;                  % 合成带噪语音
[c,l]=wavedec(y,3,'db4');
[thrl,nkeep]=wdcbm(c,l,3);
% thrl = thselect(y,'rigrsure');
[xd1,cxd,lxd,perf0,perfl2] = wdencmp('lvd',c,l,'db4',3,thrl,'s');
noise_Power0 = sum(abs(y'-x').^2)/length(y'-x');
SNR0 = 10*log10(signal_power/noise_Power0);
disp(['带噪语音信噪比：',num2str(SNR0)])
noise_Power2 = sum(abs(xd1-x).^2)/length(xd1-x);  %（带噪信号-纯信号）的平方
SNR1 = 10*log10(signal_power/noise_Power2);
disp(['db4小波软阈值法信噪比：',num2str(SNR1)])
subplot(4,2,1)
plot(x);
subplot(4,2,2)
spectrogram(x,win,overlap,ffTLength,Fs,'yaxis');
title('纯净信号语谱图')
subplot(4,2,3)
plot(y);
subplot(4,2,4)
spectrogram(y,win,overlap,ffTLength,Fs,'yaxis');
title('带噪信号语谱图')
subplot(4,2,5)
plot(xd1);
subplot(4,2,6)
spectrogram(xd1,win,overlap,ffTLength,Fs,'yaxis');
title('db4小波软阈值去噪语谱图')
subplot(4,2,7)
[xd2,cxd2,lxd2,perf1,perf22] = wdencmp('lvd',c,l,'db4',3,thrl,'h');
noise_Power2 = sum(abs(xd2-x).^2)/length(xd2-x);  %（带噪信号-纯信号）的平方
SNR2 = 10*log10(signal_power/noise_Power2);
disp(['db4小波硬阈值法信噪比：',num2str(SNR2)])
plot(xd2);
subplot(4,2,8)
spectrogram(xd2,win,overlap,ffTLength,Fs,'yaxis');
title('db4小波硬阈值去噪语谱图')
sgtitle('dbN小波去噪')
disp(['db4小波软阈值去噪后语音成分能量：',num2str(sum(abs(xd1-(y-x)))),'dB'])
disp(['db4小波硬阈值去噪后语音成分能量：',num2str(sum(abs(xd2-(y-x)))),'dB'])


还有你说的带通等波纹设计滤波器用的函数，数字信号处理教材上都能找到详细的例子，比如：

%等波纹逼近法设计
clc;
clear;
f=[0.25,0.5];
m=[0,1];
rp=1;
rs=40;
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);
dat2=10^(-rs/20);
rip=[dat2,dat1];
[M,fo,mo,w]=remezord(f,m,rip);
M=M+1;
hn=remez(M,fo,mo,w);
subplot(3,3,7);
stem(hn);title('等波纹法hn')
Hk=fft(hn,1024);
wk=0:1023;wk=2*wk/1024;
subplot(3,3,8);
plot(wk,20*log10(abs(Hk)));title('等波纹法设计的损耗函数');grid;
xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-90,10]);

subplot(3,3,9);
plot(wk,abs(Hk));title('等波纹法设计的幅频特性');grid;
xlabel('\omega/\pi');ylabel('幅度');axis([0,1,0.1,1.1]);

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 7月14日
• 已采纳回答 7月6日
• 修改了问题 7月6日
• 创建了问题 7月6日

#### 悬赏问题

• ¥20 关于php录入完成后，批量更新数据库
• ¥15 请教往复密封润滑问题
• ¥15 cocos creator发布ios包
• ¥15 comsol压电材料数据
• ¥35 用python实现除法算法中goldschmidt算法
• ¥15 汇编代码转换成C代码
• ¥15 除法算法中的归一化具体是怎么变的？
• ¥20 集成电路的逻辑电路和晶体管简化图
• ¥15 下载windows builder后的问题
• ¥15 端口连接数为什么会有限制