https://blog.csdn.net/colapin/article/details/52840075;
關於信號的濾波方法:
1.巴特沃斯低通濾波器去噪
在[B,A]=butter(n,wn)中,n是濾波器的階數,Wn是截止頻率,Wc = 截止頻率*2/采樣頻率
Wc=2*50/Fs; %截止頻率 50Hz
[b,a]=butter(4,Wc);
Signal_Filter=filter(b,a,Mix_Signal_1);
2.FIR低通濾波器去噪
F = [0:0.05:0.95];
A = [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ;
b = firls(20,F,A);
Signal_Filter = filter(b,1,Mix_Signal_1);
3. 移動平均濾波去噪
b = [1 1 1 1 1 1]/6;
Signal_Filter = filter(b,1,Mix_Signal_1);
4. 中值濾波去噪
Signal_Filter=medfilt1(Mix_Signal_1,10);
5. 維納濾波去噪
維納濾波是以均方誤差最小(LMS(Least MeanSquare)為准則的,它根據過去觀測值和當前觀測值來估計信號的當前值,因此它的解形式是系統的傳遞函數或單位脈沖響應。
Rxx=xcorr(Mix_Signal_1,Mix_Signal_1); %得到混合信號的自相關函數
M=100; %維納濾波器階數
for i=1:M %得到混合信號的自相關矩陣
for j=1:M
rxx(i,j)=Rxx(abs(j-i)+N);
end
end
Rxy=xcorr(Mix_Signal_1,Signal_Original_1); %得到混合信號和原信號的互相關函數
for i=1:M
rxy(i)=Rxy(i+N-1);
end %得到混合信號和原信號的互相關向量
h = inv(rxx)*rxy'; %得到所要涉及的wiener濾波器系數
Signal_Filter=filter(h,1, Mix_Signal_1); %將輸入信號通過維納濾波器
6. 自適應濾波去噪
維納濾波器參數是固定的,適合於平穩隨機信號。卡爾曼濾波器參數是時變的,適合於非平穩隨機信號
N=1000; %輸入信號抽樣點數N
k=100; %時域抽頭LMS算法濾波器階數
u=0.001; %步長因子
%設置初值
yn_1=zeros(1,N); %output signal
yn_1(1:k)=Mix_Signal_1(1:k); %將輸入信號SignalAddNoise的前k個值作為輸出yn_1的前k個值
w=zeros(1,k); %設置抽頭加權初值
e=zeros(1,N); %誤差信號
%用LMS算法迭代濾波
for i=(k+1):N
XN=Mix_Signal_1((i-k+1):(i));
yn_1(i)=w*XN';
e(i)=Signal_Original_1(i)-yn_1(i);
w=w+2*u*e(i)*XN;
end
7. 小波去噪
[xd,cxd,lxd] = wden(Mix_Signal_1,'sqtwolog','s','one',2,'db3');
plot(xd); %Mix_Signal_1 小波濾波后信號
