二階濾波器原理及算法程序

博客原地址: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 域系統方程的參數,非常方便。

參考程序:

  1. typedef struct SecOrdFilter{
  2. float k1;
  3. float k2;
  4. float k3;
  5. float k4;
  6. float k5;
  7. float xin;
  8. float x1;
  9. float x2;
  10. float yout;
  11. float y1;
  12. float y2;
  13. } vector;
  14. #define SecondOrderFilter(v) \ // 後面將vector賦值給v
  15. yout = v.k1*v.xin + v.k2*v.x1+v.k3*v.x2+ v.k4*v.y1 + v.k5*v.y2; \
  16. v.x2 = v.x1; \
  17. v.x1 = v.xin; \
  18. v.y2 = v.y1; \
  19. v.y1 = v.yout;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章