美文网首页
MATLAB读取声音信号进行频域阈值处理

MATLAB读取声音信号进行频域阈值处理

作者: 小小杨树 | 来源:发表于2021-11-08 23:13 被阅读0次
clc
[pyr,fs]=audioread('guo.wav.m4a');%声音读取
n=length(pyr);
pyr1=fft(pyr,n);                            %快速傅里叶变换
figure(1)
subplot(2,1,1);
plot(pyr);   
xlabel('时间');
ylabel('幅度');
title('初始信号波形');   %绘出时域波
grid
subplot(2,1,2);                         %绘出频域频谱
plot(abs(fftshift(pyr1)));
title('初始信号频谱');
xlabel('频率');
ylabel('幅度');
grid
noise=0.1*randn(n,1);%加噪声
s=pyr+noise;
pause;
n=length(s);   %画出加噪之后,其时域频域
S=fft(s,n);
figure(2)
subplot(2,1,1)
plot(s);
title('加噪声后信号波形')
xlabel('时间');
ylabel('幅度');
grid;
subplot(2,1,2)
plot(abs(fftshift(S)));
xlabel('频率');
ylabel('幅度');
title('加噪声后信号信号频谱');
grid;
pause
[c,l]=wavedec(n,3,'db1');
 a3=appcoef(c,l,'db1',3);
 d3=detcoef(c,l,3);
 d2=detcoef(c,l,2);
 d1=detcoef(c,l,1);
 thr=1;%硬阈值处理
 ythard1=wthresh(d1,'h',thr);
 ythard2=wthresh(d2,'h',thr);
 ythard3=wthresh(d3,'h',thr);
 c2=[a3 ythard3 ythard2 ythard1];
 s3=waverec(c2,l,'db1');
  %软阈值处理
 ytsofrd1=wthresh(d1,'s',thr);
 ytsofrd2=wthresh(d2,'s',thr);
 ytsofrd3=wthresh(d3,'s',thr);
 c3=[a3 ytsofrd3 ytsofrd2 ytsofrd1];
 s4=waverec(c3,l,'db1'); 
 subplot(2,1,1);plot(s3);title('硬阈值处理');
 subplot(2,1,2);plot(s4);title('软阈值处理');

相关文章

网友评论

      本文标题:MATLAB读取声音信号进行频域阈值处理

      本文链接:https://www.haomeiwen.com/subject/fmnpzltx.html