MATLAB 小波降噪:基于 WDEN 函数的音频降噪处理
一、读入声音
path='D:\毕设\声音处理\声音处理\音视频文件\2022-12-05拾音器现场采集声音\三号冷床下料\三号冷床下料.wav';
[Y,FS]=audioread(path); %将声音放到matlab中
info=audioinfo(path); %得到声音的格式、数位、频率等
T=1/FS; %采样时间
t=(0:length(Y)-1)*T;%时间
yz=Y(:,1);%左声道
Y=Y-mean(Y); % 消除直流分量
x=Y/max(abs(Y)); % 幅值归一化
N=length(x);
二、小波降噪 wden 函数
lev=15;
xdDWT= wden(yz,'heursure','h','mln',lev,'db3');%硬阈值
%[dnsig4s,c4,l4,threshold_heursure] = wden(yz,'heursure','h','mln',lev,wname);
snr1=SNR_Calc(x,xdDWT); % 计算初始信噪比
%snr2=SNR_Calc(x,signal); % 计算降噪后的信噪比
%snr=snr2-snr1;
fprintf('snr1=%5.4f ',snr1);
具体参数选取
- wname:小波函数名称,例如 'coif5', 'db2', 'sym4'。
- lev:分解层数,根据信号长度和噪声特性选择合适的分解层数。
- 阈值方法:可选 'heursure' (基于 SURE 准则的阈值方法),'minimaxi' (基于 minimax 准则的阈值方法) 等。
- 阈值类型:可选 'h' (硬阈值),'s' (软阈值) 等。
原理 + 结合人耳试听
小波降噪的基本原理是将信号分解到不同尺度的小波系数上,然后根据噪声特性和信号特征对小波系数进行阈值处理,最后将处理后的系数重构为降噪后的信号。
选择合适的参数和阈值方法能够有效降低噪声,同时最大程度地保留信号细节。建议根据实际应用场景和人耳试听结果进行参数调整。
三、绘制降噪前后的波形对比
figure(1)
subplot(2,1,1)
plot(t,yz)
title('降噪前');
subplot(2,1,2)
plot(t,xdDWT)
title('降噪后');
四、播放声音
%sound(xdDWT,FS);
五、另存降噪后音频
str=['D:\graduation design\切头掉钢jz-', 'db2', '-lev', num2str(lev), '.wav'];
audiowrite(str, xdDWT, FS);
改进阈值方法
可以使用改进阈值的小波函数,例如基于 Bayes 风险的阈值选取方法、基于最小描述长度的阈值选取方法等。这些方法相对于传统硬阈值和软阈值方法,能够更好地平衡降噪效果和信号细节保留。具体使用哪种方法需要根据实际应用场景和降噪效果进行选择。
原文地址: https://www.cveoy.top/t/topic/nSBg 著作权归作者所有。请勿转载和采集!