学习目标:
提示:这里可以添加学习目标
学习卡尔曼滤波原理,并基于stm32 单片机+max44099光度传感器模块测试。
学习内容:
提示:这里可以添加要学的内容
1、在B站向华南虎和其他几位博主学习了原理和公式(不需要深究原理,主要理解)
2、本质:最优估计值(输出值) = 当前的估计值+测量值 (加权);
3、步骤主要包括预测和更新(5大公式)
学习产出:
提示:这里统计学习计划的总量
一维卡尔曼滤波公式是真的简单(根据华南虎讲的来的):
然后就是对应,
编写程序:
/* 一维卡尔曼滤波 */
float kalman_filter_1(float new_lux)
{
static float p_t=1; // 最优估计协方差
static float p_t_=1; // 先验估计的协方差
static float K; //增益
static float R=0.01; // R:观测噪声系数(与传感器精度成反比)
static float lux=0; //最优估计值(最终输出)
static float lux_=0; //先验估计值
/* 状态估计 */
lux_ = lux; //先验估计,此次估计值=上次的最优估计
p_t_ = p_t; //此次的估计协方差 = 上次的最优估计协方差
/* 修正估计*/
K = p_t_/(p_t_ + R); //更新 K
lux = lux_ + K*(new_lux - lux_);//更新最优估计值,即得到当前最优估计值
p_t = (1-K)*p_t_;
return lux;
}
结果展示:
未加滤波前:
加了滤波后(是接着上图来的,所以滤波后的为下图中后半部分):
效果还是很明显啊!