对一阶二阶低通滤波器推导,并用IMU数据验证算法效果

本文介绍了一阶和二阶低通滤波器的设计原理及其在实际工程中的应用,通过MATLAB验证了滤波器的有效性,并在STM32上实现了滤波器功能。

文章背景

一直想学习一下数字信号处理算法,而不是每次遇到数据处理就求平均,求最值,看容差,做滑动窗。。。
数字信号处理算法已经很成熟了,但网上大部分还是用matlab跑仿真,设计几个不同频率的sin信号相加,来验证算法的有效性。但是实际工程中该如何去使用这个算法,资料还是比较少的,这篇文章重心放在实际工程,对于工程中遇到的常见信号做处理。

一阶算法推导

学习一个算法,掌握其思想和推导是必不可少的路。这里先以一阶低通滤波算法为例,在硬件电路中我们可以通过RC电路实现低通滤波功能,利用的便是电容原件的充放电特性。在代码里如何实现这个硬件电路呢?

这里推导大体思路如下:

  1. 根据物理模型(也就是电路状态变量之间的关系)推导出电路的时域关系和频域关系,也就是电路的传递函数H(s)。
  2. 有了传递函数H(s)就可以通过一阶差分方程(双线性变换)将函数从s域变换到z域,对应的含义便是将函数从连续的频域转化为离散的频域。
  3. 这个时候我们得到了H(z),然后通过z变换求出关于X(输入)和Y(输出)的离散时域函数,最终我们调用的便是这个函数。

具体的推导过程懒得手写,这里直接上图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

matlab 验证算法

首先我们通过stm32抓取一组IMU数据,这里IMU用的是博世的BMI160,先只抓取z轴的重力加速度。这里上一下matlab代码:

// 
//	create by wxc on 2021.5.9
//  e-mail:550791785@qq.com
//

>> clear
>> fs  = 200;
>> dt = 1 / fs;
>> N = length(acc_z);
>> n = 5240;
>> y = fft(acc_z,n);
>> y_abs = abs(y);
>> f = (0:n-1)*fs/n;
>> subplot(211);plot(acc_z);axis([0 6000 9.9 10.1]);
>> subplot(212);plot(f(1:n/2),y_abs(1:n/2));axis([0 100 0 5]);

这里只是仿真了原始数据的波形和对应的幅频曲线。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值