图片缩略图

卡尔曼滤波软件包

version 1.0.0.0 (205 KB) by 布莱恩摩尔
实现卡尔曼滤波器,扩展卡尔曼滤波器,双卡尔曼滤波器,平方根卡尔曼滤波器
4.8
26日评级

49下载

更新2012年9月24日

查看许可证

这个包实现了以下卡尔曼滤波器:

1) 标准卡尔曼滤波器
2)扩展卡尔曼滤波
3) 双卡尔曼滤波器
4) 平方根卡尔曼滤波器

这个包还包含了每个过滤器类型的指导示例,演示了它们的实际应用。

在所有4种情况下,KF函数都接受一个多维系统的噪声样本作为输入,并根据噪声样本中固有的时变过程/噪声协方差产生真实系统状态的KF估计。

指数加权(或非加权)移动平均用于从噪声测量中估计时变系统协方差。

标准卡尔曼滤波器是最基本的KF实现。它假设噪声测量包含真实系统状态加上白噪声的模型。

扩展卡尔曼滤波器是标准卡尔曼滤波器的推广,允许用户指定非线性系统模型,然后在EKF执行期间迭代线性化。

双重卡尔曼滤波器同时解决两个标准卡尔曼滤波器问题:

1)对数据拟合自回归模型,并应用卡尔曼滤波对AR模型进行更新

2)在执行Standard KF更新之前,在每次迭代中应用AR模型

平方根卡尔曼滤波器是一种更加稳健和数值稳定的方法来执行标准/双卡尔曼滤波,特别是当感兴趣的协方差矩阵是病态的或几乎不是正定的。平方根卡尔曼滤波思想是以平方根形式传播过程误差协方差P = U D U',其中U和D被迭代更新,P不显式计算。这样做将保证P是正定的,从而增加KF的数值稳定性。

引用为

布莱恩摩尔(2021)。卡尔曼滤波软件包(//www.tatmou.com/matlabcentral/fileexchange/38302-kalman-filter-package),MATLAB中央文件交换。恢复.

意见及评分(47)

FiltSamp

内斯托内斯托

Sadaf无袖短上衣

@DILEEP KUMAR你找到心电图了吗?我也有同样的问题。

iwein vranckx

绝对的好包!谢谢

阿坎德海军

H H

我认为代码中存在错误,因为“状态”向量中的噪声是w=N(0,Q),Q是协方差。Q的维数是n乘n,其中n是状态向量的长度。另一方面,R是“测量”中噪声的协方差。R的维数是m乘m,m是(测量的)数据向量的长度。

Sharanya斯

嗨,布莱恩,谢谢你的回复。抱歉,如果这看起来很幼稚,但是Q不应该表示状态的噪声协方差矩阵吗?然而你描述它的方式,Q = E[zbar zbar^T],描述了测量中的噪声协方差。例如,如果我在2D笛卡尔平面上测量物体与原点的距离,但使用EKF估计运动物体的位置(x,y),这可能会带来问题。

布莱恩摩尔

我的代码自适应地估计了进程(Q)和噪声(R)协方差。对于我用来估计Q和R的策略,我没有特别的参考,我只是使用以下简单的启发式:
-计算测量值(z)的移动平均值(zbar),并认为这是真实状态的(粗略)估计
- Q = zbar在回顾窗口的样本协方差
-R=回望窗口上z-zbar的样本协方差

Sharanya斯

嗨,布莱恩,这很有帮助。然而,在我的应用程序中,状态与测量值不同。我如何自适应地估计这种情况下的噪声方差。另外,您能否提供在代码中使用的Q和R估算参考。由于一吨。:)

丹尼斯·贾

Mrudula Deshpande

我正在尝试使用卡尔曼滤波来减少语音信号中的噪声。我正在参考https://in.mathworks.com/help/coder/examples/c-code-generation-for-a-matlab-kalman-filtering-algorithm.html. 但我不知道如何为嘈杂的语音信号生成position.mat文件。如何使用它来减少语音信号中的噪音。

DILEEP KUMAR

嗨,布莱恩,我想实现用于ECG信号去噪的卡尔曼滤波代码,但我无法实现。有什么建议吗?

特命全权大使李

乌姆卡尔·贾根

谢谢你@Brian Moore

你能推荐一些关于darkalmanfilter .m标准的参考出版物吗

丹•吉

我的标准darkalmanfilter有问题。在通过过滤循环的第一次尝试中,我得到错误,因为I和N值传递给StandardCovEstimate(索引为0:I)。我使用的是AR(1)模型(MA = 0),它看起来像一个偏离1的问题。有什么建议吗?

谢谢。

怀中

张内森

红色的石头

丹海

亲爱的布莱恩,
我可以查阅有关这些方法的参考出版物吗?

此外,我是否正确地说,移动平均用于平滑的d_z,而回顾值用于卡尔曼滤波器更新?

谢谢你:)

布莱恩摩尔

@ Mushfiqul: z =测量,x =状态

Mushfiqul阿拉姆

亲爱的布莱恩,
谢谢您的回复。
变量z是指EKF的状态还是EKF的度量?

谢谢

布莱恩摩尔

@Mushfiqul: smoothed_z是输入数据的移动平均值(非加权或指数加权),它是在主函数中计算的(例如,StandardKalmanFilter.m)

Mushfiqul阿拉姆

亲爱的布莱恩•摩尔
MATLAB包非常棒。非常感谢你和我们分享。

你能解释一下你是如何计算StandarCovEst函数中的平滑_z的吗?

谢谢你,穆什菲克尔
mushfala@fel.cvut.cz

布莱恩摩尔

@忻州:谢谢你的反馈!平滑_z是输入数据z的移动平均值(例如,指数加权)。然后,StandardCovEst.m计算

Q=平滑_z的协方差
R = z -平滑的协方差

上述方法是一种启发式方法。其思想是卡尔曼滤波(KF)基本上是平滑您的数据,所以我使用smoothed_z作为未知状态的代理,而z - smoothed_z作为噪声的代理。

如果你想要一个更严格的算法来估计协方差(例如,统计一致性保证),你需要参考KF文献。任何这样的算法都需要对数据进行假设,而我不想在我的实现中做任何这样的假设,所以我采用了启发式。

希望这个有帮助。

忻州

干得好,非常感谢。我有一个关于估算Q和R的问题。“StandardCovEst.m”似乎是做这项工作的函数。您是如何在StandardKalman Filter函数中平滑的。
您似乎使用此值来计算协方差。如果你有任何关于这个估计方法的参考资料,请你也提供给我。谢谢

布莱恩摩尔

@孔祥闯:你得自己修改代码。为了简单起见,我特意用A=I、B=I等来编写代码。

修改代码应该不会太难,只要参考文献中的许多卡尔曼滤波器参考之一,看看在哪里添加系统矩阵。例如,我推荐以下易于阅读的文章:

https://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf

香港xiangchuang

如何在代码中包含A,B,u,H ?谢谢!

张玉丽

做得好

赫尔德派斯酒店

布莱恩摩尔

@tverskoj为什么被评为1星级?请提供反馈,以便我可以改进提交!

布莱恩摩尔

双重卡尔曼滤波器被用来实现自动回归卡尔曼滤波器(参见standard darkalmanfilter .m)

亚伦

你好,我在这个包里找不到双卡尔曼滤波器,它被删除了吗?

布莱恩摩尔

@Mike好的观点-为了简单起见,我假设了最基本的“白噪声”模型(A=I、B=I等),这样用户就可以快速运行过滤器,而无需进行任何建模。

当然,如果您的数据确实有一个模型,您应该能够遵循任何基本的卡尔曼滤波参考,以查看在哪里插入模型矩阵

话筒的葡萄树

话筒的葡萄树

为什么你的方程中没有包含A B u和H ?

tverskoj

贾斯汀

百合科

国盛黄

对我很有帮助,非常感谢!

Smahato

有关于结构动力学问题的例子吗

阿米特·伯马诺

易于使用,良好的默认值,可读性,伟大!
非常感谢

afu2007??

你能告诉我StandardCovEst.m的参考资料吗?

gaozk789@gmail.com
谢谢你!

张蓝

很好的代码,谢谢!

庄文华

布莱恩摩尔

嗨,亚历山大,

在运行任何脚本之前,请确保将Kalman Filters目录和*all*子目录添加到MATLAB路径中。

例如,为了解决特定的问题,EWMA()是位于“MA方法”子目录中的函数。但是,如果您不将其他子目录(“协方差估计方法”、“线性代数方法”和“平方根过滤方法”)也添加到您的路径中,您可能会得到更多的错误。

干杯

亚历山大

Demo2有问题吗
???使用==> eval时出错
类型的输入参数的未定义函数或方法“EWMA”
“双”。

113处==>StandardKalmanFilter中的错误
eval(['smooted_z='MAType'(z,MAlen);']);

错误在==> KF_Demo2在41
[x_kf kf]=标准卡尔曼滤波器(z,MAlen,N);

优素福Khmou

MATLAB版本兼容性
创建R2009a
与任何版本兼容
平台兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!