用Matlab實現4種濾波降噪處理算法,信號為正弦信號疊加上白噪聲,參數可自主定制。
%matlab
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;%累加中參數最大值不能超過信號序列否則沒有數值,每個tt都要往后推N-1個周期,準備展示4個周期,故N最大為總周期數-3
T2=T1*fs;
%線性累加平均算法
A1=linspace(0,4*T1*fs,4*T1*fs-1);%創(chuàng)建序列用來存儲結果,由于是序列序號,故還需乘上fs
for tt=0:4*T1*fs
X1=0;
for i=0:N-1 %進行N次累加用以平均
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 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('五點移動平均算法');
運行后即可得到以下圖像:
1對比處理前后的圖像可見不同算法對應的去噪效果(不同的采樣點算法表現是不同的)。





