再谈IMU数据处理(滤波器)

2023-05-16

本文开始前,先回答一个问题。

上一篇文章最后提到了卡尔曼滤波器用来做一维数据的数字滤波处理,最终的实验结果说:该模型下的卡尔曼滤波处理与二阶IIR低通滤波处理效果几乎一致。有网友指出是错误的,卡尔曼滤波一定比二阶IIR要好。这里特别做个说明:

首先,笔者指出的是该模型下,意思是在上篇文章中设计的模型下得到的结果,不排除有更优秀的模型,能得到更佳的性能。卡尔曼滤波器得到的结果与模型密切相关,并不存在说只要是卡尔曼就一定比别的算法好,还要看应用的场景是否受限;

其次就是应用场景的说明,单就卡尔曼而言,使用方法有很多,可以加入其它的数据,设计模型从而重新估计出最优的数据,笔者也有过类似的设计经验,通过对飞机建模,引入卡尔曼算法,从而得到滤波后的IMU数据(可见视频教程),而上篇文章也特别说明了是一维数据的处理,假如你非要说我的卡尔曼结果比你的好,但其实比如引入了其它数据,那这就是降维打击。

最后,之所以上次提出一个卡尔曼的例子,也主要是其代码简单,非常适合初学者理解其5个公式。

此外,上篇文章的卡尔曼,其实本质上来讲与一阶低通滤波类似

推导如下:

这里,卡尔曼增益k为定值,并不是时变的,所以可以看出,最终得到的结构与一阶低通几乎一致的。

回答完卡尔曼的问题后,开始我们今天的主题。

一般来说,飞控IMU的数据滤波采用低通滤波即可,截止频率50以下,但是如果出现机体共振,或者说在某一个特定的高频下,震动明显又该如何处理?

特别是针对比如机体轴距较小,机动性强的小飞机,假设有用数据的频率在100hz以内,这时候假设有一个120hz的高频震动,如果采用100hz的低通滤波,由于滤波器对增益的衰减是一个平缓的曲线(截止频率越低,衰减越快),这时候对这个120hz的高频震动就很难处理,假设为了衰减到一定的强度,这时候把截止频率降低,加强滤波效果,但是有用的数据又会被滤除,同时延时也会增大。

针对以上问题,处理办法是对这个特定的频率采用带阻或陷波滤波器,去除掉该干扰后,再进行低通滤波。

 

带阻和陷波滤波器区别?

带阻顾名思义是针对某一段的频率范围,而陷波则是针对某一具体的频率点,且其对其他频率段的增益几乎不做处理,而带阻则会有一些影响。

使用前提?

就是说什么情况下使用这种方法,正如前面所说,是针对机身在某一特定频率有共振的情况下,假如本身没有共振,则没有必要采取该处理。

为什么说陷波对特定频率处理好?

换个角度来提问,比如干扰是90hz,假设使用截止频率为30hz的低通滤波,那按理来说不是也能滤除?为什么还要另外加个滤波器处理这个90hz?

从滤波器的设计来看:

假设使用2阶IIR低通滤波,截止频率30hz

图中可以看出,在80hz的衰减大概是31db。

而采用同等阶数的notch滤波,中心频率设为80hz,带宽10hz。

图中可以看出,其在80hz的衰减达到了50db以上,说明加一个notch滤波,对特定干扰的滤波效果更好。

使用该方法还有一个前提,就是能准确估计出干扰的频率,否则这个陷波滤波器也不知从何设计。图中可以看出,假设你设计的陷波滤波器针对的是80hz的干扰,而实际的干扰假如在85左右,可以看出,85hz的衰减其实并没有太大,即该滤波器并未能起作用

 

实验验证:

还用上一篇的一组数据(由于采样的限制,只能看到100hz以内的频谱)。这里设计了两个滤波器,分别是90hz的陷波滤波,80-99hz的带阻滤波。

可以看出,陷波滤波器对90hz的频率幅值已经滤除,而带阻滤波正如设计的一样,对80-99的区域有一个抑制作用。说明最终效果正如我们想要的一样。

放大观察:

可以看出几乎没有延时,这时候对带阻过后的数据进行低通滤波,假设截止频率为80hz,则时域波形如下:

带阻处理后的数据更光滑一些。这里也说明如果对干扰频率不是那么精确的话,笔者建议使用带阻滤波更加。

 

总结:

  • 一般应用场景下,低通滤波即可满足要求;
  • 如若出现具有特定的干扰频率,且与真实数据的频率较为接近,这时候低通滤波很难处理该情况。所以先进行陷波处理,再进行低通滤波,效果更佳;
  • 滤波器待研究:动态陷波处理和自适应滤波,将来有时间可以再更进一步学习。

 

后记:

笔者之前对滤波器的处理认识不深,正好前阵子有遇到过类似上面提到的问题,用软件低通滤波要不就是滤不掉干扰,要不就是有用信息丢失过多,延时较大,导致控制还是很难控好。之前的经验就是想办法去除机身的干扰问题,比如结构、减震等。但实际工程上很难把控要求其他环节,所以软件这边只能硬上。通过这个问题的深层次探究,也了解了更多方法,通过本篇文章分享出来,与读者共同成长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

再谈IMU数据处理(滤波器) 的相关文章

  • mysql到sqlite数据传输

    在实际的工作中需要将mysql数据库表中的数据同步到sqlite对应的表中 主要有两种方法 第一种是使用Navicat里的数据传输 第二种是使用程序来实现 第一种 程序实现 1 添加sqlite驱动 本项目是通过maven管理 在pom x
  • 筛选kepler.csv中未下载到的kepid

    In 1 判断输入字符串是否在路径中函数 import os def findfile2 keyword keyword 9d int keyword judgeExist False root os path join C Users 9
  • python numpy中对ndarry按照index(位置下标)增删改查

    在numpy中的ndarry是一个数组 因此index就是位置下标 注意下标是从0开始 增加 在插入时使用np insert 在末尾添加时使用np append 删除 需要使用np delete 修改 直接指定下标 查找 直接指定下标 示例
  • Python读取csv文件的三种方式

    一 前期准备 Python版本 3 7 3 制作一个不包含头文件的csv文件 为了方便文件内容是纯数字 字符集为utf 8 并命名为test csv 放到程序的根目录下 使用PyCharm创建一个Python工程 并安装Numpy和Pand
  • python中的pd进行数据处理

    1 用pd读取excel中的的某一列生成列表 并将集合或列表写进excel def excel one line to list df pd read excel r poi grid xlsx usecols 1 names None 读
  • dataframe显示数据处理进度

    显示效果如下 tqdm搭配progress apply使用 from tqdm import tqdm tqdm pandas desc pandas bar df result df score progress apply lambda
  • IMU背包对动物行为影响测试

    动物行为是一种可观察和可测量的指标 轻量化和低成本的传感器技术的先进发展为研究人员提供了以最小干预来跨越空间和时间跟踪动物的机会 特别是对于家禽业来说 已经从传统的笼养系统转变为无笼养系统 许多技术可用于检测大群鸡的行为 活动和位置 为了有
  • Tableau Prep 数据处理工具使用入门

    1 什么是Tableau Prep 2018 04 Tableau 推出全新的数据准备产品 Tableau Prep 主要用户定位于如何帮助人们以快速可靠的方式对数据进行合并 组织和清理 进一步缩短从数据获取见解所需的时间 简而言之 Pre
  • excel基本操作1

    excel隔行设置样式 条件格式 gt 条件规则 gt 输入公式 参考https jingyan baidu com article 36d6ed1f2379c35acf4883e0 html excel隔列取值 使用Index结合row和
  • Adaboost

    基本原理 基本原理就是将多个弱分类器结合 形成一个强分类器 Adaboost采用迭代的思想 每次迭代只训练一个弱分类器 训练好的弱分类器将参与下一次迭代的使用 也就是说 在第N次迭代中 一共就有N个弱分类器 其中N 1个是以前训练好的 其各
  • 西门子PLC的编程语言的数据类型有哪些

    西门子PLC的编程语言支持多种数据类型 以下是常见的数据类型 1 位 Bit 0或1的数据类型 2 字节 Byte 有8位 Bit 组成的数据类型 3 整型 Integer 有符号的16位整数 2字节 4 双字 Double Word 无符
  • Python3,Pandas这4种高频使用的筛选数据的方法,不得不说,确实挺好。

    Pandas数据筛选方法 1 引言 2 4种高频使用数据筛选方法 2 1 布尔索引 2 2 isin 方法 2 3 query 方法 2 4 loc 方法 3 总结 1 引言 小屌丝 鱼哥 share一下 数据筛选的方法呗 小鱼 Excel
  • 【SPSS】解决问题:在二阶聚类中发生意外的错误

    问题描述 某一天在用到二阶聚类的功能时 突然出现了如图的问题 除此之外其他功能都可以使用 没有问题 自打我使用SPSS以来 后宫佳丽三千偏偏这个磨人的小妖精出来闹事 解决与排查 1 数据集问题 有时候导入的数据集中的变量类型并不符合 如图
  • An Introduction for IMU 2 - IMU数据融合与姿态解算

    在上一篇博客中 我们已经介绍了IMU的内部工作原理 以及如何通过Arduino读取MPU6050的数据 虽然可以从DMP直接读取姿态角 但其数据返回的频率相对较低 同时由于DMP库不是开源的 其内部的工作原理 输出姿态角的准确性都不清楚 而
  • 相似度量

    相似度量 MATLAB实现相似度计算 对数似然相似度 Jaccard相似度 余弦相似度 目录 相似度量 MATLAB实现相似度计算 对数似然相似度 Jaccard相似度 余弦相似度 基本描述 程序设计 学习总结 参考资料 基本描述 在数据分
  • 最小二乘法拟合圆(Python)

    上文已经对比了三种数据点拟合圆的方法 本文分享最小二乘法的拟合过程 旨在了解如何用Python编程拟合圆 usr bin env python coding utf 8 This program is debugged by Harden
  • 解决dataframe格式表格的合并

    这几天遇到了一个关于表格合并的问题 其实问题很简单 对于两个表格df1和df2 取出df1的每一行特征和df2的每一行的特征合并 再将label合并 但是看了很多pandas关于表的合并 其并不适用到我这个问题 所以在此我想简单的总结一下关
  • Python使用pandas从mysql数据库读取数据并导出到Excel

    工作中我们经常会从数据库中提取数据 处理之后 将结果整理为excel输出 本文主要介绍使用python的pandas工具从mysql数据获取数据 按要求处理之后 导出到excel文件 安装依赖 首先确定已经安装PyMySQL pandas
  • pandas列值根据字典批量替换

    更多 更及时内容欢迎留意微信公众号 小窗幽记机器学习 背景 DataFrame数据中一列的值需要根据某个字典批量映射为字典中的value 方法1 pandas中的df replace import pandas as pd import n
  • dataframe 使用拉格朗日插值填充缺失值

    本例中代码使用 jupyter 运行 问题场景 在处理dataframe时 可能会遇到少量数据缺失的情况 在连续缺失数据较少的情况可以考虑插值填充 本文调用了scipy库的lagrange x y 这个函数 参数x y分别是对应各个点的x值

随机推荐

  • Linux环境使用VSCode调试简单C++代码

    本文将通过演示一个简单C 43 43 代码的编译调试过程 xff0c 介绍在VSCode中如何使用Linux环境下的GCC C 43 43 编译器 g 43 43 和GDB 调试器 gdb 关于GCC g 43 43 gcc gdb xff
  • layui date控件的使用

    最近项目多用layui xff0c 就总结一下 span class token tag span class token tag span class token punctuation lt span div span span cla
  • putty超时解决方案

    putty连续3分钟左右没有输入 就自动断开 然后必须重新登陆 很麻烦 在网上查了很多资料 发现原因有多种 环境变量TMOUT引起 ClientAliveCountMax和ClientAliveInterval设置问题或者甚至是防火墙的设置
  • 最好的黑客网站

    全国最早最大的黑客网站 黑客基地 xff1a http vip hackbase com 学黑客必去的网站 黑客基地 xff1a http www hackbase com 新手学黑客快速入门的好地方 xff1a http vip hack
  • mysql-connector-java-5.1.40-bin.jar包

    mysql connector java 5 1 40 bin jar 链接 xff1a https pan baidu com s 1G7 FsxkEJfZ4Cy6R s5j g 提取码 xff1a 5r5o
  • 利用spm12将dicom医学图像格式转成NII格式

    废话不多说 xff0c 直接上干货 xff0c 一 首先下载spm12 国外的下载源 xff0c 比较慢 xff0c 这里有百度网盘 xff0c 需要的直接下载 xff1a 链接 xff1a https pan baidu com s 1Z
  • securityCRT ssh远程开启mysql,断开连接后,mysql服务就停止服务

    问题描述 xff1a ssh远程连接服务器 xff0c 在服务器中开启mysql服务 xff0c 在正常断开ssh 连接后 xff0c 重新连接口查看mysql的状态发现 xff0c mysql的状态 xff1a 重新启动mysql xff
  • py基础之掷骰子游戏的实现

    掷骰子游戏 xff08 循环的使用及掌握 xff09 0 两个骰子都是1 6 1 玩游戏要有金币 xff0c 没有金币不能玩游戏 2 玩一局游戏赠金币一枚 xff0c 充值获得金币 3 充值为10元的倍数 xff0c 10元 20个金币 x
  • centOS 不能上外网怎么下载依赖 (通过挂载镜像)

    问题 我们在服务器上部署系统环境的时候 xff0c 常常会遇到找不到该命令 bash span class token operator span span class token punctuation span span class t
  • linux 搭建FTP服务器

    linux 搭建FTP服务器 网上对于ftp搭建有很多 xff0c 但是说的比较的麻烦 xff0c 而且十分容易出错 xff0c 并且在创建完成后存在一些配置的注意事项 废话不多说 xff0c 现在开始 1 安装 vsftpd 安装FTP服
  • 提取论文中公式神奇(写论文的福音)

    写论文还在愁怎么写复杂的公式吗 xff0c 想引用其他的论文的公式 xff0c 发现都是这样的 P X i
  • java中list.add添加元素覆盖之前的问题

    1 在码代码时 xff0c 发现一个问题 xff1a 使用 list lt object gt list 61 new Arraylist lt object gt list add object xff1b 出现之前添加的元素被最后的元素
  • 线性最优解java实现+Cplex java调用

    一 xff1a cplex的使用 xff1a 1 1 导入cplex jar 包的地址 xff1a https pan baidu com s 1Q0Bv24EQdelV2rY IrLoZQ 提取码 xff1a xn14 1 2 将cple
  • KNN算法(K临近算法)及使用KNN算法实现手写数字0-9识别

    首先感谢博主倔强的小彬雅 xff0c 本文使用的素材及部分代码来源其博文机器学习入门 用KNN实现手写数字图片识别 xff08 包含自己图片转化 xff09 xff0c 需要下载素材的可以到其博文最后进行下载 关于KNN算法 knn算法也叫
  • 如何学习开源飞控

    前言 有一段时间没有更新文章了 新的一年新气象 xff0c 因此还是要抽出时间 xff0c 写点总结与思考 xff0c 对自己的成长也是很有帮助 今天主要想聊一下开源飞控的学习 本人在5年前 xff0c 在知乎下写过一篇回答 xff0c 如
  • 控制系统的观测器基础知识

    1 为什么需要用到观测器 控制原理中的系统框图 xff0c 往往都是假设反馈状态为理想值 但在工程实践中 xff0c 这个是做不到的 一般我们采用传感器测量控制的反馈状态 xff0c 而传感器的测量值 xff0c 存在几个问题 xff1a
  • 浅谈飞控的软件设计

    写在前面 开这个专栏的目的主要是深感自己对飞控软件 算法的知识点过于杂乱 xff0c 很久没有进行系统的总结了 xff0c 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 xff0c 如内容有错误 xf
  • 飞控IMU数据进阶处理(FFT,滤波器)

    前面的文章 xff08 知乎专栏 https zhuanlan zhihu com c 60591778 xff09 曾简单讲过IMU数据 xff08 陀螺仪 加速度数据 xff09 的校准以及一阶低通滤波 本文在此基础上更进一步讲一下数据
  • (5)py接口自动化之配置文件&数据库连接详解

    目录 一 配置文件 ini amp yaml 1 作用 2 ini A 语法 B 特点 C 操作方法 3 yaml A 安装第三方库 B 支持的数据类型 C 特性 D 语法 E 数据读取 二 数据库连接与pytho配置文件 1 安装数据库
  • 再谈IMU数据处理(滤波器)

    本文开始前 xff0c 先回答一个问题 上一篇文章最后提到了卡尔曼滤波器用来做一维数据的数字滤波处理 xff0c 最终的实验结果说 xff1a 该模型下的卡尔曼滤波处理与二阶IIR低通滤波处理效果几乎一致 有网友指出是错误的 xff0c 卡