ADC滤波算法之卡尔曼算法

/*****************************************************
*函数名称:kalman_filter
*函数功能:ADC_滤波
*入口参数:ADC_Value
*出口参数:kalman_adc
*****************************************************/
unsigned long kalman_filter(unsigned long ADC_Value)
{
    float x_k1_k1,x_k_k1;
    static float ADC_OLD_Value;
    float Z_k;
    static float P_k1_k1;

    static float Q = 0.0001;//Q:规程噪声,Q增大,动态响应变快,收敛稳定性变坏
    static float R = 0.005; //R:测试噪声,R增大,动态响应变慢,收敛稳定性变好
    static float Kg = 0;
    static float P_k_k1 = 1;

    float kalman_adc;
    static float kalman_adc_old=0;
    Z_k = ADC_Value;
    x_k1_k1 = kalman_adc_old;

    x_k_k1 = x_k1_k1;
    P_k_k1 = P_k1_k1 + Q;

    Kg = P_k_k1/(P_k_k1 + R);

    kalman_adc = x_k_k1 + Kg * (Z_k - kalman_adc_old);
    P_k1_k1 = (1 - Kg)*P_k_k1;
    P_k_k1 = P_k1_k1;

    ADC_OLD_Value = ADC_Value;
    kalman_adc_old = kalman_adc;

    return kalman_adc;
}

 

posted @ 2020-05-08 14:12  淘气开发者  阅读(1160)  评论(0)    收藏  举报