⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simulate1.m

📁 用MATLAB实现加噪信号的消噪,用了三种常用方法。
💻 M
字号:
clear
sqrt_snr=4;init=2055415866;%设置信噪比和随机种子
[x,y]=wnoise(1,11,sqrt_snr,init);%产生原始信号x和被高斯白噪声污染的信号xnoised
figure(1)
subplot(211);plot(x);title('参考信号','fontsize',8)
subplot(212);plot(y);title('染噪信号','fontsize',8)

%用sym6小波对原始信号作4层分解并提取系数

lev=4;wname='sym6';
[c,l]=wavedec(y,lev,wname);
a4=appcoef(c,l,wname,lev);
d4=detcoef(c,l,4);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);

%1.对信号进行强制性消噪处理
dd4=zeros(1,length(d4));
dd3=zeros(1,length(d3));
dd2=zeros(1,length(d2));
dd1=zeros(1,length(d1));
c1=[a4 dd4 dd3 dd2 dd1];
y1=waverec(c1,l,wname);

figure(2)
subplot(311);plot(y1)
title('强制消噪','fontsize',8)
grid on
%求原始信号与估计信号之间的均方根误差(RMSE)和经小波去噪后的估计信号的信噪比(SNR)
sum=0;sum1=0;
n=length(x);
for i=1:n
    sum=sum+(x(i)-y1(i)).^2;
    sum1=sum1+x(i).^2;
end
RMSE1=sqrt(sum/n);
SNR1=10*log10(sum1/sum);


%2.用默认阈值对信号进行消噪处理
%用ddencmp函数获得信号的默认阈值

[thr,sorh,keepapp]=ddencmp('den','wv',y);
y2=wdencmp('gbl',y,wname,lev,thr,sorh,keepapp);

subplot(312);plot(y2)
title('默认阈值消噪','fontsize',8)
grid on
%求原始信号与估计信号之间的均方根误差(RMSE)和经小波去噪后的估计信号的信噪比(SNR)
sum=0;sum1=0;
n=length(x);
for i=1:n
    sum=sum+(x(i)-y2(i)).^2;
    sum1=sum1+x(i).^2;
end
RMSE2=sqrt(sum/n);
SNR2=10*log10(sum1/sum);


%3.用给定阈值进行消噪处理(这里给定软阈值)

lev=4;wname='sym6';
[c,l]=wavedec(y,lev,wname);
a4=appcoef(c,l,wname,lev);
d4=detcoef(c,l,4);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);
softd1=wthresh(d1,'h',4.39);
softd2=wthresh(d2,'h',4.35);
softd3=wthresh(d3,'h',4.31);
softd4=wthresh(d4,'h',4.36);
c2=[a4 softd4 softd3 softd2 softd1];
y3=waverec(c2,l,wname);

subplot(313);plot(y3)
title('给定软阈值消噪','fontsize',8)
grid on
%求原始信号与估计信号之间的均方根误差(RMSE)和经小波去噪后的估计信号的信噪比(SNR)
sum=0;sum1=0;
n=length(x);
for i=1:n
    sum=sum+(x(i)-y3(i)).^2;
    sum1=sum1+x(i).^2;
end
RMSE3=sqrt(sum/n);
SNR3=10*log10(sum1/sum);



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -