互补滤波器
2016-05-20 10:46
162 查看
互补滤波器
从 RC 电路 到 数字滤波器 。参考:wikiPedia
by luoshi006
欢迎留言交流,或luoshi006@gmail.com
介绍
Created with Raphaël 2.1.0IMU互补滤波结构图:加速度计加速度计陀螺仪陀螺仪低通滤波器数值积分高通滤波器求和输出结果第一次用这么高级的UML序列图,不太了解,计算到 输出结果 就结束了。请海涵……
原理
低通滤波器
传递函数常见的 RC 电路构成的一阶低通滤波器的输入(U) 输出(Y)关系如下:
YU=11+RC⋅S\frac{Y}{U}=\frac{1}{1+RC\cdot S}
其中,滤波器的截止频率为:wc=1RCw_c=\frac{1}{RC}。
######################### 该部分内容在Z变换时 #################################### ######################### 未考虑零阶保持器等 #################################### ######################### 得到的结果形似神不似 ################################### ######################### 故,暂时只做参考。 ################################### #### **Z变换** > Z变换公式:$Z=e^{st}$ > 可得:$S=\frac{lnZ}{T}$ > 按泰勒一阶展开:$s=\frac{z-1}{T}$ 对复域的传函进行Z变换($s=\frac{z-1}{T}$): $$T\cdot U=T \cdot Y+RC\cdot Z\cdot Y-RC\cdot Y$$ #### **Z反变换** $$T\cdot U(k)=T \cdot Y(k)+RC\cdot Y(k+1)-RC\cdot Y(k)$$ 化简: $$Y(k+1)=(1-\frac {T}{RC}) \cdot Y(k)+\frac{T}{RC} \cdot U(k)$$
将传函转换为微分形式:
y(t)+RCdy(t)dt=x(t)y(t)+RC \frac{dy(t)}{dt}=x(t)
dy(t)dt=差分=y(k)−y(k−1)T\frac{dy(t)}{dt}=差分=\frac{y(k)-y(k-1)}{T},代入得到差分形式:
y(k)=RCT+RCy(k−1)+TT+RCx(k)y(k)=\frac{RC}{T+RC}y(k-1)+\frac{T}{T+RC}x(k)
即,一阶低通滤波的差分形式。
C代码
float acc_lpf_factor = 4.0f;//低通滤波因子 static sensor_t accLPF; // 低通滤波后的加速度计值 for (uint8_t axis = 0; axis < 3; axis++) {//对三轴数据分别滤波 accLPF.data[axis] = accLPF.data[axis] * (1.0f - (1.0f / acc_lpf_factor)) + (float)mpu6500->acc.data[axis] * (1.0f / acc_lpf_factor); // Apply low pass filter }
高通滤波器
依然使用RC电路为模型。传递函数为:
G(s)=11+1RC⋅SG(s)=\frac {1}{1+\frac{1}{RC\cdot S}}
=RC⋅SRC⋅S+1=\frac {RC\cdot S}{RC \cdot S+1}
******************* 内容仅作参考 ******************************* 由 $s=\frac {Z-1}{T}$变换: $$U\cdot RC \cdot Z - U\cdot RC=Y\cdot RC \cdot Z- Y\cdot RC+Y\cdot T$$ Z反变换: $$Y(k+1)=U(k+1)-U(k)+(1-\frac{T}{RC}) Y(k)$$
将传函转化为微分形式:
RC⋅dy(t)dt+y(t)=RC⋅dx(t)dtRC\cdot \frac{dy(t)}{dt}+y(t)=RC \cdot \frac{dx(t)}{dt}
转换为差分形式:
y(k)=RCRC+Ty(k−1)+RCRC+T(x(k)−x(k−1))y(k)=\frac{RC}{RC+T}y(k-1)+\frac{RC}{RC+T}(x(k)-x(k-1))
该部分代码未找到实际使用示例,故,在此不列出 C 代码。
互补滤波器
综上,可知:低通滤波器:
y(k)=RCRC+Ty(k−1)+TRC+Tx(k)y(k)=\frac{RC}{RC+T}y(k-1)+\frac{T}{RC+T}x(k)
高通滤波器:
y(k)=RCRC+T[y(k−1)+Δx(k)]y(k)=\frac{RC}{RC+T}[y(k-1)+\Delta x(k)]
故,互补滤波器:
y(k)=RCRC+T[y(k−1)+Δxgyro(k)]+TT+RCxacc(k)y(k)=\frac{RC}{RC+T}[y(k-1)+\Delta x_{gyro}(k)]+\frac{T}{T+RC}x_{acc}(k)
angle = (factor) * (angle + gyro * dt ) + (1 - factor) * (x_acc);
其中,factor 为互补滤波因子,定义域:( 0 , 1 )。
the end
本文简单介绍了一阶互补滤波的理论和实现,以期望对刚开始接触数字滤波的朋友有所帮助。互补滤波使用较多的 mahony 滤波,限于篇幅,另外介绍。
如果在文中,发现错误或不妥当的地方,请直接留言,或 邮箱 交流。不胜感激~
互补滤波器
介绍
原理
低通滤波器
高通滤波器
互补滤波器
the end
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- LeetCode 43. Multiply Strings(乘法)
- nginx 并发数
- 优秀程序员的十个习惯
- Java中Properties的使用详解
- [Tool] Python几个windows版本的区别
- AfinalHttp的AjaxBack简单封装
- Java 连接hbase 进行简单操作
- mac电脑使用
- 0.1 Spark Streaming 实现思路与模块概述
- 毛玻璃效果
- Linux如何在虚拟机中挂载iso yum源
- C++第六次实验—循环(实验)
- JSON的输出方式
- 从网络上收集的爬虫工具,推荐基于python的工具
- iOS开发-做项目中遇到的坑
- SQL学习笔记5——用代码实现对列的 增、删、改和约束
- thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
- 代码加约束VFL语法的详细使用介绍(代替Autolayout进行布局,比Autolayout更简单明了,生动直观)
- JMX