MATLAB 功率谱分析综合工具包
项目介绍
本项目提供了一套完整的 MATLAB 信号处理方案,专注于实现和对比多种功率谱密度(PSD)估计技术。通过结合经典的非参数化估计方法与基于现代参数建模的谱估计技术,本项目能够帮助用户深入分析时域信号中的频率成分、能量分布以及信噪比特性。该工具包完全采用 MATLAB 自定义函数实现核心算法逻辑,旨在为科研和工程人员提供一个透明、可扩展的信号分析基准工具。
功能特性
- 多算法集成:集成了周期图法(Periodogram)、Welch法、Yule-Walker法以及Burg法四种主流谱估计技术。
- 仿真信号测试:内置标准的双频正弦信号加高斯白噪声的测试模型,直观展示不同算法在频率分辨率和谱平滑度上的差异。
- 自给自足的算法实现:核心算法(如Welch段处理、Levinson-Durbin递归、Burg反射系数计算等)均手动编写,降低了对特定工具箱的依赖。
- 自动化报告生成:自动生成包含时域波形、各算法结果对比以及峰值检测结果的可视化图形界面。
- 参数灵活配置:支持自定义采样频率、FFT点数、AR模型阶数、窗函数类型及重叠比例,方便进行性能优化实验。
详细实现逻辑与算法分析
1. 信号构造逻辑
系统生成一段长度为 1 秒、采样频率为 1000Hz 的仿真信号。该信号由 50Hz 和 120Hz 两个正弦分量叠加而成,并注入了方差为 0.5 的高斯白噪声。这一构造方式用于验证算法对于相邻频率点的分辨能力以及在噪声背景下的稳定性。
2. 周期图法 (Periodogram)
这是最基本的频谱估计方法。其实现逻辑是对全长度信号进行 1024 点快速傅里叶变换(FFT),计算其模值的平方并除以信号长度与采样速率的乘积(1/(fs*N))。最后通过单边谱修正(能量翻倍处理),得到频率轴上的功率分布。
3. Welch法 (分段重叠平均)
为了解决周期图法方差较大的问题,Welch法采用了分段处理机制:
- 分段与重叠:将信号分为长度为 256 的段,段间重叠 128 个点(50%重叠率)。
- 加窗处理:对每一段信号应用自定义的汉明窗(Hamming Window)以减少频谱泄露。
- 归一化修正:计算窗函数的能量归一化系数 U,确保功率的可比性。
- 平均处理:计算各段周期图的平均值,从而显著平滑谱线,抑制随机波动。
4. Yule-Walker法 (AR模型估计)
这是一种基于自回归(AR)模型的参数化谱估计方法:
- 自相关计算:首先计算从 0 阶到 p 阶(默认为 20 阶)的信号偏置自相关序列。
- Levinson-Durbin递归:利用递归算法高效求解 Yule-Walker 方程,获得 AR 模型系数和前向预测误差功率。
- 频率响应计算:将 AR 系数视为滤波器分母,通过计算系统的频率响应来构造平滑的连续功率谱。
5. Burg法
作为另一种强大的现代谱估计技术,Burg法通过最小化前向和后向预测误差的能量和来估计反射系数:
- 迭代计算:逐阶递推计算反射系数,避免了直接计算自相关矩阵导致的性能下降。
- 预测误差更新:每一阶都会更新前向和后向误差序列。
- 高分辨率优势:相比前述方法,Burg法在处理短数据记录时具有更高的频率分辨率,且能保持模型的稳定性。
6. 结果可视化与辅助功能
- 多维绘图:系统通过 3x2 的矩阵布局展示时域波形、四种算法的独立谱线图以及综合对比图,方便直观评估各算法在噪声抑制和主频提取上的差异。
- 峰值检测报告:基于 Burg 法的分析结果,系统自动利用峰值查找逻辑定位主要的频率分量,并在控制台输出频率点(Hz)和对应的 PSD 强度。
- 基础工具函数:内置了专用的汉明窗生成函数,确保在基础 MATLAB 环境下即可运行。
使用方法
- 启动 MATLAB 软件。
- 将包含相关逻辑的代码文件置于当前工作路径。
- 在命令行窗口输入主程序函数名并回车。
- 程序将自动计算并弹出对比图表,并在控制台显示检测到的信号主成分分析报告。
- 用户可根据需要调整代码顶部的 fs、ar_order、window_len 等参数重新运行,以观察不同配置对分析结果的影响。
系统要求
- 软件环境:建议使用 MATLAB R2016b 及以上版本。
- 可选工具箱:虽然算法核心为自实现,但可视化过程中的
findpeaks 和 freqz 函数需要信号处理工具箱(Signal Processing Toolbox)的支持。若缺失该工具箱,部分绘图及峰值报告功能可能受限。