01引言
如果單純依靠模擬電路,是不可能將50Hz干擾徹底抑制掉的,所以這時候就體現出數字信號處理的優越性了。
數字信號處理里面的濾波器分兩種:一種是IIR濾波器,另一種是FIR濾波器,本質區別就是IIR濾波器的當前輸出與以前的輸出和輸入有關,FIR濾波器只與輸入有關,看一下差分方程就一目了然了。
來看一下海寧濾波器的結構和傳遞函數,
很明顯這是一個FIR濾波器,因為輸出只與輸入有關。而它的濾波器系數也非常好記(1/4)*[1 2 1]=[0.25 0.5 0.25],這個數值運算量非常小,把它放到單片機里面使用也是毫無壓力的,因為,不論是1/4還是1/2都可以在程序中用移位>>運算來實現。
02matlab濾波器設計
廢話少說,接下來進入正題, 1Hz信號里面混有較強的50Hz和178Hz干擾,觀察圖形看一下是這樣的。
利用MATLAB的fdatool工具來設計一個能夠兼具低通和50Hz陷波功能的濾波器。
參數設置為:FIR濾波,低通,10階,通帶截止頻率4Hz,阻帶截止頻率46Hz,采樣率400Hz,生成的幅度響應曲線中虛線是未進行量化后的曲線,可以發現,阻帶的衰減幅度最小也有25db,50Hz的衰減頻率則達到了70db,
觀察下濾波器的參數
未量化的浮點數據還是比較長的,但是效果是最好的,量化后的數據會比較短,具體長度是我們自己設置的,量化的目的是降低運算量,但是以犧牲濾波效果為代價的,我們先把數據導出來進行驗證。
在matlab里面進行驗證,代碼如下
Ts=0.0025;%采樣率400hz
len=500; >> n=0:len-1;
%3種頻率的信號混合
x=0.1*sin(2*pi*1*n*Ts)+sin(2*pi*50*n*Ts)+0.5*sin(2*pi*178*n*Ts);
CO=[0.04675 0.05845 0.084 0.1068 0.1225 0.1282 0.1225 0.1068 0.084 0.05845 0.04675];
W=[0 0 0 0 0 0 0 0 0 0 0];
for i = 1:len
W(1) = x(i);
y(i) = W(1)*CO(1)+W(2)*CO(2)+W(3)*CO(3)+W(4)*CO(4)+W(5)*CO(5)+W(6)*CO(6)+W(7)*CO(7)+W(8)*CO(8)+W(9)*CO(9)+W(10)*CO(10)+W(11)*CO(11);
W(11)=W(10);
W(10)=W(9);
W(9)=W(8);
W(8)=W(7);
W(7)=W(6);
W(6)=W(5);
W(5)=W(4);
W(4)=W(3);
W(3)=W(2);
W(2)=W(1);
end
subplot(211);
plot(x);
subplot(212);
plot(y)
axis([0 500, -1.5, 1.5]);
結果如下圖:
由于1Hz的信號幅值較低,所以所以看起來會有點小,但是50Hz和178Hz已經消失不見了,但是這個濾波器存在一個問題,就是階數有點高--10階,然后浮點運算太多了,在單片機上運行是個負擔,所以還得改進一下。
0350Hz精準陷波
這次只定點濾除50Hz信號,實際上通過上面的操作大家應該清楚了,不同的濾波器不過是在調整濾波器的系數而已,那么我們不妨直接來通過修改系數的方式設計濾波器,matlab也提供了這樣的功能,見下圖:
這里面的系數B=[ 0.125 0.53 -0.75 0.53 0.125];是我反復調整得到的,未量化時是精準的50Hz陷波,量化后會有偏移,如果單片機運算能力尚可的話,就不要量化了,因為本身這里浮點的數據并不長,不多說了,代碼與上面沒有太大差異,故省略,直接看效果吧。
04結語
實際上階數還可以繼續降低,比如這篇文獻里面設計的陷波器就只有4階,他的采樣率是200Hz。
可以發現,數字濾波不過是各種乘加運算,只不過系數不同,濾波的效果和功能也不同。
至于IIR濾波器,實際上設計的方法與上面相差也不大,matlab的代碼也與C語言極為相似,如何轉化,也不再贅述了。
-
模擬電路
+關注
關注
125文章
1556瀏覽量
102721 -
濾波器
+關注
關注
161文章
7799瀏覽量
178013 -
FIR
+關注
關注
4文章
146瀏覽量
33159 -
干擾
+關注
關注
0文章
211瀏覽量
27337 -
數字信號
+關注
關注
2文章
969瀏覽量
47539
發布評論請先 登錄
相關推薦
評論