
卡尔曼滤波与最大相关熵的对比仿真:稳态MSD与广义最小误差熵卡尔曼滤波器在非
高斯噪声下的应用
最近在搞状态估计的时候发现个有意思的事儿:传统卡尔曼滤波在遇到非高斯噪声时就跟喝高了
一样,估计轨迹抖得亲妈都不认识。刚好看到ISA Transactions上有篇论文讲广义最小误差熵方法,顺手
把最大相关熵卡尔曼滤波(MCKF)和传统KF拉出来遛遛,看看谁在非高斯场子里更稳。
先扔个Python仿真框架镇楼。咱们用个简单的一维运动模型,故意往观测数据里掺和椒盐噪声(这
玩意儿专治各种高斯假设不服):
```python
import numpy as np
import matplotlib.pyplot as plt
# 系统参数
dt = 0.1
F = np.array([[1, dt], [0, 1]]) # 状态转移矩阵
H = np.array([[1, 0]]) # 观测矩阵
Q = np.diag([0.1, 0.01]) # 过程噪声协方差
R = 0.5 # 观测噪声协方差(传统KF用)
# 生成非高斯噪声
def spike_noise(size):
normal = 0.8*np.random.randn(size)
spike = 2*(np.random.rand(size) < 0.2)*np.random.randn(size) # 20%概率出现脉冲
return normal + spike
# 真实状态与观测生成
steps = 200
true_states = np.zeros((steps, 2))
measurements = np.zeros(steps)
for k in range(1, steps):
true_states[k] = F @ true_states[k-1] + np.random.multivariate_normal([0,0], Q)
measurements[k] = H @ true_states[k] + spike_noise(1)[0]
```