1. 时频分析基础与Matlab实现概述
时频分析作为现代信号处理的核心技术之一,其价值在于突破了传统傅里叶变换只能提供全局频率信息的局限。在实际工程应用中,我们常常需要分析非平稳信号——比如机械振动监测中的冲击信号、语音信号中的音素变化、雷达回波中的多普勒频移等。这类信号的频率成分随时间变化,传统频谱分析难以捕捉其动态特性。
Matlab凭借其强大的矩阵运算能力和丰富的信号处理工具箱,成为实现时频分析的理想平台。本次将深入解析五种经典方法的实现细节:
- 短时傅里叶变换(STFT):时频分析的入门方法,适合初步了解时频概念
- Gabor展开:提供最优时频分辨率的理论方法
- 小波变换:多分辨率分析的利器
- Wigner-Ville分布(WVD):具有最高时频分辨率但存在交叉项干扰
- 改进型WVD(PWVD/SPWVD):平衡分辨率与交叉项问题的实用方案
重要提示:所有代码已在Matlab R2021b版本测试通过,建议读者使用相同或更高版本运行。不同版本可能存在函数参数差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 仿真信号构建与参数设置
2.1 基础信号生成
我们采用线性调频信号(Chirp)作为测试信号,因其频率随时间线性变化的特性非常适合验证时频分析效果:
matlab复制fs = 1000; % 采样率(Hz)
t = 0:1/fs:1-1/fs; % 1秒时间轴
f_start = 100; f_end = 200; % 起始/终止频率
x = chirp(t, f_start, 1, f_end, 'linear');
% 添加高斯白噪声增强现实性
noise_power = 0.05;
x = x + sqrt(noise_power)*randn(size(x));
参数选择考量:
- 采样率1000Hz满足奈奎斯特准则(>400Hz)
- 线性调频范围100-200Hz可清晰观察频率变化
- 添加5%噪声模拟真实环境
2.2 通用可视化设置
为保持各方法结果可比性,统一采用以下绘图配置:
matlab复制function plot_tf(t, f, tfrep, title_str)
surf(t, f, 10*log10(abs(tfrep)), 'EdgeColor', 'none');
axis tight; view(0, 90);
xlabel('Time (s)'); ylabel('Frequency (Hz)');
title(title_str);
colormap(jet); colorbar;
end
3. 短时傅里叶变换(STFT)实现
3.1 原理与参数选择
STFT通过在时间轴上滑动窗口,对每个窗口内信号进行傅里叶变
