我第一次实现卡尔曼滤波器以从源获取电压值。它工作并稳定在源电压值,但如果源改变电压,则滤波器不会适应新值。
我使用 3 个步骤:
获得卡尔曼增益
KG = previous_error_in_estimate / ( previous_error_in_estimate + Error_in_measurement )
获取当前估计
Estimation = previous_estimation + KG*[measurement - previous_estimation]
计算估计误差
Error_in_estimate = [1-KG]*previous_error_in_estimate
问题是,随着 0 <= KG <= 1,Error_in_estimate 越来越小,这使得 KG 越来越小(error_in_measurement
是一个常数),所以最后的估计只取决于之前的估计和当前的估计测量不考虑。
这可以防止过滤器自己适应测量变化。
我该怎么做才能做到这一点?
谢谢
编辑:
回复克拉斯:
我不确定卡尔曼滤波器对我的问题是否有效,因为我没有系统模型,我只是从一个相当嘈杂的传感器中获得了一堆读数,测量一个不太可预测的变量。
为简单起见,假设读取用户更改的电位器(可变电阻器),您无法预测或模拟用户的行为。
我已经实现了一个非常基本的 SMA(简单移动平均线)算法,我想知道是否有更好的方法来做到这一点。
卡尔曼滤波器对这样的问题有效吗?
如果没有,你有什么建议?
第二次编辑
感谢 Claes 提供如此有用的信息
我一直在 MathLab 中进行一些数值测试(还没有实际数据),并且使用高斯滤波器进行卷积似乎给出了最准确的结果。
使用卡尔曼滤波器,我不知道如何估计过程和测量方差,有什么方法吗?只有当我减少了相当多的测量方差时,卡尔曼滤波器似乎才能适应。在上一张图片中,测量方差为 R=0.1^2(原始示例中的那个)。这是 R=0.01^2 的相同测试
当然,这些是没有真实数据的 MathLab 测试。明天我将尝试用真实数据在真实系统中实现这个过滤器,看看我是否能得到类似的结果