【发布时间】:2017-10-20 00:01:50
【问题描述】:
我第一次实现了卡尔曼滤波器,以从电源获取电压值。它工作并稳定在源电压值,但如果源改变电压,则滤波器不会适应新值。
我使用 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 error_in_measurement 是一个常数),所以在最后估计只依赖于之前的估计,不考虑当前的测量。
这会阻止过滤器自己适应测量变化。
我该怎么做才能做到这一点?
谢谢
编辑:
回答克拉斯:
我不确定卡尔曼滤波器对我的问题是否有效,因为我没有系统模型,我只是从一个相当嘈杂的传感器中获得了一堆读数,测量一个不太可预测的变量。
为简单起见,假设读取用户更改的电位计(可变电阻器),您无法预测或模拟用户的行为。
我已经实现了一个非常基本的 SMA(简单移动平均线)算法,我想知道是否有更好的方法来做到这一点。
卡尔曼滤波器对此类问题有效吗?
如果没有,你有什么建议?
第二次编辑
感谢 Claes 提供如此有用的信息
我一直在 MathLab 中进行一些数值测试(还没有实际数据),并且使用高斯滤波器进行卷积似乎给出了最准确的结果。
使用卡尔曼滤波器我不知道如何估计过程和测量方差,有什么方法吗?只有当我减少了相当多的测量方差时,卡尔曼滤波器似乎才能适应。在上一张图片中,测量方差为 R=0.1^2(原始示例中的那个)。这是 R=0.01^2
的相同测试当然,这些是没有真实数据的 MathLab 测试。明天我会尝试用真实数据在真实系统中实现这个过滤器,看看能不能得到类似的结果
【问题讨论】:
-
请提供您的代码或系统型号/参数,没有它们很难分析您的问题。
-
@ClaesRolen 感谢您的回复,请阅读编辑后的帖子
-
我的回答中的系统模型是最简单的。它预测下一个值与前一个值相同。一个改进是将预测设置为:x(n+1) = x(n)+drift+acceleration,但是我们需要重写代码以支持矩阵...
标签: filter filtering kalman-filter pykalman