MATLAB小波降噪实战:音频降噪代码及参数解释
MATLAB小波降噪实战:音频降噪代码及参数解释
本文将以音频降噪为例,展示使用MATLAB进行小波降噪的完整代码示例,并对代码中所用到的函数和参数进行详细解释。
一、读入声音
path='D:\毕设\声音处理\声音处理\音视频文件\2022-12-05拾音器现场采集声音\三号冷床下料\三号冷床下料_01.wav';
%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函数
%wname = 'coif5';'db2';'sym4'
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);
参数解释
- wden(yz,‘heursure’,‘h’,‘mln’,lev,’db3’) 函数用于执行小波降噪,参数含义如下:
- yz: 输入信号
- ‘heursure’: 阈值选择方法,这里选择‘heursure’方法,表示使用启发式阈值方法。
- ‘h’: 阈值类型,这里选择‘h’表示使用硬阈值。
- ‘mln’: 阈值计算方法,这里选择‘mln’表示使用最大值最小二乘阈值方法。
- lev: 小波分解层数,这里设置为15层。
- ‘db3’: 小波基函数,这里选择‘db3’小波基。
三、绘制降噪前后的波形对比
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);
调整小波软硬阈值
可以根据实际情况调整小波的软硬阈值来达到更好的降噪效果。
-
软阈值 和 硬阈值 的作用是将小于一定阈值的小波系数清零,从而达到降噪的目的。
-
修改wden函数中的第二个参数来选择使用哪种阈值:
- xdDWT= wden(yz,’heursure’,‘s’,‘mln’,lev,’db3’); 使用软阈值
- xdDWT= wden(yz,’heursure’,‘h’,‘mln’,lev,’db3’); 使用硬阈值
-
调整第五个参数来改变阈值的大小:
- 阈值大小会影响降噪效果,需要根据实际情况进行调整。
注意: 实际应用中,建议根据不同音频信号的特点和降噪需求,尝试调整小波基函数、分解层数以及软硬阈值等参数,找到最佳降噪效果。
原文地址: https://www.cveoy.top/t/topic/nKts 著作权归作者所有。请勿转载和采集!