基于MATLAB的短时傅立叶变换(STFT)时频分析工具
本工具集成了短时傅立叶变换(STFT)的核心算法实现与多维可视化功能,专为非稳态信号的时频特征提取而设计。通过将时域信号划分为重叠的短时帧并进行频谱分析,本程序能够清晰地揭示频率成分随时间变化的动态特征。
项目介绍
在处理语音、机械振动或雷达信号等非平稳信号时,传统的快速傅里叶变换(FFT)无法提供频率随时间演变的信息。本项目通过自主实现的STFT核心算法,有效地解决了这一问题。它允许用户观察信号在不同时刻的频率分布,是进行时频联合分析的基础工具。
功能特性
- 自研核心算法:不依赖外部工具箱,内置完整的STFT计算逻辑,包含数据分帧、加窗处理及频谱计算。
- 灵活的参数配置:支持用户自定义采样频率、信号时长、窗函数长度、重叠点数(Overlap)以及FFT点数。
- 多种窗函数支持:内置海明窗(Hamming)、汉宁窗(Hanning)及矩形窗(Rectangular)三种典型窗函数。
- 综合可视化方案:自动生成三维时频能量分布图及二维功率谱图,辅助用户直观理解信号特性。
- 信号生成与验证:内置非平稳信号生成器,可构造包含线性调频(Chirp)与分段正弦特征的复杂合成信号。
系统要求
- 软件环境:MATLAB R2016a 及以上版本。
- 硬件要求:通用计算机即可,内存建议 4GB 以上以处理长信号数据。
- 工具箱需求:由于核心算法(包含信号生成)均为纯脚本实现,无需安装额外的信号处理工具箱。
核心实现逻辑说明
本程序的执行流程严格遵循以下技术路径:
- 信号合成阶段
程序首先构造了一个复杂的测试信号。该信号由一个频率范围为 50Hz 至 450Hz 的线性调频信号(Chirp)作为背景,并在特定时间段叠加了 100Hz 和 300Hz 的正弦波成分,最后混入随机噪声,以模拟真实的非平稳信号环境。
- 参数初始化
定义关键的分析参数。步长(Hop Size)由窗长减去重叠长度计算得出。FFT点数通常设定为大于窗长的 2 的幂次方,以提高频率轴的分辨率。
- STFT核心计算逻辑
计算过程包含以下关键步骤:
- 数据分帧:根据设定的步长,在原始信号上滑动取样,计算总的前向帧数。
- 窗口化:对每一帧数据施加选定的窗函数(如海明窗),以减少频谱泄露。
- 快速傅里叶变换:对加窗后的每一段数据执行 nfft 点 FFT。
- 对称性处理:由于实信号频谱的对称性,计算结果仅保留 0 至 fs/2 的正频率部分。
- 坐标映射:根据采样率和帧移动量,精确计算时间轴和频率轴的物理坐标。
- 数据后处理与可视化
- 能量谱转换:将复数形式的变换结果转换为幅值,并进一步转换为分贝(dB)量级,以便于观察低能量成分。
- 二维映射:利用色彩映射技术展示时间-频率-能量的平面分布。
- 三维视图:通过网格化处理,构建三维瀑布图,直观展示能量在时频平面上的起伏。
关键函数与算法分析
- 短时计算核心函数
该函数接受原始序列、采样率及分析参数作为输入。其核心算法通过循环结构遍历整个信号长度。它不仅计算了复数谱矩阵,还负责生成对应的频率向量和时间中心向量。
- 窗函数生成逻辑
程序内部实现了窗函数的数学公式。例如,海明窗通过 0.54 - 0.46 * cos 序列生成,确保了在不调用 toolbox 的情况下仍能提供标准的加窗功能。
- 线性调频信号生成 (Chirp)
通过二阶相位累加算法实现线性调频。该算法通过计算频率随时间的线性变化率,构造相位函数并映射至正弦波,从而产生频率随时间线性增长的信号。
- 坐标轴校准
为了确保分析结果具有物理意义,程序根据帧的中点计算时间坐标,根据采样率和FFT长度计算频率间距。这种严谨的对应关系保证了生成的图形可以直接用于定量分析。