Kalman-卡尔曼滤波
卡尔曼滤波(Kalman Filter)是一类线性高斯状态空间模型的最优递推估计方法,适用于含噪观测序列的状态估计、平滑与预测。其核心思想是:在给定系统动力学与观测方程的前提下,通过“预测—更新”递推,得到状态的最小均方误差估计。
Kalman-卡尔曼滤波
1. 方法概述
卡尔曼滤波(Kalman Filter)是一类线性高斯状态空间模型的最优递推估计方法,适用于含噪观测序列的状态估计、平滑与预测。其核心思想是:在给定系统动力学与观测方程的前提下,通过“预测—更新”递推,得到状态的最小均方误差估计。
设系统在时刻 \(t\) 的状态为 \(x_t\),观测为 \(z_t\),则卡尔曼滤波通过融合模型预测与观测信息,实现对不可见状态(如位置、速度、趋势等)的估计。
2. 线性状态空间模型
2.1 状态转移方程
$$ x_t = F x_{t-1} + B u_t + w_t \tag{1} $$
2.2 观测方程
$$ z_t = H x_t + v_t \tag{2} $$
其中过程噪声 \(w_t\) 与观测噪声 \(v_t\) 满足
$$ w_t \sim \mathcal{N}(0,Q),\quad v_t \sim \mathcal{N}(0,R),\quad \mathbb{E}[w_t v_t^\top]=0 \tag{3} $$
3. 卡尔曼滤波递推(预测—更新)
3.1 预测(Prediction)
$$ \hat{x}_{t|t-1} = F \hat{x}_{t-1|t-1} + B u_t \tag{4} $$
$$ P_{t|t-1} = F P_{t-1|t-1} F^\top + Q \tag{5} $$
3.2 创新与创新协方差
$$ \nu_t = z_t - H \hat{x}_{t|t-1} \tag{6} $$
$$ S_t = H P_{t|t-1} H^\top + R \tag{7} $$
3.3 更新(Update)
$$ K_t = P_{t|t-1} H^\top S_t^{-1} \tag{8} $$
$$ \hat{x}_{t|t} = \hat{x}_{t|t-1} + K_t \nu_t \tag{9} $$
$$ P_{t|t} = (I - K_t H) P_{t|t-1} \tag{10} $$
3.4 对数似然(用于模型评价)
$$ \log L = -\frac{1}{2}\sum_{t=1}^{T}\Big(\log|S_t| + \nu_t^\top S_t^{-1}\nu_t + m\log(2\pi)\Big) \tag{11} $$
其中 \(m\) 为观测维度。
4. RTS 平滑(可选)
当需要基于全样本进行平滑估计时,可使用 RTS 平滑器:
$$ C_t = P_{t|t} F^\top P_{t+1|t}^{-1} \tag{12} $$
$$ \hat{x}_{t|T} = \hat{x}_{t|t} + C_t(\hat{x}_{t+1|T} - \hat{x}_{t+1|t}) \tag{13} $$
$$ P_{t|T} = P_{t|t} + C_t(P_{t+1|T} - P_{t+1|t})C_t^\top \tag{14} $$
5. 预测(Forecast)
基于最新状态估计 \(\hat{x}_{T|T}\),可递推得到 \(h\) 步预测:
$$ \hat{x}_{T+h|T} = F^h \hat{x}_{T|T} \tag{15} $$
并据观测方程得到预测观测 \(\hat{z}_{T+h|T}\)。
6. 常用模型:一维匀速模型(constant_velocity_1d)
状态向量设为
$$ x_t = \begin{bmatrix} p_t \\ v_t \end{bmatrix} \tag{16} $$
状态转移矩阵
$$ F = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} \tag{17} $$
观测矩阵(仅观测位置)
$$ H = \begin{bmatrix} 1 & 0 \end{bmatrix} \tag{18} $$
过程噪声协方差(基于加速度噪声强度 \(q\))
$$ Q = q\begin{bmatrix} \Delta t^4/4 & \Delta t^3/2 \\ \Delta t^3/2 & \Delta t^2 \end{bmatrix} \tag{19} $$
观测噪声协方差(标量)
$$ R = r \tag{20} $$
7. 评价指标
RMSE(滤波/平滑)
$$ \text{RMSE} = \sqrt{\frac{1}{n}\sum_{t=1}^{n}(z_t - \hat{z}_t)^2} \tag{21} $$
其中 \(\hat{z}_t\) 可为滤波或平滑估计值。
8. 符号说明表(详细版)
| 符号 | 含义 |
|---|---|
| \(x_t\) | 时刻 \(t\) 的状态向量 |
| \(z_t\) | 时刻 \(t\) 的观测值 |
| \(F\) | 状态转移矩阵 |
| \(H\) | 观测矩阵 |
| \(B\) | 控制输入矩阵 |
| \(u_t\) | 控制输入向量 |
| \(Q\) | 过程噪声协方差 |
| \(R\) | 观测噪声协方差 |
| \(P_{t\mid t-1}\) | 预测协方差 |
| \(P_{t\mid t}\) | 更新协方差 |
| \(K_t\) | 卡尔曼增益 |
| \(\nu_t\) | 创新(残差) |
| \(S_t\) | 创新协方差 |
| \(\hat{x}_{t\mid t-1}\) | 预测状态估计 |
| \(\hat{x}_{t\mid t}\) | 更新状态估计 |
| \(\hat{x}_{t\mid T}\) | 平滑状态估计 |
| \(\Delta t\) | 采样间隔 |
| \(q,r\) | 噪声强度(过程/观测) |
| \(\log L\) | 对数似然 |
9. 与代码实现的对应关系
本算法在程序中由 具体的算法2/Kalman-卡尔曼滤波/core/calculator.py 实现,支持标准 KF 与 UKF 路径、RTS 平滑以及多步预测。程序会把滤波步骤、模型矩阵、预测结果和图表索引全部导出,因此论文结果部分应与这些实际产物一一对应。
9.1 程序实际导出的工作表
RawData_Preview:原始数据预览;Filter_Steps:逐步滤波/平滑结果;FitSummary:模型摘要与误差指标;F、H、Q、R:模型矩阵;x0、P0:初始状态与初始协方差;Diagnostics:诊断结果;Forecast:未来预测及区间;Charts_Index:图表索引。
9.2 程序实际生成的图表
obs_filtered_smoothed:观测/滤波/平滑对比;innov_series:创新序列;kalman_gain:卡尔曼增益;forecast:预测曲线与区间。
9.3 程序实现中应写明的点
- 程序支持
filter_method=kf/ukf,正文若用了 UKF 不应仍写线性 KF; - 开启
enable_smoothing时会额外导出平滑结果; Forecast表的区间直接来自状态传播,不是后验手工加宽;Filter_Steps已包含状态估计与协方差信息,适合附录做方法复核。
10. 论文写作模板
系统通常输出以下内容(Excel 多表 + 图表):
- 原始数据预览、滤波/平滑结果表、诊断统计(创新均值/方差/正态性检验等)
- 模型矩阵(F/H/Q/R) 与 初始状态 (x0, P0)
- 预测结果表(含区间)
- 图表:观测/滤波/平滑对比、创新序列、卡尔曼增益、预测曲线等
论文模板段落(方法)
本文采用卡尔曼滤波对观测序列进行状态估计。系统建立线性高斯状态空间模型(式(1)–(3)),并按照预测—更新递推(式(4)–(10))得到滤波估计;在需要时使用 RTS 平滑(式(12)–(14))获得全样本平滑结果。模型评价采用对数似然(式(11))与 RMSE(式(21))指标。
论文模板段落(结果)
结果表明,滤波估计序列与观测值保持一致性,创新序列均值接近 0、方差稳定,RMSE 显著低于原始观测噪声水平。预测结果随步数扩展呈合理趋势,置信区间宽度随预测步数增加而扩大。
11. 注意事项
- \(\Delta t\) 需与数据时间间隔一致,若自动估计失败应手动设置。
- 过程噪声 \(Q\) 与观测噪声 \(R\) 影响平滑程度,可通过网格或经验调整。
- 当系统为非线性时,应使用 UKF/EKF;本系统提供 UKF 选项用于非线性扩展。
- 若观测含异常值,建议先做异常值处理以避免滤波偏移。
12. 单篇终审补充
12.1 图题与表题对齐建议
- 本文档应优先对应真实算法目录
具体的算法2/Kalman-卡尔曼滤波,代表性结果目录建议绑定具体的算法2/Kalman-卡尔曼滤波/results/Kalman(constant_velocity_1d)分析结果_20260329_165531。 - 表题应直接对应
Kalman(constant_velocity_1d)分析结果_20260329_165531.xlsx的真实工作表:RawData_Preview、Filter_Steps、FitSummary、F、H、Q、R、x0、P0、Diagnostics、Forecast、Charts_Index。 - 图题应优先对应该目录下已存在的实体图片:
obs_filtered_smoothed_20260329_165531.png、innovations_20260329_165531.png、kalman_gain_20260329_165531.png、forecast_20260329_165531.png。 - 当前代表目录主要是
xlsx + png + repro结构,没有额外 HTML/TXT 报告,论文图题和附录说明不应写出当前磁盘不存在的诊断网页。
12.2 终审说明
- 复现脚本实际为
repro_kalman_20260329_165531.py,其SRC_FILE写法是repro_inputs/kalman_sample_data.csv,这里采用的是“脚本所在结果目录下的相对输入路径”,不是results/.../repro_inputs/...口径。 - 这意味着 Kalman 文档在复现描述上应单独说明:该算法的复现输入副本直接放在脚本同目录下的
repro_inputs子目录中。 - 若论文需要引用代表性输出,应优先使用
FitSummary、Diagnostics与Forecast三组结果表,并以obs_filtered_smoothed和forecast两类图作为主图证据。
12.3 全量强化补充
- 当前 Kalman 文档应绑定真实算法目录
具体的算法2/Kalman-卡尔曼滤波,代表性主目录为具体的算法2/Kalman-卡尔曼滤波/results/Kalman(constant_velocity_1d)分析结果_20260329_165531。 - 该目录首层主工作簿为
Kalman(constant_velocity_1d)分析结果_20260329_165531.xlsx,真实工作表为RawData_Preview、Filter_Steps、FitSummary、F、H、Q、R、x0、P0、Diagnostics、Forecast、Charts_Index。 - 首层主图为
obs_filtered_smoothed_20260329_165531.png、innovations_20260329_165531.png、kalman_gain_20260329_165531.png、forecast_20260329_165531.png,它们都与主工作簿同层放置。 - 该目录本身同时包含
repro_kalman_20260329_165531.py与repro_inputs/kalman_sample_data.csv,因此 Kalman 属于比较标准的“单目录内主结果 + repro 脚本 + repro_inputs 输入副本”结构。 - 脚本关键输入写法为
SRC_FILE = 'repro_inputs/kalman_sample_data.csv',应在附录里按“脚本同目录相对路径复现”口径表述,不需要再写成模块根目录相对路径。 - 当前目录没有
repro_outputs/、没有 HTML/TXT 诊断报告,也没有额外的平铺历史图组;因此正文和附录应以这一个时间戳目录为主要证据,避免套用 ETS 或 ARIMA 那种“历史累计目录”的说明方式。 - 从论文结果映射上看,
Filter_Steps、FitSummary、Diagnostics、Forecast是正文最关键的四张表;F/H/Q/R/x0/P0更适合作为附录中的模型矩阵与参数证据。
13. 软件实现核查补充(2026-07)
- 当前实现的主结果目录应写作
具体的算法2/Kalman-卡尔曼滤波/results/Kalman(constant_velocity_1d)分析结果_20260329_165531,这是标准的单目录闭环证据包。 - 正文最稳妥的主表仍是
RawData_Preview、Filter_Steps、FitSummary、Diagnostics、Forecast、Charts_Index,主图对应obs_filtered_smoothed_20260329_165531.png、innovations_20260329_165531.png、kalman_gain_20260329_165531.png、forecast_20260329_165531.png。 repro_kalman_20260329_165531.py + repro_inputs/kalman_sample_data.csv都在同一目录体系中,文中可直接按“脚本同目录相对路径复现”口径表述。- 若后续写论文附录,
F/H/Q/R/x0/P0仍更适合作为参数矩阵证据,不要把它们写成正文主结果。