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’); 使用硬阈值
  • 调整第五个参数来改变阈值的大小:

    • 阈值大小会影响降噪效果,需要根据实际情况进行调整。

注意: 实际应用中,建议根据不同音频信号的特点和降噪需求,尝试调整小波基函数、分解层数以及软硬阈值等参数,找到最佳降噪效果。

MATLAB小波降噪实战:音频降噪代码及参数解释

原文地址: https://www.cveoy.top/t/topic/nKts 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录