博客原地址:https://blog.csdn.net/tuxinbang1989/article/details/80283857
濾波器的作用是允許某些頻率的正弦信號基本無衰減的通過(增益爲 1,頻域 0dB),同時對另外某些頻率的正弦信號起到衰減作用(增益在 0.707 以下,頻域-3dB 以下)。 當然,濾波器對通過的正弦信號會產生一定的相移作用。
1.二階通用濾波器
二階濾波器表示的是濾波器時域表達式中最高含有二階微分,或者說傳遞函數分母的s最高次數爲2。濾波器對直流分量的增益爲1。據此可設零狀態二階通用濾波器的傳遞函數爲
時域表達式爲
待定參數爲a,b,c,d,e。
y(t)——輸出信號,x(t)——輸入信號。
現要將時域微分方程轉換成對應離散域差分方程,假設採樣週期爲Ts。
根據微分的定義,有
由以上分析可知,Ts越小時,上述約等式越精確。
將連續量t分段,令t=kTs,k=0,1,2⋯,則微分方程可化爲近似離散形式
將上述表達式代入到時域微分方程中,當Ts足夠小時,近似認爲
整理後得
進一步簡化得
k1 ⋯ k5對應式⑧相應的係數,且滿足
略去 Ts, 將時域離散信號轉變成序列信號, 成爲計算機能夠運算的式子:
根據式⑩, 可以很容易寫出二階通用濾波器的運算程序。
2.二階派生出的特殊濾波器
通過配置二階通用濾波器的係數 a, b, c, d, e,可以生成多種特殊用途的濾波器:
根據所需濾波器的指標(截止頻率、通帶頻率、阻帶頻率等), 可以求出其傳遞函數的係數, 進一步推出通用型中的參數 abcde,再結合採樣週期 Ts, 則可以算出數字濾波器的係數 k1/k2/k3/k4。
對於更高階的濾波器, 可以根據要求, 對二階濾波器進行串聯組合(有些電機驅動器程序就是如此處理)。 例如, 要求一個高階濾波器中含有低通環節、 帶阻環節和超前滯後環節, 則可以先構造三個對應的二階濾波器, 然後在運算中進行串行運算。
以上內容說明了對於二階濾波器, 如何從模擬濾波器模型推出數字濾波器的計算程序。 對於整體的高階濾波器(即非二階組合型),上述方法過於繁瑣,計算量大,則需要採用數字濾波中 IIR 和 FIR 濾波器設計方法,計算各差分量的係數, 請參考《信號與系統》教材。 建議採用 Matlab 中的 FDATOOL 進行濾波器設計, 直接生成 z 域系統方程的參數,非常方便。
參考程序:
- typedef struct SecOrdFilter{
- float k1;
- float k2;
- float k3;
- float k4;
- float k5;
- float xin;
- float x1;
- float x2;
- float yout;
- float y1;
- float y2;
- } vector;
-
- #define SecondOrderFilter(v) \ // 後面將vector賦值給v
- yout = v.k1*v.xin + v.k2*v.x1+v.k3*v.x2+ v.k4*v.y1 + v.k5*v.y2; \
- v.x2 = v.x1; \
- v.x1 = v.xin; \
- v.y2 = v.y1; \
- v.y1 = v.yout;