基于FFT的数字信号频谱分析系统
项目介绍
本项目是一个集信号生成、预处理、频域转换及可视化分析于一体的数字信号处理平台。系统采用高效的快速傅里叶变换(FFT)算法,能够将复杂的时域信号精确地映射到频域,帮助用户直观地观测信号的频率组成、幅值特性、相位信息以及功率分布。
功能特性
- 多成分信号合成:支持直流分量、多频谐波、调幅信号(AM)以及随机噪声的混合模拟。
- 柔性预处理:内置直流扣除(Detrending)功能,并提供多种经典窗函数以控制频谱泄露。
- 高分辨率分析:通过零填充(Zero Padding)技术提升频谱的显示分辨率,增强对邻近频率的分辨能力。
- 全维度频谱展示:涵盖单/双边幅值谱、相位谱、功率谱密度(PSD)以及局部特征放大显示。
- 自动化定量报告:系统能够自动识别信号中的主要频率成分,并输出包含频率点和对应幅值的统计报告。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:建议安装 Signal Processing Toolbox(用于调用 findpeaks 函数进行峰值检测)。
实现逻辑分析
1. 系统参数与信号生成
系统首先定义采样频率(2000Hz)和信号时长(1.5s)。生成信号的过程模拟了复杂的实际环境,包括:
- 基频分量:包含50Hz(幅值2.0)和120Hz(幅值1.0,具有pi/4相位偏移)的正弦信号。
- 调制分量:一个300Hz的载波受10Hz余弦信号调制的调幅信号。
- 直流与噪声:叠加了0.5V的直流偏移和标准差为0.8的随机高斯白噪声。
2. 信号预处理流程
为了提高分析精度,系统执行了以下操作:
- 去直流处理:通过减去信号均值移除直流偏置。
- 自研窗函数应用:系统不依赖外部库,手动实现了矩形窗、Hamming窗、Hann窗和Blackman窗。用户可通过参数切换窗函数,以平衡主瓣宽度与旁瓣抑制。
- 加窗能量补偿:在FFT计算后,根据所选窗函数的均值进行幅值还原,确保频谱幅值的物理准确度。
3. fft计算与频谱映射
- 零填充技术:通过计算信号长度的下一个幂次方倍数进行N点FFT,使频域采样点更加密集。
- 归一化双边谱:将FFT结果除以信号长度并结合窗函数增益进行归一化。
- 单边谱转换:利用对称性截取正频率部分,并将除直流外的幅值乘以2,得到实际的物理幅值谱。
- 频率轴映射:根据采样频率和FFT点数精确计算每个谱线对应的赫兹(Hz)位置。
4. 相位与功率谱密度分析
- 相位提取:利用 angle 函数提取复数结果的相位,并设置 0.05 的幅值阈值。只有当幅值超过该阈值时才保留相位信息,从而过滤掉由噪声引起的杂乱相位波动。
- 周期图法PSD分析:基于加窗后的FFT结果计算功率谱密度,并进行能量补偿和对数(dB)转换,揭示信号在频域上的能量分布规律。
5. 结果可视化与自动化分析
- 联合绘图:在一个图形窗口中展示时域、双边谱、单边谱、相位谱、功率谱以及局部放大谱,共6个维度。
- 自动峰值提取:使用峰值搜索算法定位频谱中幅值超过0.2的所有显著特征点。
- 终端报表:在命令行窗口实时输出详细的分析汇总,包括检测到的主要频率点及其对应的精准幅值。
关键算法说明
- 快速傅里叶变换(FFT):核心计算引擎,将计算复杂度从 O(N^2) 降低至 O(N log N)。
- 窗函数补偿策略:系统通过 mean(win) 进行幅值补偿,确保单频正弦波在频谱图中的峰值与其时域振幅一致。
- 功率谱密度(PSD)估计:遵循能量守恒原则,利用窗函数模平方的均值进行缩放,确保频域能量评估的准确性。