Matlab信号处理,小波降噪

最近在学小波降噪,分享一些代码帮助大家理解

 本文使用matlab进行小波降噪,采用固定阈值方式,对一维噪声数据进行降噪处理

在matlab信号处理书中的一些代码分享一下

信噪比snr为信号与噪声信号的功率比的对数

Matlab信号处理,小波降噪_第1张图片

信号功率计算公式:

Matlab信号处理,小波降噪_第2张图片

wden函数对一维信号进行消噪

snr = 4;
t=0:1/1000:1-0.001;
y=sin(3*pi*t);
n = randn(size(t));
s=y+n;
xd = wden(s,'heursure','s','one',3,'sym8');
subplot(3,1,1);
plot(s);
xlabel('n');
ylabel('幅值');
title('含噪信号');
subplot(3,1,2);
plot(y);
title('原始信号');
xlabel('n');
ylabel('幅值');
subplot(3,1,3);
plot(xd);
title('消噪信号');
xlabel('样本信号');
ylabel('幅值')

Matlab信号处理,小波降噪_第3张图片

小波去噪跟傅里叶变换去噪的信号比较

clc;
clear all;
snr=4;                                        %设置信噪比
%MATLAB中用''wnoise''产生测试信号
%原始信号为xref,含高斯白噪声的信号为x
%信号类型为blocks(由函数中参数1决定)
%长度均为2^11(由函数中的参数11决定)
%信噪比snr=4(由函数中的参数snr决定)
 [xref,x]=wnoise(1,11,snr);
xref=xref(1:2000);                            %取信号的前2000点
x=x(1:2000);                                %取信号的前2000点
%用全局默认阈值进行去噪处理
 [thr,sorh,keepapp]=ddencmp('den','wv',x);         % 获取全局默认阈值
xd=wdencmp('gbl',x,'sym8',3,thr,sorh,keepapp);    %利用全局默认阈值对信号去噪
%下面是作图函数,作出原始信号和含噪声信号的图
figure
subplot(231);plot(xref);                 %画出原始信号的图
title('原始信号');
subplot(234);plot(x);
title('含噪声信号');                    %画出含噪声信号的图
%下面用傅里叶变换进行原信号和噪声信号的频谱分析
dt=1/(2^11);                         %时域分辨率
Fs=1/dt;                            %计算频域分辨率
df=Fs/2000;                         
xxref=fft(xref);                      %对原始信号做快速傅里叶变换
xxref=fftshift(xxref);                 %将频谱图平移
xxref=abs(xxref);                    %取傅里叶变换的幅值
xx=fft(x);                          %对含噪声信号做快速傅里叶变换
xx=fftshift(xx);                      %将频谱搬移
absxx=abs(xx);                      %取傅里叶变换的幅值
ff=-1000*df:df:1000*df-df;            %设置频率轴
subplot(232);plot(ff,xxref);            %画出原始信号的频谱图
title('原始信号的频谱图');
subplot(235);plot(ff,absxx);
title('含信号噪声的频谱图');          %画出含噪声信号的频谱图
%进行低通滤波,滤波频率为0~200的相对频率
indd2=1:800;                      %0频左边高频率系数置零
xx(indd2)=zeros(size(indd2));
indd2=1201:2000;
xx(indd2)=zeros(size(indd2));        %0频右边高频系数置零
xden=ifft(xx);                     %滤波后的信号作傅里叶逆变换
xden=abs(xden);                   %取幅值
subplot(233);plot(xd);               %画出小波去除噪后的信号
title('小波去除噪后的信号');
subplot(236);plot(xden);             %画出傅里叶分析去噪的信号
title('傅里叶分析去噪的信号');

Matlab信号处理,小波降噪_第4张图片

你可能感兴趣的:(小波,matlab,开发语言)