3. 数学基础(二):线性代数基础与状态空间模型

各位同学,欢迎来到第三讲。上一讲我们聊了概率论,今天咱们把目光转向线性代数和状态空间模型。说实话,在雷达数据处理这个行当里,线性代数就是我们的“普通话”。你想想看,目标的位置、速度、加速度,哪个不是用向量和矩阵来表示的?

我个人习惯,在讲理论之前,先给大家一个全景图。这一章的核心就三块:矩阵运算、特征值分解、以及状态空间模型。这三者环环相扣,矩阵运算是工具,特征值分解是分析工具,而状态空间模型则是我们描述目标运动的核心框架。

本章知识体系:线性代数与状态空间模型 矩阵运算 特征值分解 状态空间模型 向量运算 · 矩阵乘法 转置 · 逆矩阵 · 行列式 特征向量 · 特征值 对角化 · 协方差分析 状态方程 · 观测方程 卡尔曼滤波基础 核心目标:用数学语言描述目标运动与观测

3.1 矩阵运算:雷达数据处理的“基本操作”

先说说矩阵乘法。我记得刚入行时,带我的老工程师跟我说:“小张,矩阵乘法要是搞不明白,后面卡尔曼滤波你肯定晕。” 我当时还不信,后来真做项目了才发现——确实如此。

在雷达数据处理中,我们经常要处理这样的场景:一个目标的状态向量 x 包含位置和速度,比如 x = [x, y, vx, vy]^T。那么经过时间 Δt 后,它的新状态怎么算?

说白了,就是用状态转移矩阵 F 去乘当前状态:

# 匀速运动模型的状态转移矩阵
F = [[1, 0, Δt, 0],
     [0, 1, 0, Δt],
     [0, 0, 1, 0],
     [0, 0, 0, 1]]

# 新状态 = F * 旧状态
x_new = F @ x_old  # @ 是矩阵乘法运算符

关键点:矩阵乘法不满足交换律!A @ B 和 B @ A 通常不一样。我在项目中见过有人写反了顺序,结果滤波结果完全发散。嗯,调试了整整两天才找到问题。

再来说说逆矩阵。为什么需要它?因为我们要做“反推”。比如已知观测值 z,想反推状态 x,就需要用到观测矩阵 H 的逆。但注意,H 通常不是方阵,所以要用伪逆。

实用技巧:在实际代码中,尽量用 np.linalg.solve() 而不是显式计算逆矩阵。数值稳定性更好,速度也更快。这是我踩过坑之后学到的教训。

3.2 特征值分解:看懂系统的“本质”

特征值分解,听起来高大上,其实核心思想很简单:把一个矩阵拆解成“方向”和“伸缩”两部分。

为什么会这样?你想想看,一个矩阵作用于一个向量,本质上就是对这个向量进行旋转和缩放。而特征向量就是那些“只被缩放、不被旋转”的特殊方向。

在雷达数据处理中,特征值分解最常见的应用是协方差矩阵分析。比如,我们有一个目标跟踪的不确定性椭圆,它的主轴方向就是协方差矩阵的特征向量,轴长就是特征值的平方根。

import numpy as np

# 假设协方差矩阵 P
P = np.array([[4.0, 1.5],
              [1.5, 1.0]])

# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(P)

print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

# 特征值越大,对应方向的不确定性越大

注意:协方差矩阵必须是半正定的,也就是说所有特征值 ≥ 0。我曾经在项目中遇到过一个bug,因为数值误差导致特征值出现微小的负数,结果画出来的误差椭圆完全变形。解决办法是加一个很小的正数到对角线上,比如 1e-6。

特征值分解还有一个重要应用——降维。当我们的状态向量维度很高时(比如同时跟踪多个目标),可以用PCA(主成分分析)来提取主要特征。说白了,就是只保留特征值最大的几个方向,丢掉那些“噪声”方向。

3.3 状态空间模型:描述目标运动的“标准语言”

好了,前面铺垫了这么多,终于到核心了。状态空间模型,说白了就是两句话:

  • 状态方程:目标怎么运动? x_{k+1} = F * x_k + w_k
  • 观测方程:我们怎么看到目标? z_k = H * x_k + v_k

其中 w_k 是过程噪声,v_k 是观测噪声。这两个噪声的协方差矩阵,分别记为 Q 和 R。

我个人习惯,在讲状态空间模型时,一定要强调“模型假设”。比如匀速模型假设目标速度不变,匀加速模型假设加速度不变。你想想看,如果目标突然转弯,你还用匀速模型去跟踪,那结果肯定一塌糊涂。

模型类型 状态向量 状态转移矩阵 F 适用场景
匀速模型 (CV) [x, vx]^T [[1, Δt], [0, 1]] 直线匀速运动
匀加速模型 (CA) [x, vx, ax]^T [[1, Δt, 0.5Δt²], [0, 1, Δt], [0, 0, 1]] 机动目标
匀速转弯模型 (CT) [x, y, vx, vy, ω]^T 含三角函数项 转弯机动

避坑指南:我曾经在项目中遇到过一个情况——用匀速模型跟踪一个正在转弯的飞机。结果滤波结果完全跟不上,误差越来越大。后来换成匀加速模型,效果好了很多。但更优的方案是用交互式多模型(IMM),这个我们后面章节会详细讲。

最后,说说状态空间模型和卡尔曼滤波的关系。卡尔曼滤波,本质上就是在状态空间模型的基础上,做最优估计。它分两步:预测(用状态方程)和更新(用观测方程)。

# 卡尔曼滤波的预测步骤(简化版)
x_pred = F @ x_est          # 预测状态
P_pred = F @ P_est @ F.T + Q  # 预测协方差

# 卡尔曼滤波的更新步骤(简化版)
K = P_pred @ H.T @ inv(H @ P_pred @ H.T + R)  # 卡尔曼增益
x_est = x_pred + K @ (z - H @ x_pred)         # 更新状态
P_est = (I - K @ H) @ P_pred                  # 更新协方差

你看,这里面全是矩阵运算。所以我说,线性代数是雷达数据处理的“普通话”,一点不夸张。

学习建议:如果你觉得矩阵运算不熟练,我建议你手算一遍 2×2 矩阵的乘法、求逆、特征值分解。别嫌麻烦,手算一遍比看十遍代码都管用。我自己就是这么过来的。

好了,这一章的内容就到这里。记住,矩阵运算是工具,特征值分解是分析工具,状态空间模型是框架。三者结合起来,你就能用数学语言精确描述目标的运动规律。下一章我们会把这些知识串起来,讲一讲数据关联的核心算法。


可可精品资料库