一阶,二阶,卡尔曼滤波后的角度效果图

2019-07-21 02:59发布

一阶滤波

二阶滤波,二阶好像反应好迟钝
卡尔曼滤波

测试过程中,我把mpu6050在+-90°反复转得到上面的角度值,紫 {MOD}是没滤波的,黄的是经过滤波后的
float First_order_filter(float Com_angle,float angle_pt,float angle,float dt);
参数说明:com_angle 滤波后的角度,  angle_pt 角速度(弧度制), angle 角度(弧度制), dt 微分时间(秒)
调用       :  com_angle = First_order_filter(com_angle, ang_pt, ang, dtime)

上位机用的是匿名飞控上位机,上位机使用说明请查看9mcu的匿名发的帖子
 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
40条回答
MJM
2019-07-23 19:24
小李飞刀 发表于 2016-1-20 09:51
单一量的话 没法对它进行概率的最优化求解

以前见过一个说是卡尔曼。不知道是不是。 套用后有效果。但是数据滞后严重。
代码如下:
[mw_shl_code=c,true]#include "KF.h"


   
double KF_Q = 0.01;                // Q:过程噪声,Q增大,动态响应变快,收敛稳定性变坏
double KF_R = 0.1;                // R:测量噪声,R增大,动态响应变慢,收敛稳定性变好     



u16 KalmanFilter(u16 v)
{
        static double x_last;
        static double p_last;
        double x_mid;
        double x_now;
        double p_mid;
        double p_now;//协方差
        double kg;   //卡尔曼     
       
       
        x_mid = x_last;                                                 //x_last=x(k-1|k-1), x_mid=x(k|k-1)
        p_mid = p_last + KF_Q;                                 //p_mid=p(k|k-1),p_last=p(k-1|k-1),KF_Q=噪声
        kg = p_mid / (p_mid+KF_R);                 //kg为kalman filter,R为噪声
        x_now = x_mid + kg * (v-x_mid);        //估计出的最优值

        p_now = (1-kg) * p_mid;                                //最优值对应的covariance        

        p_last = p_now; //更新covariance值//协方差
        x_last = x_now; //更新系统状态值              

        return        x_now;
}

//end[/mw_shl_code]

一周热门 更多>