iOS 的卡尔曼滤波器
Kalman Filter for iOS
我正在尝试从部署在我实验室天花板上的低功耗蓝牙信标获得平滑的 RSSI 值。我使用加权平均滤波器和移动平均滤波器但无法获得良好的结果。通过各种期刊论文,我了解到卡尔曼滤波器可用于此目的。但是我无法获得合适的数学方程式来使用 objective-c 进行编码。有人可以提供有关数学方程式或卡尔曼滤波器实现的任何提示吗?非常感谢。
像这样的一维情况意味着所有矩阵实际上都只是标量值。你需要知道两件事:
R
,测量方差。您可以通过记录一系列 RSSI 值(在固定位置)来直接测量这一点,就像您通常那样,然后测量它们的方差。您可以使用 Excel 或 python 轻松完成此操作,甚至可以从头开始编写自己的代码。
Q
,过程差异。这是您期望 RSSI 在相同时间内(两次测量之间)实际变化的程度。这个你也可以测,也可以推理一下。
如果您查看卡尔曼滤波器方程式,您会发现 P
不依赖于您的实际测量值,仅依赖于上述两个值。结果,由于它们是常数,P
将收敛到一个固定值。由于 K
(卡尔曼增益)仅依赖于这些值,因此它也会收敛。对于像您这样的应用程序,找到稳态 K
并一直使用它通常就足够了。
现在这只是一种创建简单移动平均滤波器的复杂方法(但在最小二乘意义上是最优的)。
如果您正在寻找卡尔曼滤波器的 swift 实现,那么值得一看 this framework。它是传统滤波器算法的通用实现,它还提供矩阵结构和卡尔曼滤波器中使用的矩阵的所有必要操作
我正在尝试从部署在我实验室天花板上的低功耗蓝牙信标获得平滑的 RSSI 值。我使用加权平均滤波器和移动平均滤波器但无法获得良好的结果。通过各种期刊论文,我了解到卡尔曼滤波器可用于此目的。但是我无法获得合适的数学方程式来使用 objective-c 进行编码。有人可以提供有关数学方程式或卡尔曼滤波器实现的任何提示吗?非常感谢。
像这样的一维情况意味着所有矩阵实际上都只是标量值。你需要知道两件事:
R
,测量方差。您可以通过记录一系列 RSSI 值(在固定位置)来直接测量这一点,就像您通常那样,然后测量它们的方差。您可以使用 Excel 或 python 轻松完成此操作,甚至可以从头开始编写自己的代码。Q
,过程差异。这是您期望 RSSI 在相同时间内(两次测量之间)实际变化的程度。这个你也可以测,也可以推理一下。
如果您查看卡尔曼滤波器方程式,您会发现 P
不依赖于您的实际测量值,仅依赖于上述两个值。结果,由于它们是常数,P
将收敛到一个固定值。由于 K
(卡尔曼增益)仅依赖于这些值,因此它也会收敛。对于像您这样的应用程序,找到稳态 K
并一直使用它通常就足够了。
现在这只是一种创建简单移动平均滤波器的复杂方法(但在最小二乘意义上是最优的)。
如果您正在寻找卡尔曼滤波器的 swift 实现,那么值得一看 this framework。它是传统滤波器算法的通用实现,它还提供矩阵结构和卡尔曼滤波器中使用的矩阵的所有必要操作