MATLAB 时频分析工具箱
项目介绍
本工具箱是一个专为非平稳信号处理设计的 MATLAB 程序集。非平稳信号(如语音、地震波、机械振动等)的频率特性随时间变化,传统的傅里叶变换难以捕捉其瞬时特征。本工具箱通过集成多种经典与先进的时频分析算法,实现在时域和频域上同时展现信号的局部特征,为科研与工程人员提供从信号生成、算法分析、特征提取到信号重构的完整工作流。
功能特性
- 多算法集成:涵盖线性变换(STFT, CWT)、二次型分布(WVD, PWVD, SPWVD)以及高分辨率后处理算法(重排算法, 同步挤压变换)。
- 噪声鲁棒性:提供平滑机制(如 SPWVD 的双窗平滑)以抑制交叉项干扰,增强含噪信号的分析能力。
- 高分辨表征:通过同步挤压变换与重排技术,有效收缩时频能量,提升时频聚集性。
- 特征提取与重构:支持基于时频脊线的瞬时频率估计,并能通过时频滤波实现特定信号分量的提取与时域重构。
- 直观可视化:内置综合展示模块,通过多图对比直观呈现不同算法在分辨率、交叉项抑制等方面的表现。
系统要求
- MATLAB R2016b 或更高版本。
- 需安装 Image Processing Toolbox(用于重排效果的锐化模拟)。
- 需安装 Signal Processing Toolbox(用于 Hilbert 变换及窗函数生成)。
实现逻辑与功能细节
1. 信号合成模块
程序内置了一个复杂的非平稳信号发生器。它通过叠加两个频率交叉的线性调频分量(Chirp)并添加高斯白噪声,构建了一个具有挑战性的测试环境。该模块生成采样率为 1000Hz、时长为 1 秒的测试数据,频率变化范围覆盖 50Hz 到 250Hz。
2. 线性和时频分布算法
- 短时傅里叶变换 (STFT):通过对滑窗内的信号进行 FFT 处理,初步构建频率-时间能量图。
- 连续小波变换 (CWT):采用 Morlet 小波作为基函数,在 200 个对数尺度上进行分析。通过尺度到频率的映射,实现多分辨率分析。
- Wigner-Ville 分布 (WVD):计算解析信号(Hilbert 变换)的自相关函数并进行 FFT,提供理论上最高的时频分辨率,但在多分量信号中存在显著交叉项。
- 伪 Wigner-Ville 分布 (PWVD):在 WVD 基础上引入频率平滑窗(Hamming 窗),通过限制积分范围来抑制时频波动。
- 平滑伪 Wigner-Ville 分布 (SPWVD):进一步引入时间平滑窗和频率平滑窗的双重机制,在保持一定分辨率的同时最大限度滤除交叉项。
3. 高分辨率增强算法
- 重排算子 (Reassignment Method):该功能模拟了能量重排思想。在现有的 STFT 基础上,通过对时频能量图进行锐化处理,将发散的能量向中心汇聚,提升视觉分辨率。
- 同步挤压变换 (SST):这是基于 STFT 的改进算法。它通过计算时频平面上每个点的瞬时频率(相位对时间的导数),将偏离中心的信号能量挤压到真实的瞬时频率轴上,从而产生极细的时频纹理。
4. 脊线提取与信号重构
- 脊线提取 (Ridge Extraction):针对同步挤压变换后的矩阵,采用贪心搜索算法寻找每个时间点能量最大的频率位置。为防止频率估计在噪声干扰下发生突变,算法引入了跳变惩罚项,确保提取出的瞬时频率曲线平滑连续。
- 时频滤波与分量重构:利用时频域的可分离性,构造了一个频率掩膜(Mask),仅保留 160Hz 以下的光谱能量。随后通过对同步挤压结果在频率轴上进行积分求和,实现了从复杂的含噪信号中恢复出单一线性调频分量的时域模型。
使用方法
- 打开 MATLAB 软件。
- 确保所有相关函数文件都在 MATLAB 的搜索路径下。
- 在命令行窗口输入主程序函数名并执行。
- 程序将自动生成测试信号,依次执行七种不同的算法进行处理。
- 最终弹出一个包含 9 个子图的可视化界面,涵盖:
* 原始含噪时域信号。
* 各种算法(STFT、CWT、WVD、SPWVD、重排谱、SST)的对比视图。
* 瞬时频率估计结果与理论真值的对比。
* 滤波重构后的信号分量与原始纯净信号的对比。
注意事项
- 计算复杂度:SPWVD 算法采用嵌套循环实现平滑卷积,处理超长信号时计算耗时可能增加。
- 参数调节:窗函数长度(winLen)和卷积窗口大小(h_len/g_len)对时频聚集度和交叉项抑制效果有显著影响,可根据具体信号特征进行微调。