一阶低通滤波(LPF)的原理及应用(以APM/PX4飞控为例)

文章推薦指數: 80 %
投票人數:10人

一阶低通滤波器(Low Pass Filter,LPF),顾名思义就是当输入信号的频率在LPF设定的频率(截止频率)以内时,该信号可以通过(无衰减),而当该信号的频率高于该频率 ... 首发于控制理论及应用实践无障碍写文章登录/注册引言对实际的控制系统而言,采集到的原始信号往往是有噪声的,而噪声往往会对系统的稳定性能产生隐患;或为了提取有用的控制信号,滤除不必要的频域成分,数字滤波技术必不可少,其中最常用的便是一阶低通滤波(LPF)算法。

一阶低通滤波器(LowPassFilter,LPF),顾名思义就是当输入信号的频率在LPF设定的频率(截止频率)以内时,该信号可以通过(无衰减),而当该信号的频率高于该频率时,则会产生衰减。

也就是说,LPF算法可滤除(filter-out)不需要的高频信号,从而保证系统有效的频率成分。

为使大家通过该篇能对LPF以及信号处理技术的应用有一个更为深刻的理解,我将从如下5个方面来说明。

————————————————————————一阶低通滤波器的定义;一阶低通滤波器的数字实现;仿真实例分析;应用实例分析—以APM和PX4飞控两个实例来说明;具体应用中应考虑的问题————————————————————————一、一阶低通滤波器的定义ALowPassFilterisacircuitthatcanbedesignedtomodify,reshapeorrejectallunwantedhighfrequenciesofanelectricalsignalandacceptorpassonlythosesignalswantedbythecircuitsdesigner.对于一阶低通滤波而言,从控制模型上分析就是一个一阶惯性环节,其描述形式如式所示。

H(s)=\frac{1}{\frac{s}{w_c}+1},w_c=2\pi*f_c,其中f_c为LPF的截止频率。

(1)Figure1给出了一阶低通滤波器在截止频率f_c=20Hz,即H(s)=\frac{1}{\frac{s}{2\pi*20}+1}的Bode图。

由该图可知,当信号的输入频率f>(f_c=20Hz)时,其信号的幅值Mag<0dB,即表示信号将会出现衰减,以此达到滤波的目的。

Fig.1一阶低通滤波Bode图二、一阶低通滤波器的数字实现学过电路的都知道,RC电路便可组成一个一阶低通滤波电路(如Figure2所示)。

Figure.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}{2\pi*f_c},即可知LPF的截止频率f_c=\frac{1}{2\pi*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}{RC\frac{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},且\alpha\in[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=10,令采样周期为T_s=0.01s。

y(t)=2*sin(2\pi*2*t)+5*sin(2\pi*30*t)+10*sin(2\pi*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为滤波前后时域输出图,从该图虽然能直观看出信号有所衰减,但不够直观,而通过对比滤波前后频域输出图(Fig4)可知,能非常直观地看出频率f_1=2Hz的信号幅值没有变化,而频率为f_2=30Hz,f_3=40Hz的信号出现了衰减,即当信号的频率大于所设定的截止频率f_c=10Hz时,信号便会出现衰减。

Fig.3滤波前后时域输出对比Fig.4滤波前后频域输出对比四、应用实例分析LPF的应用场合很多,相信通过前面的分析,对于其原理与应用应该有了进一步的了解。

下面给出无人机飞控中的代码实例,以便能对其他项目的应用有所参考与借鉴。

通过第二部分的分析,相信不难理解其中的实现原理及过程。

4.1APM飞控LPF实例分析APM开源飞控代码中一阶低通数字滤波器的实现如下所示,详细代码参见LowPassFilter.cpp文件。

相信根据上述的分析,不难理解该功能的具体实现。

@input:sample(当前的采样值)V_in(n)cutoff_freq(截止频率)dt(采样周期) @output:_output(V_out(n)) template TDigitalLPF::apply(constT&sample,floatcutoff_freq,floatdt){ if(cutoff_freq<=0.0f||dt<=0.0f){ _output=sample; return_output; } floatrc=1.0f/(M_2PI*cutoff_freq); alpha=constrain_float(dt/(dt+rc),0.0f,1.0f); _output+=(sample-_output)*alpha; return_output; } 4.2PX4飞控LPF实例分析PX4开源飞控中LPF的具体实现文件为:.\Firmware\src\lib\controllib\BlockLowPass.cpp,给出实现代码,以便参考。

floatBlockLowPass::update(floatinput) { if(!PX4_ISFINITE(getState())){ setState(input); } floatb=2*float(M_PI)*getFCut()*getDt(); floata=b/(1+b); setState(a*input+(1-a)*getState()); returngetState(); }五、具体应用中应考虑的问题(1)相位滞后问题:一阶低通滤波器虽然能有效滤掉高频成分,但它会产生一定的滞后效应。

如Figure1所示,虽然在截止频率f_c=20Hz处,其幅值为0dB,但相位大致为-9^{o},也就是相较于原来的系统,该频段的输入信号皆产生了延时。

(2)截止频率的选择:对实际的控制系统而言,以APM为例,将滤波器的截止频率一般等于系统的带宽。

而系统的带宽怎么确定呢,最粗暴的办法就是根据实际的经验有fc=f_s/(4\sim10),其中f_s为信号的采样频率,这一部分可参见其飞控代码中LPF的接口调用。

六、仿真实例中的代码Ts=0.01; Fs=1/Ts; t=[0:0.01:0.99]; f1=2; f2=30; f3=40; y1=2*sin(2*pi*f1*t); y2=5*sin(2*pi*f2*t); y3=10*sin(2*pi*f3*t); y=y1+y2+y3; fc=10; b=2*pi*fc*Ts; a=b/(1+b) a1=Ts/(Ts+1/(2*pi*fc)) L=length(t); yc=zeros(L); yc(1)=y(1); forj=2:L yc(j)=a*y(j)+(1-a)*y(j-1); end f=Fs*(0:(L/2))/L; Y=fft(y); P2=abs(Y/L); P1=P2(1:L/2+1); P1(2:end-1)=2*P1(2:end-1); YC=fft(yc); P4=abs(YC/L); P3=P4(1:L/2+1); P3(2:end-1)=2*P3(2:end-1); figure(1) plot(t,y,t,yc); figure(2) plot(f,P1,f,P3);编辑于2019-02-2617:35自动控制数字信号处理无人机(UAV)​赞同216​​23条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录控制理论及应用实践



請為這篇文章評分?