卡尔曼滤波算法 C语言实现
/********************************************************************************* @brief 卡尔曼滤波器 函数* @param inData - 输入值* @return 滤波后的值* @noter值固定,q值越大,代表越信任测量值,q值无穷大,代表只用测量值。*q值越小,代表越信任模型预测值,q值为0,代表只
·
/**
******************************************************************************
* @brief 卡尔曼滤波器 函数
* @param inData - 输入值
* @return 滤波后的值
* @note r值固定,q值越大,代表越信任测量值,q值无穷大,代表只用测量值。
* q值越小,代表越信任模型预测值,q值为0,代表只用模型预测值。
* q:过程噪声,q增大,动态响应变快,收敛稳定性变坏;反之。控制误差
* r:测量噪声,r增大,动态响应变慢,收敛稳定性变好;反之。控制响应速度
******************************************************************************
*/
unsigned long KalmanFilter(unsigned long inData)
{
static float xdata kalman = 0; //上次卡尔曼值(估计出的最优值)
static float xdata p = 10;
float xdata q = 0.001; //q:过程噪声
float xdata r = 0.001; //r:测量噪声
float xdata kg = 0; //kg:卡尔曼增益
p += q;
kg = p / ( p + r ); //计算卡尔曼增益
kalman = kalman + (kg * (inData - kalman)); //计算本次滤波估计值
p = (1 - kg) * p; //更新测量方差
return (unsigned long)kalman; //返回估计值
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)