STM32 低通滤波器的实现代码

一、一阶低通滤波器

  1. 公式

     lpfdata += (1.0 / (1.0 + 1.0/(2.0f * 3.14f *T*fc)))*(rawdata - lpfdata );
    

lpfdata : 滤波后的数据。
rawdata : 滤波前的原始数据。
T: 数据的采样频率的倒数,即采样周期,单位是秒。
fc : 截止频率。截止频率就是超过该频率的数据(噪声)都被过滤掉,只保留低于该截止频率的数据。

  1. 原理说明参考该文章

     https://zhuanlan.zhihu.com/p/41328501
    

二、二阶IIR低通滤波器

  1. 公式

     差分公式 y(n) = b0*x(n) + b1*x(n-1) + b2*x(n-2) - a1*y(n-1) - a2*y(n-2);
     但是一般不用上面的公式,而是使用下面的共用延时模块的公式
     	d(n) = x(n) -a1*d(n-1) - a2*d(n-2);
     	y(n) = b0*d(n) + b1*d(n-1) + b2*d(n-2);
    
  2. 原理说明

     一阶滤波那篇文章的大神还写了二阶IIR低通滤波原理。
    

三 、代码

我的另外一篇文章《STM32CubeIDE HAL库DMA方式驱动MPU925X(2)》一节有个链接。

四、效果(IIR滤波)

注意: 滤波的截止频率不要太小。根据你设计需求选用截止频率。下图是30Hz,10Hz,5Hz,1Hz截止频率的对比。可以看出1Hz作为截止频率的时候,数据有点失真了。我实际测试过,如果1Hz用在无人机上,手动模式还能飞一飞,定点定高模式的话,那就不行了。

30Hz的截止频率。滤波前后没啥差别。
在这里插入图片描述
10Hz的截止频率,滤波前后还是没啥差别。
在这里插入图片描述
5Hz的截止频率。
在这里插入图片描述

1Hz的截止频率。可以看出滤波效果还是不错的,就是数据失真了。
在这里插入图片描述
综上所述,猜测滤波器的截止频率能设置到10Hz,因为滤波前后没有啥区别,我没有实际测试过10Hz,所以是猜测。1Hz肯定不能,因为无人机在定高定点模式下无法正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值