1. 项目概述
窄带信号的时变频率估计是雷达、声纳和通信系统中的经典问题。在实际工程中,我们经常遇到频率随时间变化的信号(如多普勒频移信号),传统FFT方法由于受到"时频不确定性原理"限制,难以同时获得高时间分辨率和频率分辨率。卡尔曼滤波类算法通过状态空间建模,能够有效跟踪信号的时变参数。
本项目实现了两种非线性卡尔曼滤波器——扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF),用于估计线性调频(LFM)信号的瞬时频率。相比常规方法,这两种算法具有以下优势:
- 实时处理能力:递推计算适合在线应用
- 抗噪性能:通过状态预测抑制测量噪声
- 记忆特性:利用历史信息提高估计精度
注:所有实验数据均使用Matlab 2021b生成,完整代码已托管在GitHub仓库(文末附链接)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法原理
2.1 信号模型建立
考虑离散时间的线性调频信号模型:
code复制x_k = A·exp(j(2πf_k·kT_s + φ_k)) + w_k
其中:
- A为幅值(假设已知)
- f_k = f_0 + α·kT_s 是时变频率
- T_s为采样间隔
- w_k ∼ N(0,Q) 是复高斯白噪声
将频率f_k和频率变化率α作为状态变量,建立状态方程:
code复制θ_k = [f_k, α_k]^T
θ_k = F·θ_{k-1} + v_k
F为状态转移矩阵,v_k ∼ N(0,Γ) 是过程噪声
2.2 EKF实现方案
EKF通过一阶泰勒展开处理非线性问题,具体步骤:
- 预测阶段:
code复制θ_k|k-1 = F·θ_{k-1|k-1}
P_k|k-1 = F·P_{k-1|k-1}·F^T + Γ
- 雅可比矩阵计算:
code复制H_k = ∂h(θ)/∂θ|θ=θ_k|k-1
h(θ) = A·exp(j2πf_k·kT_s)
- 更新阶段:
code复制K_k = P_k|k-1·H_k^T·(H_k·P_k|k-1·H_k^T + Q)^{-1}
θ_k|k = θ_k|k-1 + K_k·(z_k - h(θ_k|k-1))
P_k|k = (I - K_k·H_k)·P_k|k-1
注意:EKF对强非线性系统可能发散,需谨慎选择初始协方差矩阵
