用Matlab实现4种滤波降噪处理算法,信号为正弦信号叠加上白噪声,参数可自主定制。
clear all;clc;
fs=300;
Time=128;
t=0:1/fs:Time;
f1=1; T1=1/f1;
y1=sin(2*pi*f1*t);
figure;
plot(t,y1);axis([0 4 -3 3]);
title('原始正弦信号');
y2=y1+randn(1,length(y1));
figure;
plot(t,y2);axis([0 4 -3 3]);
title('加噪信号');
N=Time/T1-3;
T2=T1*fs;
A1=linspace(0,4*T1*fs,4*T1*fs-1);
for tt=0:4*T1*fs
X1=0;
for i=0:N-1
X1=X1+y2(1+tt+i*T2);
end
A1(1+tt)=X1/N;
end
figure;
plot(A1);axis([0 1200 -3 3]);grid;
title('线性累加算法');
A2=linspace(0,length(y2),length(y2)-1);
Ap1=linspace(0,N,N-1);
for tt=0:4*T1*fs
Ap1(1)=y2(1+tt);
for n=2:N
Ap1(n)=(n-1)/n*Ap1(n-1)+y2(1+tt+(n-1)*T2)/n;
end
A2(1+tt)=Ap1(N);
end
figure;
plot(A2);axis([0 1200 -3 3]);grid;
title('递推式平均算法');
A3=linspace(0,length(y2),length(y2)-1);
Ap2=linspace(0,N,N-1);
alpha=30;
beta=(alpha-1)/alpha;
for tt=0:4*T1*fs
Ap2(1)=y2(1+tt)*(1-beta);
for n=2:N
Ap2(n)=beta*Ap2(n-1)+y2(1+tt+(n-1)*T2)*(1-beta);
end
A3(1+tt)=Ap2(N);
end
figure;
plot(A3);axis([0 1200 -3 3]);grid;
title('指数加权平均算法');
A4=linspace(0,length(y2),length(y2)-1);
for tt=0:4*T1*fs
if tt<=T2
A4(1+tt)=(2*y2(1+tt)+y2(1+tt+T2)+y2(1+tt+2*T2))/4;
elseif T22*T2
A4(1+tt)=(y2(1+tt-T2)+2*y2(1+tt)+y2(1+tt+T2)+y2(1+tt+2*T2))/5;
else
A4(1+tt)=(y2(1+tt-2*T2)+y2(1+tt-T2)+2*y2(1+tt)+y2(1+tt+T2)+y2(1+tt+2*T2))/6;
end
end
figure;
plot(A4);axis([0 1200 -3 3]);grid;
title('五点移动平均算法');
运行后即可得到以下图像:
对比处理前后的图像可见不同算法对应的去噪效果(不同的采样点算法表现是不同的)。
注:算法公式及降噪原理详见 高晋占《微弱信号检测》,清华大学出版社。