①估计时刻k的状态:

②误差相关矩阵P,度量估计值的精确程度

③卡尔曼增益

④更新误差相关矩阵

⑤更新状态变量

⑥最后输出

C语言代码:
float X_pre,P_pre,X_kalman_last,P_kalman_last,X_kalman=2500,P_kalman=2; //赋初值
float H,Q=0.001,R=0.3;
while(1)
{adc = Get_Adc_Average(ADC_Channel_1,10);P_kalman_last = P_kalman; //获取上一个PX_kalman_last = X_kalman; //获取上一个XX_pre = X_kalman_last; //A=1, B=0,C=1P_pre = P_kalman_last + Q;H = P_pre/(P_pre + R); P_kalman = P_pre - H*P_pre;X_kalman = X_pre + H*(adc - X_pre) //y=X_kalman输出delay_ms(10);
}
滤波效果:

绿色线为ADC采样波形,紫色线是滤波后波形。
调节Q和R可得到不同滤波效果。














