濾波器的作用是允許某些頻率的正弦信號基本無衰減的通過(增益為 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;