對實際的控制系統而言,采集到的原始信號往往是有噪聲的,而噪聲往往會對系統的穩定性能產生隱患;或為瞭提取有用的控制信號,濾除不必要的頻域成分,數字濾波技術必不可少,其中最常用的便是一階低通濾波(LPF)算法。
一階低通濾波器(Low Pass Filter,LPF),顧名思義就是當輸入信號的頻率在LPF設定的頻率(截止頻率)以內時,該信號可以通過(無衰減),而當該信號的頻率高於該頻率時,則會產生衰減。也就是說,LPF算法可濾除(filter-out)不需要的高頻信號,從而保證系統有效的頻率成分。
為使大傢通過該篇能對LPF以及信號處理技術的應用有一個更為深刻的理解,我將從如下5個方面來說明。
————————————————————————
————————————————————————
A Low Pass Filter is a circuit that can be designed to modify, reshape or reject all unwanted high frequencies of an electrical signal and accept or pass only those signals wanted by the circuits designer.
對於一階低通濾波而言,從控制模型上分析就是一個一階慣性環節,其描述形式如式所示。
H(s) = frac{1}{frac{s}{w_c}+1} , w_c = 2pi*f_c ,其中 f_c 為LPF的截止頻率。 (1)
Figure 1給出瞭一階低通濾波器在截止頻率 f_c = 20Hz ,即 H(s) = frac{1}{frac{s}{2pi*20}+1} 的Bode圖。由該圖可知,當信號的輸入頻率 f>(f_c = 20Hz) 時,其信號的幅值 Mag<0dB ,即表示信號將會出現衰減,以此達到濾波的目的。
Fig.1 一階低通濾波Bode圖
學過電路的都知道,RC電路便可組成一個一階低通濾波電路(如Figure 2所示)。
452fce2d18c2fbc26f709b0522d87eaeFigure.2 一階低通濾波原理圖
由電路原理的基本知識可知該一階RC低通濾波電路的輸入輸出關系(傳遞函數)為:
H(jw) = frac{V_{out}}{V_{in}} = frac{frac{1}{jwc}}{R+frac{1}{jwc}} = frac{1}{jwRC + 1}---(2)
令 s=jw ,則一階RC低通濾波在S域的傳遞函數如式(3)所示。將其與式(1)對比可知,有 RC = frac{1}{2pi*f_c} ,即可知LPF的截止頻率 f_c = frac{1}{2pi*RC} 。當我們知道信號的有用頻率段,即截止頻率f_c 已知時,可設計RC的值。
H(s) = frac{V_{out}(s)}{V_{in}(s)} = frac{1}{RCs+1} , s = jw (3)
為設計數字化濾波器,我們還需對上述連續系統進行離散化處理(z變換)。由以前的知識可知,z變換有許多不同的形式,對於LPF而言,主要采用一階後向差分法,其數學表達式如式(4)所示:
s = frac{1-z^{-1}}{T_s} , 其中 T_s 表示采樣周期。 (4)
結合式(3)(4),可知LPF的數字化表達式為:
H(z) = frac{V_{out}(z)}{V_{in}(z)}= frac{1}{RCfrac{1-z^{-1}}{T_s}+1} = frac{T_s}{RC(1-z^{-1})+T_s} (5)
變換後可知:
V_{in}(z) = (1+frac{RC}{T_s})V_{out}(z) - frac{RC}{T}V_{out}(z)z^{-1} (6)
繼續轉化差分方程,則有:
V_{in}(n) = (1+frac{RC}{T_s})V_{out}(n) - frac{RC}{T_s}V_{out}(n-1) (7)
最終我們可知其LPF的差分表達式如下所示:
V_{out}(n) = V_{out}(n-1) + frac{T_s}{T_s + RC}(V_{in}(n) - V_{out}(n-1)) (8)
令濾波系數 alpha = frac{T_s}{T_s + RC} ,且 alphain[0,1] ,則LPF的差分表達式可改寫為:
V_{out}(n) = V_{out}(n-1) + alpha(V_{in}-V_{out}(n-1)) (9)
對式(9)進行重寫,最後可知一階低通濾波模型為:
V_{out}(n) = (1-alpha)V_{out}(n-1) + alpha*V_{in} (10)
對此,LPF完整的數學分析已經完成。在實際應用中,已知采樣周期,根據實際的系統設計合適的截止頻率 f_c ,即對采集的信號 V_{in}(n) 進行濾波。
雖然通過前面的分析,知道瞭LPF數學模型的由來,但實際應用中如何濾波,怎麼應用可能不夠直觀。為使大傢有一個更為深刻的理解,特以一個實例來說明。
設一個信號的時域表達式如下所示,即有三個頻率成分: f_1=2Hz , f_2=30Hz , f_3=40Hz 疊加而成,其幅值分別為 A_1 = 2, A_2 = 5 , A_3 =1 0 ,令采樣周期為 T_s = 0.01s 。
y(t)=2*sin(2pi*2*t)+5*sin(2pi*30*t)+10*sin(2pi*40*t)
為此,設計一截止頻率 f_c=10Hz 的低通濾波器,由前面的分析可知,該低通濾波器的濾波為:
alpha=frac{T_s}{T_s+RC}=frac{T_s}{T_s+1/(2*pi*f_c)}=0.3859
令濾波後的輸出為 yc(t) ,由式(10)即可求得濾波後的輸出 yc(t) 。圖3為濾波前後時域輸出圖,從該圖雖然能直觀看出信號有所衰減,但不夠直觀,而通過對比濾波前後頻域輸出圖(Fig 4)可知,能非常直觀地看出頻率 f_1=2Hz 的信號幅值沒有變化,而頻率為 f_2=30Hz , f_3=40Hz 的信號出現瞭衰減,即當信號的頻率大於 所設定的截止頻率f_c=10Hz 時,信號便會出現衰減。
039569e1d8184a51cfcab9dd038477c1Fig.3 濾波前後時域輸出對比Fig.4 濾波前後頻域輸出對比
LPF的應用場合很多,相信通過前面的分析,對於其原理與應用應該有瞭進一步的瞭解。下面給出無人機飛控中的代碼實例,以便能對其他項目的應用有所參考與借鑒。通過第二部分的分析,相信不難理解其中的實現原理及過程。
APM開源飛控代碼中一階低通數字濾波器的實現如下所示,詳細代碼參見LowPassFilter.cpp文件。相信根據上述的分析,不難理解該功能的具體實現。
@input:sample(當前的采樣值)V_in(n) cutoff_freq(截止頻率) dt(采樣周期)
@output:_output(V_out(n))
template <class T>
T DigitalLPF<T>::apply(const T &sample, float cutoff_freq, float dt) {
if (cutoff_freq <= 0.0f || dt <= 0.0f) {
_output = sample;
return _output;
}
float rc = 1.0f/(M_2PI*cutoff_freq);
alpha = constrain_float(dt/(dt+rc), 0.0f, 1.0f);
_output += (sample - _output) * alpha;
return _output;
}
下一篇