MATLAB高级时频分析工具箱
项目介绍
本项目是一个综合性的MATLAB时频分析软件包,专为处理非平稳信号而设计。它通过集成多种经典与前沿的时频分析算法,能够有效地揭示信号频率随时间变化的局部特征。该工具箱不仅生成模拟测试信号,还实现了从基础的短时傅里叶变换到高级的二次型时频分布等多种算法,并提供了完整的二维及三维可视化功能。
项目代码采用模块化编写,所有核心算法流程、数据生成与可视化均包含在一个主程序文件中,便于学习、调试和直接应用于机械故障诊断、生物医学信号处理等领域。
功能特性
本项目主要包含以下核心功能:
- 非平稳信号模拟:生成包含线性调频、突发信号和噪声的复杂合成信号。
- 短时傅里叶变换 (STFT):基于滑动窗口的经典时频分析。
- 连续小波变换 (CWT):基于Morlet小波的自实现频域算法,用于多尺度特征提取。
- 希尔伯特-黄变换 (HHT):包含自主实现的经验模态分解 (EMD) 及希尔伯特谱分析,适用于非线性非平稳数据。
- 二次型时频分布:实现了Wigner-Ville分布 (WVD) 及其平滑版本 (SPWVD),有效抑制交叉项干扰。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox (信号处理工具箱)
使用方法
- 将项目文件下载并解压到本地目录。
- 在MATLAB中打开该目录。
- 直接运行主程序
main。 - 程序将自动执行所有分析步骤,并弹出多个图形窗口展示分析结果。
---
算法实现与代码逻辑详细解析
本项目的主程序 main 严格按照以下流程执行分析:
1. 信号生成模块
程序首先构建一个持续2秒、采样率为1000Hz的合成非平稳信号,用于测试各算法性能。信号由三部分叠加而成:
- 线性调频信号 (Chirp):频率随时间从20Hz线性增加至150Hz。
- 突发正弦信号 (Burst):在0.5秒至1.0秒区间内存在的80Hz正弦波。
- 高斯白噪声:用于模拟真实环境中的背景噪声。
程序会绘制原始时域波形图以便观察。
2. 短时傅里叶变换 (STFT)
利用MATLAB内置的
spectrogram 函数对信号进行处理。
- 窗函数:采用长度为128点的汉明窗 (Hamming Window),以平衡主瓣宽度和旁瓣衰减。
- 重叠设置:设置重叠点数为120点(高重叠率),以获得平滑的时间分辨率。
- 可视化:计算功率谱密度的对数值,并限制显示频率范围在0-250Hz,生成二维时频能量图。
3. 连续小波变换 (CWT)
代码未直接依赖外部工具箱的高级函数,而是内置实现了基于
Morlet小波 的频域卷积算法。
1. 对原始信号进行FFT变换。
2. 根据设定的尺度范围 (1到128) 和中心频率,构建Morlet小波的频域波形。
3. 在频域将信号与小波进行乘积运算(等效于时域卷积),再经IFFT还原得到小波系数。
- 可视化:将尺度映射回近似频率,绘制CWT幅值谱,展示信号在不同尺度下的时频特征。
4. 希尔伯特-黄变换 (HHT)
该模块分为两个主要步骤:
- 经验模态分解 (EMD):通过内置的子函数
custom_emd 实现。该算法使用“筛选过程” (Sifting Process),利用三次样条插值拟合上下包络线,并计算均值包络。当满足标准偏差 (SD) 阈值或极值点条件时,提取出一个固有模态函数 (IMF)。为防止死循环,设定了最大分解层数和最大筛选次数。 - 希尔伯特谱分析:对分解得到的第一个IMF分量 (IMF1) 进行希尔伯特变换,提取瞬时频率和瞬时幅值。
- 可视化:使用散点图绘制希尔伯特谱,展示瞬时频率随时间的精细变化。
5. Wigner-Ville 分布 (WVD) 与 平滑伪WVD (SPWVD)
为了提高计算效率,此模块选取信号中间0.4秒至1.2秒的片段进行高分辨率分析。
- 解析信号计算:首先对信号片段进行希尔伯特变换,生成解析信号以消除负频率影响。
- WVD核心实现:通过双重循环计算瞬时自相关函数 $R(t, tau)$,然后对 $tau$ 维进行FFT变换得到WVD分布。
- 平滑伪Wigner-Ville分布 (SPWVD):为了抑制WVD固有的交叉项干扰(Cross-terms),代码使用二维高斯核 (
gaussian kernel) 对原WVD谱图进行卷积平滑处理。 - 可视化:在同一窗口上下对比展示原始WVD(高分辨率但有干扰)和SPWVD(干扰被抑制,时频聚集性良好)的效果。
6. 结果展示
最后,程序会打开一个单独的图形窗口,按顺序展示EMD分解得到的前5个IMF分量以及最终的残差分量,直观显示信号的多分辨率分解结果。