基于FFT算法的信号振幅谱与相位谱提取分析系统
这是一个利用MATLAB开发的信号处理工具,专门用于对离散时间信号进行时频域转换分析。系统通过快速傅里叶变换(FFT)算法,精准地从复杂信号中提取出各分量的频率、振幅及相位信息,并提供直观的可视化报告。
项目功能特性
- 多成分信号仿真:支持合成包含直流分量、多个谐波分量(包括特定频率、振幅、初始相位)以及高斯白噪声的复杂测试信号。
- 信号预处理:自动计算信号均值并执行去直流处理(Detrending),确保频域分析的准确性。
- 频谱归一化补偿:实现了严格的单边谱转换逻辑,通过对非直流/奈奎斯特项进行幅值倍增补偿,确保频谱图中的幅值与原始时域分量一致。
- 相位降噪技术:针对FFT计算中微弱噪声带来的相位紊乱映射,应用了基于振幅阈值的相位屏蔽算法。
- 自动特征识别:内置峰值检测功能,能够自动锁定信号中的主要特征频率点,并提取对应的物理量。
- 多维度可视化:提供时域信号波形、单边归一化振幅谱及修正相位谱的三位一体对比视图。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:Signal Processing Toolbox(用于执行findpeaks峰值检测)。
算法实现流程与逻辑
系统内部的处理逻辑严格遵循信号处理的标准Pipeline,具体步骤如下:
1. 参数配置与信号构建
系统首先设定1000Hz的采样频率和2000个采样点。构建的仿真信号包含一个2.5V的直流偏移,以及三个特定频率的余弦波分量:
- 15Hz:振幅1.2,相位-30度。
- 50Hz:振幅2.5,相位60度。
- 120Hz:振幅0.8,相位180度。
随后加入振幅为0.3的标准正态分布随机噪声,模拟真实采样环境。
2. 直流分量分离
通过计算全信号的算术平均值获取直流分量的估算值,并从原始信号中减去该均值,得到去直流后的纯交流信号,防止DC分量在0Hz处产生的巨大谱线掩盖低频细节。
3. 频域数学变换
调用MATLAB内置的快速傅里叶变换算法(FFT)将时域向量转换为复数频域向量。
4. 振幅谱的归一化与单边转换
- 双边归一化:将FFT结果除以信号长度L。
- 单边提取:保留从0到奈奎斯特频率(Fs/2)的部分。
- 能量补偿:除了直流分量(第一个点)外,对其余频率点的幅值乘以2,以补偿因丢弃负频率部分而损失的一半能量,使分析结果直接反映原始谐波的真实振幅。
5. 改进的相位谱提取算法
直接提取FFT结果的辐角会导致信噪比低的地方出现剧烈的随机相位波动。系统引入了基于“幅值门限”的过滤机制:
- 设定门限值为单边振幅谱最大值的10%。
- 仅保留振幅高于该门限的频率点的相位信息。
- 将低于门限点的相位强制归零,从而获得清晰且具有物理意义的相位特征。
6. 特征点提取与统计报告
利用导数阈值法识别振幅谱中的波峰,提取对应的频率坐标,并将结果汇总为格式化的控制台报告,输出包括直流偏移量在内的所有核心物理参数。
关键技术细节说明
FFT变换的物理意义对照
代码通过 f = Fs * (0:(L/2)) / L 建立了频率轴坐标。此时,频谱上的每一个频率点 f(i) 都对应着原信号中对应频率成分的强度。
相位降噪的必要性
在计算中,由于有限字长效应和浮点数误差,噪声点在复平面上的实部和虚部虽然极小但并不为零。atan2函数计算得到的相位在这些点上会表现为-180到180度之间的随机噪声。系统通过10%的振幅门限过滤,成功解决了这一问题,使得仅有15Hz、50Hz和120Hz处的相位被有效保留。
结果可视化设计
绘图模块采用了垂直三子图布局:
- 时域图使用深色线条展示噪声背景下的合成波形。
- 振幅谱采用柱状图(hist形式)配合包络线,重点展示0-200Hz的高能频段。
- 相位谱使用离散针状图(stem),清晰标记特征频率点的初相位角度。
使用方法
- 打开MATLAB。
- 将包含相关代码的脚本文件置于当前工作路径。
- 在命令行窗口输入函数名称并运行。
- 系统将自动弹出频谱分析窗口,并在控制台实时输出特征频率分析报告。