Spectral Analysis of Signals Algorithms Toolbox
项目介绍
本项目是基于 Petre Stoica 和 Randolph Moses 的经典著作《Spectral Analysis of Signals》开发的 MATLAB 算法库。该项目旨在提供一套全面、高精度的信号谱分析解决方案,系统性地实现了从经典的非参数化方法到现代高分辨率参数化及子空间方法的全部核心算法。项目代码结构清晰,集成了信号生成、算法实现、性能评估及可视化展示,适用于通信、雷达、声纳等领域的算法研究与教学演示。
功能特性
本项目在 main.m 中实现了以下核心功能:
- 多维度信号生成:支持生成包含多个频率分量的复正弦信号,并叠加复高斯白噪声,支持自定义信噪比 (SNR)、相位和幅度。
- 非参数化谱估计:
*
周期图法 (Periodogram):基于 FFT 的直接谱估计。
*
Blackman-Tukey 方法:基于加窗自相关序列 (ACS) 的谱估计,采用 Bartlett 窗。
*
Yule-Walker 方法:通过求解 Yule-Walker 方程估计 AR 参数。
*
Burg 算法:基于格型滤波器结构,通过最小化前向和后向预测误差估计反射系数和 AR 参数 (最大熵谱估计)。
*
Capon 波束形成器 (MVDR):最小方差无失真响应谱估计,有效抑制干扰。
*
APES (Amplitude and Phase Estimation):幅度和相位估计算法的谱形式实现。
*
MUSIC 算法:多重信号分类,通过噪声子空间投影计算伪谱。
*
Root-MUSIC:基于多项式求根的高精度频率估计。
*
ESPRIT:旋转不变子空间技术,利用子空间旋转不变性进行频率估计。
*
Cramer-Rao 界 (CRB):计算频率估计的理论下方差界。
*
全方位可视化:包含时域波形、各类谱估计图、零极点分布图等。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox (推荐,用于部分基础矩阵操作)
使用方法
直接在 MATLAB 环境中运行 main.m 脚本即可。脚本运行时会自动执行以下流程:
- 初始化环境并固定随机种子 (RNG 42) 以确保结果可复现。
- 生成含噪仿真信号。
- 依次运行各类谱估计算法。
- 在控制台输出频率估计数值结果对比及 CRB 理论值。
- 弹出一个包含 6 个子图的综合窗口,直观展示算法性能。
---
main.m 功能与实现逻辑详解
main.m 文件是整个算法库的入口与核心演示脚本,其内部逻辑严密,分为七个主要部分及附带的内部算法函数库。
1. 参数设置与信号生成
脚本首先定义了仿真实验的基础参数:
- 采样点数 (N):设定为 64 点,模拟短数据记录场景。
- 信号参数:设定了 3 个归一化频率 [0.2, 0.25, 0.4],不同幅度和随机相位。
- 网格密度 (L):设定 FFT 点数为 1024,用于绘制平滑的谱曲线。
- 信号生成:调用内部函数
gen_signal 生成复正弦信号与复高斯白噪声的叠加信号。
2. 非参数化谱估计
- 周期图法:直接对观测数据进行 FFT 变换并取模平方,除以数据长度 N 得到功率谱密度。
- Blackman-Tukey 方法:调用
blackman_tukey 函数。该函数首先估计有偏自相关序列 (ACS),构建双边对称序列,然后应用 Bartlett (三角) 窗函数进行加权,最后对加权后的 ACS 进行 FFT 得到谱估计。
3. 参数化模型估计 (AR)
设定 AR 模型阶数为 10,分别使用两种方法求解 AR 系数并计算谱:
- Yule-Walker + Levinson-Durbin:调用
ar_yule_walker 函数。通过估计 ACS 序列并求解 Toeplitz 矩阵方程 (Yule-Walker 方程) 得到 AR 系数和噪声方差。 - Burg 算法:调用
ar_burg 函数。不直接估计 ACS,而是基于数据直接递推。利用 Levinson 递归结构,通过最小化前向和后向预测误差的平方和来逐阶估计反射系数 (Parcor coefficients),进而更新 AR 参数。 - 谱计算:利用求得的 AR 系数和噪声方差,通过全极点模型公式 $P(omega) = sigma^2 / |A(omega)|^2$ 计算功率谱。
4. 基于滤波器组的高分辨率方法
- Capon (MVDR):调用
capon_spectrum 函数。
* 构建样本协方差矩阵 $R$ (采用前向平均)。
* 对协方差矩阵求逆 (加入对角加载微量以防止奇异)。
* 利用矩阵求逆后的对角线元素求和技巧,结合 FFT 快速计算 Capon 谱 $P(omega) = 1 / [a(omega)^H R^{-1} a(omega)]$,避免了对每个频点进行循环计算。
- APES:在脚本中调用了
apes_spectrum 进行计算,用于对比 Capon 算法的性能。
5. 子空间方法
利用观测数据的特征结构进行频率估计:
- MUSIC:调用
music_alg 计算空间谱。该算法利用噪声子空间与信号导向矢量的正交性构建伪谱。 - Root-MUSIC:调用
root_music_alg。通过构建多项式并求根,选择最接近单位圆的根作为信号极点,从而直接计算频率值。 - ESPRIT:调用
esprit_alg。利用信号子空间的旋转不变特性,通过求解广义特征值问题直接得到频率估计。
6. 结果汇总与可视化
脚本通过一个包含 6 个子图的 Figure 窗口展示结果:
- 时域观测信号:展示含噪信号实部与纯净信号实部的对比。
- 非参数化谱估计:对比周期图法和 Blackman-Tukey 方法的 PSD 曲线。
- AR 模型谱估计:对比 Yule-Walker 和 Burg 算法的 PSD 曲线,展示其平滑特性。
- 高分辨率滤波器组:展示 Capon 和 APES 的归一化幅度谱,体现其分辨相近频率 (0.2 和 0.25) 的能力。
- MUSIC 伪谱:展示 MUSIC 算法极窄的谱峰。
- Root-MUSIC 零极点分布:在复平面单位圆上绘制极点。展示了噪声根(远离单位圆)和信号根(位于单位圆附近)的分布情况,并标记了真实频率位置。
此外,控制台会输出 Root-MUSIC 和 ESPRIT 估计的具体频率数值,与真实频率进行对比。
7. CRB (Cramer-Rao Bound) 分析
调用
compute_crb 函数,根据当前的信噪比、数据长度和信号参数,计算频率估计方差的理论下界 (CRB) 及对应的 RMSE 极限,作为评估算法性能的基准。
关键算法实现细节 (内部函数)
est_acs: 实现了有偏自相关序列估计器。ar_burg: 完整实现了 Burg 递推算法。在每一阶中,计算反射系数 $gamma$,利用 $gamma$ 更新 AR 系数向量,并同步更新前向和后向预测误差向量。capon_spectrum: 实现了基于协方差矩阵求逆的 Capon 谱估计。代码中包含了一个高效实现技巧:通过累加逆矩阵 $R^{-1}$ 的对角线元素将其转换为多项式系数,从而利用 FFT 一次性计算所有频点的倒谱,极大提高了计算效率。