PX4中的二阶巴特沃斯低通滤波

源码

const float fr = sample_freq/_cuttof_freq;
const float ohm = tanf(M_PI_F, fr);
const float c = 1.0f + 2.0f * cosf(M_PI_F / 4.0f) * ohm + ohm * ohm;

_b0 = ohm * ohm / c;
_b1 = 2.0f * _b0;
_b2 = _b0;

_a1 = 2.0f * (ohm * ohm - 1.0f) / c;
_a2 = (1.0f - 2.0f * cosf(M_PI_F / 4.0f) * ohm + ohm * ohm) / c;

float LPF_Apply(float sample)
{
    //滤波器
    float delay_element_0 = sample - delay_element_1 * _a1 - delay_element_2 * _a2;
    //判断特殊值
    if(/**/)
    {
        delay_element_0 = sample;
    }
    
    const float output = delay_element0 * _b0 + delay_element1 * _b1 + delay_element2 * _b2;
    _delay_element_2 = _delay_element_1;
    _delay_element_1 = _delay_element_0;
    //返回滤波后的值
    return output;
}

巴特沃斯数字滤波器归一化

滤波器传递函数:
H ( s ) = 1 a 0 + a 1 s + a 2 s 2 + . . . + a N s N H(s) = \frac{1}{a_{0} + a_{1}s + a_{2}s^2 + ... + a_{N}s^N} H(s)=a0+a1s+a2s2+...+aNsN1

N = 2 N=2 N=2时,传递函数为:

H ( s ) = 1 1 + 1.414 s + s 2 H(s) = \frac{1}{1 + 1.414s +s^2} H(s)=1+1.414s+s21
在实际使用中,只要用 s w a \frac{s}{w_{a}} was代替上式中的 s s s即可以得到任意截至频率为 w a w_{a} wa弧度的滤波器,即
H ( s ) = 1 1 + 1.414 s w a + ( s w a ) 2 H(s)=\frac{1}{1 + 1.414\frac{s}{w_{a}} + (\frac{s}{w_{a}})^2} H(s)=1+1.414was+(was)21

模拟传递函数离散化,常用方法:双线性变换

s = 2 T s 1 − z − 1 1 + z − 1 = 2 f s 1 − z − 1 1 + z − 1 s = \frac{2}{T_{s}}\frac{1-z^-1{}}{1+z^{-1}}=2f_{s} \frac{1-z^{-1}}{1+z^{-1}} s=Ts21+z11z1=2fs1+z11z1
数字滤波器的截止频率要比模拟滤波器的截止频率要小,下面讨论这两个频率之间的关系:

对于 s s s域来说,截止频率 w a w_{a} wa满足的关系式为:
s = j w a = j 2 π f a s = jw_{a}=j2\pi f_{a} s=jwa=j2πfa
对于 z z z域来说,截止频率 w d w_{d} wd满足的关系式为:
z = e s T s s = j w d w d = 2 π f d z = e j 2 π f d f s z=e^{sT_s} \quad s=jw_d \quad w_d =2\pi f_d \\ z=e^{j2\pi \frac{f_d}{f_s}} z=esTss=jwdwd=2πfdz=ej2πfsfd
将上式代入到双线性变换公式可得:
s = 2 f s 1 − z − 1 1 + z − 1 = 2 f s 1 − e − j 2 π f d f s 1 + e − j 2 π f d f s = 2 f s e j 2 π f d f s − 1 e j 2 π f d f s + 1 = j 2 f s t a n ( π f d f s ) s=2f_{s} \frac{1-z^{-1}}{1+z^{-1}}=2f_s \frac{1-e^{-j2\pi \frac{f_d}{f_s}}}{1+e^{-j2\pi \frac{f_d}{f_s}}}=2f_s \frac{e^{j2\pi \frac{f_d}{f_s}}-1}{e^{j2\pi \frac{f_d}{f_s}}+1}=j2f_stan(\frac{\pi f_d}{f_s}) s=2fs1+z11z1=2fs1+ej2πfsfd1ej2πfsfd=2fsej2πfsfd+1ej2πfsfd1=j2fstan(fsπfd)
计算过程如下:
$$
\begin{array}{c}
e^{i x}=\cos x+i \sin x \

\frac{\mathrm{e}^{j A}-\mathrm{e}^{-j A}}{\mathrm{e}^{j A}+\mathrm{e}^{-j A}}=\frac{\cos (A)+j \sin (A)-(\cos (-A)+j \sin (-A))}{\cos (A)+j \sin (A)+(\cos (-A)+j \sin (-A))}=j \tan (A) \

\frac{e^{j \omega}-1}{e^{j w}+1}=\frac{\mathrm{e}^{j w / 2}}{\mathrm{e}^{\mathrm{j} \omega / 2}} \frac{\left(\mathrm{e}^{\mathrm{j} \omega / 2}-\mathrm{e}^{-\mathrm{j} \omega / 2}\right)}{\left(\mathrm{e}^{\mathrm{j} \omega / 2}+\mathrm{e}^{-\mathrm{j} \omega / 2}\right)}=j \tan \left(\frac{\omega}{2}\right)
\end{array}
$$

将频域的 s s s公式代入得:
j w a = j 2 π f a = j 2 f s t a n ( π f d f s ) f a = f s π t a n ( π f d f s ) jw_a=j2\pi f_a =j2f_stan(\frac{\pi f_d}{f_s}) \\ f_a = \frac{f_s}{\pi}tan(\frac{\pi f_d}{f_s}) jwa=j2πfa=j2fstan(fsπfd)fa=πfstan(fsπfd)

设计数字滤波器

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值