Matlab 小波降噪代码详解:使用硬阈值函数和Heuristically SURE 阈值选择方法
Matlab 小波降噪代码详解:使用硬阈值函数和 Heuristically SURE 阈值选择方法
这段代码使用 Matlab 对音频信号进行小波降噪处理,主要步骤如下:
一、读入声音
path='D:\毕设\声音处理\声音处理\音视频文件\2022-12-05拾音器现场采集声音\切头剪掉钢\切头掉钢.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 函数
代码中使用 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);
- 'heursure': 使用 Heuristically selected universal threshold (SURE) 阈值选择方法。该方法是一种常用的阈值选择方法,可以根据信号特征自动选择合适的阈值,从而提高降噪效果。
- 'h': 代表硬阈值函数。硬阈值函数是一种常用的阈值函数,它将小于阈值的系数直接设置为 0,而保留大于阈值的系数。
- 'mln': 小波分解的层数。该参数控制小波分解的深度,层数越高,分解越精细,但计算量也越大。
- lev: 小波分解的层数,这里设置为 15。
- 'db3': 小波基函数选用 Daubechies 3 小波基函数。Daubechies 小波基函数是一种常用的正交小波基函数,具有良好的时频局部化特性。
三、计算信噪比
snr1=SNR_Calc(x,xdDWT); % 计算初始信噪比
%snr2=SNR_Calc(x,signal); % 计算降噪后的信噪比
%snr=snr2-snr1;
fprintf('snr1=%5.4f ',snr1);
四、绘制降噪前后波形对比
figure(1)
subplot(2,1,1)
plot(t,yz)
xlabel('时间(s)');
ylabel('振幅');
title('原音频波形图');
subplot(2,1,2)
plot(t,xdDWT)
xlabel('时间(s)');
ylabel('振幅');
title('降噪后音频波形图');
这段代码中用的是什么阈值函数内容:
这段代码中使用的是hard thresholding 硬阈值函数,具体实现为:
xdDWT= wden(yz,'heursure','h','mln',lev,'db3');
其中,'h' 代表硬阈值函数,'heursure' 表示使用 Heuristically selected universal threshold (SURE) 阈值选择方法,lev 为小波分解的层数,'db3' 为小波基函数选用 Daubechies 3 小波基函数。
总结:
该代码使用小波变换和硬阈值函数对音频信号进行降噪处理,并采用 Heuristically SURE 阈值选择方法自动选择合适的阈值,最终通过绘制降噪前后波形对比来展示降噪效果。
原文地址: https://www.cveoy.top/t/topic/n9MZ 著作权归作者所有。请勿转载和采集!