二阶巴特沃斯双极点低通滤波器设计详细总结

文章目录

概要

设计二阶巴特沃斯低通滤波器的步骤

二阶巴特沃斯低通滤波器设计原理

Apollo中关于巴特沃斯低通滤波器的应用

声明

小结


概要

一、什么是巴特沃斯滤波器

        巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。这种滤波器最先由英国工程师斯蒂芬·巴特沃斯(StephenButterworth)在1930年发表在英国《无线电工程》期刊的一篇论文中提出的。

        二阶巴特沃斯滤波器是一种常用的信号处理工具。可用于滤除高频噪声,保留低频信号。该滤波器具有瓶阀的频率响应和较好的相位特性,被广泛应用于音频处理、图像处理、通信系统等领域。

        二阶巴特沃斯滤波的设计基于巴特沃斯滤波器原理,巴特沃斯滤波器是指在通频带内响应平坦的滤波器。二阶巴特沃斯低通滤波器的特点是在截止频率处有较为平缓的过渡带,可以有效地滤除高频噪声,同时保留低频信号。

        巴特沃斯滤波器的设计过程需要确定两个关键参数:截止频率和阶数。截止频率是指滤波器开始衰减的频率,阶数是指滤波器的阶次,决定了滤波器的陡度。在二阶巴特沃斯低通滤波器中,阶数为2,因此可以实现较为陡峭的滤波器特性。

二、巴特沃斯滤波器的特性

        巴特沃斯滤波器的特点通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。

        一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝、三阶巴特沃斯滤波器的衰减率为每倍频18分贝、如此类推。巴特沃斯滤波器的振幅对角频率单调下降,并且也是唯一的无论阶数,振幅对角频率曲线都保持同样的形状的滤波器。只不过滤波器阶数越高,在阻频带振幅衰减速度越快。其他滤波器高阶的振幅对角频率图和低级数的振幅对角频率有不同的形状。

二阶巴特沃斯滤波器特点:

1. 平滑的频率响应、较好的相位特性和较高的滤波器效果。

2. 滤波器阶数较低,难以实现非常陡峭的滤波特性。

3.设计过程中需要权衡截止频率和滤波器的阶数,以达到滤波器效果和计算复杂度之间的平衡。

4.常用信号处理工具,在音频、图像和通信等领域有广泛的应用。通过合理的设计和实现,可以实现对高频

噪声的滤除,保留低频信号,从而提升信号质量和系统性能。

注意:

  1. 图1展示了不同阶的幅频特性。可见阶数n越高,其幅频特性越好,低频检测信号保真度越高。
  2. 阶数越大,过渡带下降越快,表明滤波器的边带特性越接近理想滤波器。
  3. 巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。

补充:


设计二阶巴特沃斯低通滤波器的步骤

  • 确定截止频率:根据实际应用需求和信号特性,旋转适当的截止频率。截止频率是滤波器响应的开始下降的频率,通常以赫兹(HZ)为单位。
  • 计算滤波器参数:根据截止频率和采样频率,计算滤波器的一些关键参数,如角频率、Q值等。角频率是指滤波器的截止频率与采样频率的比值,Q值是值滤波器的品质因数,决定了滤波器的频率响应特性。
  • 设计滤波器传递函数:利用巴特沃斯滤波器的传递函数公式,根据计算得到的参数,确定滤波器的传递函数。传递函数描述了输入信号与输出信号之间的关系,可以用于计算滤波器的频率响应和相位特性。
  • 实现滤波器:利用计算得到的传递函数,可以进行滤波器的实现。常见实现方式包括巴特沃斯滤波器电路、数字滤波器算法等。
  • 验证滤波效果:在设计完成后,需要对滤波器的性能进行验证。可以通过输入不同频率的测试信号,观测输出信号频率特性和相位特性,以验证滤波器的工作是否符合设计要求。

二阶巴特沃斯低通滤波器设计原理

1 模拟滤波器

此部分内容转自:飞控中的IIR二阶滤波器 - 知乎

       我们从书上,百度,查到的滤波器公式,通常是用传递函数表达的,这是s域下的表达形式,是连续的,这种我们称之为模拟滤波器。

以巴特沃斯低通滤波器为例:

归一化滤波器

2 模拟与数字的关系

        上面举例的模拟滤波器传递函数,目的是用来设计滤波电路,针对的是连续时间的模拟信号,组成元器件是电阻,电容,电感。

        而数字滤波器实现方法是把滤波器所要完成的运算编成程序并让计算机执行,也就是采用在代码的形式。它面对的是离散时间的数字信号,是把输入序列通过一定的运算变换成输出序列。

有没有办法能把连续的模拟滤波器变成离散的数字滤波器?

显然是有的,而且有很多种,其中最常使用的一种叫做双线性变换

把这个公式带入传递函数就可以得到一个z域的差分方程了。

但是如果我们直接使用双线性变换进行离散化之后,会发现转换前的模拟滤波器和转换后的数字滤波器的幅频响应曲线并不一样。

        可以看到数字滤波器曲线DF,远比模拟滤波器AF衰减的要快,也就是说如果模拟截止频率是10hz,那数字滤波器衰减更快,截止频率可以只9hz。

        这是为什么呢?这是因为双线性变换中,数字截止角频率 ωd 和模拟截止角频率 ωa 的关系是非线性的。

所以在变换的时候我们需要找到s域与z域变换时频率变化的对应关系。

对于s域来说,在模拟截止频率为 fa 时有:

(此处的fs为采样的频率)

(补充证明过程根据欧拉公式)

3 设计数字滤波器

有了离散方式和频率对应关系,就可以来设计我们需要的数字滤波器了。

设计数字滤波器分几步?

  1. 根据我们想要的数字滤波频率得到我们想要的模拟滤波器频率
  2. 根据期望的模拟截止频率,将滤波器去归一化。
  3. 进行双线性变换
  4. 写成代码

如果我期望的数字滤波器截止频率为fd,对应的模拟滤波器截止角频率为:

去归一化只需要将模拟滤波器传递函数中的s替换成s/wa,即可得到任意截止角频率为wa弧度的滤波器。

最后使用双线性变换离散化,把公式带入

所以最终的变换方式就是

以一个例子来解释上述最终的变换后的结果

还是以我们的归一化二阶巴特沃斯低通滤波器公式:

带入完整的变换可得

由于公式还是比较复杂,重新以别名的形式进一步化简

继续化简

其中各系数表达式:

将上述系数推导写成代码:

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;



///

关于tanf tan tanl
float tanf(float x)	    计算 以弧度 x 为单位的角度的正切值(floatdouble tan(double x)	计算 以弧度 x 为单位的角度的正切值(doublelong double tanl(long double x)	计算 以弧度 x 为单位的角度的正切值(long double

        系数有了那这样的差分方程怎么写成代码呢?转换成差分方程后,下标n就代表当前值,下标n-1代表这个数是上个周期的值,n-2代表这个数延时了两周期。

for i = 1:10
	xn0 = sample(i);%采样数据
	yn0 = b0*xn0 + b1*xn1 + b2*xn2 - a1*yn1 - a2*yn2;
	
//保留前两帧的输出
    yn2 = yn1;
	yn1 = yn0;
//保留前两帧的输入
	xn2 = xn1;
    xn1 = xn0;
end

这种形式有个名称叫做直接I型,我们可以将它化成框图形式

一个二阶滤波器需要4个延时模块我们能不能化简一下呢?

        我们观察上图的直接I型滤波器,可以看成是两个较小系统串联而成的系统,那么,我们将其调整一下位置,得到就像下图一样的一个新的系统。

仔细观察其实我们可以共用延时模块

这样我们只需要使用两个延时模块就行,写成代码如下

for i = 1:10
    d0 = sample(i) - d1*a1 -d2*a2;
    output = d0*b0 + d1*b1 + d2*b2;
    d2 = d1;
    d1 = d0;
end

这样我们在代码里只需要保存两个数据就行了,源码如下:

到这里我们才算完成了一个滤波器设计,完整的称呼应该叫做 二阶巴特沃斯低通滤波器使用双线性变换法的IIR数字滤波器实现。

4 什么是IIR?什么是巴特沃斯?

        IIR 是一种实现滤波器的方法,对数字滤波器,从实现方法上有IIR和FIR滤波器之分,他们分别对应的是不同的滤波器结构

IIR实现的最终效果就是我们刚才设计的过程对应的通用转移函数结构如下:

        FIR滤波器可以对给定的率特性直接进行设计,而IIR滤波器目前最通用的方法是利用已经很成熟的模拟滤波器的设计方法来进行设计。


Apollo中关于巴特沃斯滤波器的应用

void LpfCoefficients(const double ts, const double cutoff_freq,
                     std::vector<double> *denominators,
                     std::vector<double> *numerators) {
  denominators->clear();
  numerators->clear();
  denominators->reserve(3);
  numerators->reserve(3);

  double wa = 2.0 * M_PI * cutoff_freq;  // Analog frequency in rad/s  模拟截止角频率 wa=2*M_PI*fa  ,fa是模拟滤波器的截止频率
  double alpha = wa * ts / 2.0;          // tan(Wd/2), Wd is discrete frequency  //离散频率 ,对应的alpha推导公式
  double alpha_sqr = alpha * alpha;
  double tmp_term = std::sqrt(2.0) * alpha + alpha_sqr;
  double gain = alpha_sqr / (1.0 + tmp_term);

//分母
  denominators->push_back(1.0);
  denominators->push_back(2.0 * (alpha_sqr - 1.0) / (1.0 + tmp_term));
  denominators->push_back((1.0 - std::sqrt(2.0) * alpha + alpha_sqr) /
                          (1.0 + tmp_term));

//分子
  numerators->push_back(gain);
  numerators->push_back(2.0 * gain);
  numerators->push_back(gain);
}



//
调用
void LonController::SetDigitalFilter(double ts, double cutoff_freq,
                                     common::DigitalFilter *digital_filter) {
  //传入参数:采样周期0.01s ;滤波器截止频率 5hz ; 滤波器对象
  std::vector<double> denominators;
  std::vector<double> numerators;
  common::LpfCoefficients(ts, cutoff_freq, &denominators, &numerators);
  digital_filter->set_coefficients(denominators, numerators);
}


void LonController::SetDigitalFilterPitchAngle() {
  double cutoff_freq =
      lon_based_pidcontroller_conf_.pitch_angle_filter_conf().cutoff_freq();
  double ts = lon_based_pidcontroller_conf_.ts();
  SetDigitalFilter(ts, cutoff_freq, &digital_filter_pitch_angle_);
}

//使用
 double vehicle_pitch_rad =
      digital_filter_pitch_angle_.Filter(injector_->vehicle_state()->pitch());
  double vehicle_pitch =
      vehicle_pitch_rad * 180 / M_PI + FLAGS_pitch_offset_deg;


小结

二阶巴特沃斯滤波器的主要设计参数:采样周期+截止频率

一阶和二阶滤波器的差异主要体现在以下几个方面:

  1. 滤波特性:一阶滤波器是最简单的滤波器结构,它只包含一个滤波器极点。一阶滤波器的滤波特性是一阶衰减,即在截止频率之后,信号的幅度逐渐减小。二阶滤波器则包含两个滤波器极点,可以更好地滤除高频噪声和提供更陡峭的滤波特性。二阶滤波器的滤波特性可以是二阶低通、高通、带通或带阻。
  2. 频率响应:一阶滤波器的频率响应是一阶斜率,即在截止频率处,信号的幅度会下降3dB。而二阶滤波器的频率响应可能是二阶斜率,即在截止频率处,信号的幅度会下降6dB,这使得二阶滤波器能够提供更陡峭的滤波特性和更好的频率选择性。
  3. 相位响应:一阶滤波器的相位响应是一阶延迟,即信号的相位会有一定的延迟。而二阶滤波器的相位响应可能是二阶延迟或二阶超前,具体取决于滤波器的类型和设计。
  4. 稳定性:一阶滤波器是稳定的,可以实现无限长的冲激响应。而二阶滤波器的稳定性取决于滤波器的极点位置和选择。
  5. 应用场景:一阶滤波器由于其简单、易实现的特点,常用于对带外衰减性要求不高的场合。而二阶滤波器由于其更高的阻带衰减、更精确的截止频率以及较小的相移,通常用于需要更高性能的应用中。
  6. 电路结构:一阶滤波器通常是一个单支路的RC低通滤波器,而二阶滤波器则在一级的基础上增加一个电容或电感来形成两个支路,通常是共轭结构。
  7. 成本考虑:随着滤波阶数的增加,滤波效果会提升,但同时成本也会增加。

        综上所述,一阶和二阶滤波器的主要区别在于它们的滤波特性、频率响应、相位响应、稳定性和应用场景等方面。

声明:

本文仅作为个人学习总结笔记,禁止转载,详细学习了解请参考对应出处,欢迎批评指证。


参考:

二阶巴特沃斯高低通滤波器系数计算 - 知乎

数字信号处理教程6(1巴特沃斯模拟低通滤波器设计)_哔哩哔哩_bilibili

PX4中的二阶巴特沃斯低通滤波_二阶巴特沃斯滤波器传递函数-CSDN博客

飞控中的IIR二阶滤波器 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值