MPU6050 加速计滤波
加速度计滤波实验参数:
采样频率Fs=250Hz 截止频率Cutoff Frequency |
未开电机静止 |
开电机悬停 |
未开电机转动飞控 |
原始输出(Raw) |
260 Hz |
260Hz |
260Hz |
MPU6050内部(LPF) |
94 Hz |
94 Hz |
94 Hz |
2阶(Butterworth) |
30 Hz |
30 Hz |
30 Hz |
8深度窗口滑动(Window) |
N/A |
N/A |
N/A |
数据分析 |
4组画图对比(A) |
4组画图对比(C) |
4组画图对比(F) |
4组FFT变换(B) |
4组FFT变换(D) |
N/A |
|
8组 RMSE (E) |
N/A |
说明:
1. 所有数据来源于MPU6050,单片机采样周期为4ms,即采样频率Fs=250Hz
2. 开电机悬停:绑住对角机臂,四电机同时打开,解开绳索飞行器可在空中飞行不掉下。由于没有快速无线数传,所以没有测试实际飞行悬停加速度计输出,因此该测试结果只近似做参考。
3. 原始输出Raw:根据芯片手册配置,低通滤波器最大带宽为260Hz,即截止频率为260Hz。近似可看成原始加速度计输出
4. MPU6050内部LPF:根据芯片手册配置,LPF这里选择94Hz,用于测试内部LPF性能
5. 2阶Butterworth:截止频率选择为30Hz,对Raw进行滤波
6. 8深度窗口滑动:目前四轴上广泛使用的平均滑动滤波,深度为8,对Raw进行滤波
测试结果(以下“>”表示:“性能好于”):
A(未开电机静止):
结论:
静态平滑性能:窗口滑动>Butterworth>LPF>Raw
B(未开电机静止):
结论:
1. 从Raw的FFT变换结果可以看出静态时的加速度计类似白噪声,其振幅平均分布在Fs/2上
2. LPF的结果不尽如人意。LPF的截止频率为94Hz,理应在94Hz处有较大的幅值下降,但是这种幅值变化的不明显,由此可见MPU6050内置的LPF性能有待改进
3. 2阶Butterworth滤波器效果就好很多,在30Hz以前和Raw的频谱大致相同,接着在30Hz出现大幅度的幅值衰减,说明滤波器起到了效果
4. 窗口平均滑动滤波出现了匪夷所思的现象,这种幅值衰减特别有规律!鉴于笔者信号分析学的很烂,这里就不展开了。
5. 其实从窗口滑动滤波的FFT结果就可以看出来效果了,简单的平均滤波效果在频谱上确实有不错的效果,至少比内置的LPF效果要好。如果在四轴同时应用了LPF和窗口平均滑动,那么效果会更好
C(开电机悬停):
结论:
打开电机之后,结果同静态平滑性能:窗口滑动>Butterworth>LPF>Raw
D(开电机悬停):
结论:
1. 从Raw的FFT变换结果可以看出打开电机时的加速度计与静止时的结果有了明显不同:首先是振幅有了明显的变化,从原先的200~600,到现在的10000~60000,这是由于打开电机后的机械震动引起的巨大振幅;其次就是频率分布,可以清楚地看到在40Hz和90Hz附近有较大的振幅分布,说明机械震动产生的信号频率大多数分布在这两个频率范围附近,而这种频率附近的信号我们是不需要的,这也就是说:我们要采用某种滤波器,至少在40Hz或者90Hz处截止,高于该频率的信号一律屏蔽。
2. LPF的结果很奇怪。在低频阶段0~40Hz的振幅极小,反而在100Hz处有较大的幅值分布,看起来就像是高通滤波器,而不像是低通滤波器。虽然设置的LPF在94Hz截止,但是在94Hz后面仍然有较大的震动信号出现,再次证明了MPU6050内置的LPF的效果确实不怎么令人满意
3. 2阶Butterworth滤波器效果比LPF效果好很多。在打开电机后,可以看到在30Hz之前的信号频谱和Raw的分布基本一致,说明保留了真实的信号输出。而在30Hz以后,其信号的幅值有了大幅度的明显衰减,有效的滤掉了高频的电机震动引起的干扰信号
4. 对于窗口平均滑动滤波依旧出现了匪夷所思的现象。这种有规律的频谱实在是看不懂,不过在低频段和原始输出保持一致,而在高频部分也有效的抑制了电机产生的震动信号。所以这种方法应用在四轴上的加速度计滤波是可以的,至少比内部LPF效果要好。
E(8组 RMSE):
这个图很有意思,RMSE(Root-Mean-Square-Error)均方根误差,常用来表征估计的准确程度。RMSE越小说明精度越高,这里由于是静止测试和开电机悬停测试,所以这里的RMSE用来表示数据的平滑性。
结论:
无论开电机与否,数据平滑性性能:窗口滑动>Butterworth>LPF>Raw
F(未开电机转动):
该测试用来比较Butterworth和窗口滑动滤波的延迟特性
结论:
数据平滑性性能指标:窗口滑动>Butterworth>Raw
为了更加清楚的看到延迟特性,下图放大Y轴在980次采样点的三条输出曲线:
结论:
数据延迟性能特性:Raw>Butterworth>窗口滑动,也就是说Butterworth滤波延迟小于8深度的窗口滑动滤波。
最后总结:
1. 尽量不要用MPU6050内置的LPF滤波。虽然相比于原始加速度计输出,该LPF可以平滑输出,但是在FFT频谱上的表现相当差劲。
2. 广泛使用的窗口平均滑动滤波无论在FFT还是RMSE表现上都有不错的表现,所以一般基础应用(低速运动或四轴初学者)采用窗口平均滤波是比较明智的选择。
3. 想要达到更好的滤波效果,FIR或者IIR滤波器是更好的选择。笔者测试2阶30Hz的Butterworth滤波器虽然在平滑性RMSE只比窗口平均滑动差了一点(但是比LPF要好),但是数据实时性性能指标上比前者响应速度提高了近一倍。因此在制作四轴的进阶阶段,可以考虑将窗口平均滑动换成Butterworth滤波器。
MPU6050 加速计滤波相关推荐
- STC51单片机15——MPU6050六轴数据融合,互补滤波,时间常数可调,可稳定运行,串口显示角度值
51单片机用模拟IIC的方式读取MPU6050的原始数据,之后经过换算转成三轴加速度和三轴角速度.设定定时器,以固定的频率采集以上得到的数据,并加入互补滤波,去除加速度的噪声以及陀螺仪的零飘.注意,本 ...
- 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角
目录 源码 MPU6050_Filter.c MPU6050_Filter.h 使用方法 测试程序 一阶互补滤波 效果 二阶互补滤波 效果 卡尔曼滤波 效果 总结 普中51-单核-A2 STC89C5 ...
- android 陀螺仪滤波_Arduino MPU6050陀螺仪运用卡尔曼滤波姿态解算实验
Arduino MPU6050陀螺仪运用卡尔曼滤波姿态解算实验 版权声明:本文为博主原创文章,未经博主允许不得转载. 2019年3月20日 发布 实例效果 输出效果: 首先看看本例程XYZ轴的输出效果 ...
- android 陀螺仪滤波_Arduino+mpu6050陀螺仪运用卡尔曼滤波姿态解算实验
MPU6050六轴陀螺仪 作用于四轴无人机,平衡车,机器人等等的电子实作当中,用于姿态判断,掌握了可以发挥自己的想象完成更多更有趣的作品. 本例程输出XYZ的角度,正负90度. 运用卡尔曼滤波算法解算 ...
- MPU6050加速度、角速度的解算以及互补滤波使用
MPU6050加速度.角速度的解算以及互补滤波使用 MPU6050加速度的解算 MPU6050角速度的解算 互补滤波使用(数据融合) 数字低通滤波器 数字高通滤波器 MPU6050加速度的解算 先根据 ...
- 树莓派pico mpu6050 一阶互补滤波四元数法 解算姿态角
micro-python:一阶互补滤波&四元数法 代码 2.系统方案 2.1.组成 本系统由供电部分, 主控部分, 姿态传感器与通信部份组成 2.2.供电部分 电池为一节14500锂电池, 容 ...
- stm32 MPU6050 姿态解算 Mahony互补滤波算法
文章目录 0.介绍 1,理论分析 1.1 MPU6050 1.2 Mahony算法原理 2,代码实现 1.1 MPU6050初始化及数据读取 1.2 Mahony算法c语言实现 1.3 将代码移植到你 ...
- MPU6050传感器数据滤波
目的 练习对加速度传感器的原始数据进行滤波算法的实验,学习使用平滑滤波.FIR.IIR等的滤波算法. 原理 滤波器:选择所需的某一或某些频带的信号而抑制不需要的其它频带的信号. 通带:滤波 ...
- # MPU6050之2阶低通滤波,滤波效果非常好
自从打算搞无人机之后,最终倒在了姿态的问题上,每次到了调参数PID,飞机都不稳.之后锁定了几个可能的因素,一是参数没做到最佳,二就是电机高转速下,6050受到震动的情况下,姿态乱了,导致PID无法 ...
- 重力加速计低通滤波算法——安卓开发文档
重力为测量结果中的不变成分.因此在获取到三轴的加速度分量后,可以采用低通滤波的方式分离出重力分量,然后在原始值中减去重力.最后得到不含重力的手机加速度. 手机的x.y.z轴定义如图: 以下为安卓开发者 ...
最新文章
- linux硬盘温度,linux查看硬盘温度跟使用情况
- javascript中的链表结构—双向链表
- 为什么不同新旧UPS电池不能混用?浮充电压是什么?
- PHP $_FILES中error返回值详解
- kuka机器人外部轴异步_(技术)机器人维保10个常见问题解答
- ConcurrentHashMap 1.8 源码分析
- 视频压缩标准简史:从1929到2020
- python glob.glob使用
- 绝对干货:供个人开发者赚钱免费使用的一些好的API接口
- Vue底层判断标签的性能优化方法
- 【转】每天一个linux命令(28):tar命令
- 仅用 480 块 GPU 跑出万亿参数,中文最大规模多模态预训练模型发布
- 如何在Mac设置开机自启程序项,教程在这!
- def在python中什么意思_《python中的def是什么意思》
- 阿里云企业邮箱版本对比(标准版、集团版和尊享版)
- c语言中要求五个数一行,c 语言中如何一行输出五个数
- matlab mtf,MtF - MATLAB Central
- IDEA怎么查看现在的项目使用的JDK版本? 2016年4月19日22:51
- Praat脚本-004 | 替换标注内容
- 什么是隐性知识?显性知识?