基于MATLAB的加窗离散傅立叶变换谱分析仿真
项目简介
本项目是一个基于MATLAB构建的离散信号频谱分析系统。其核心目标是通过对比不同窗函数处理下的频谱特性,直观展示和分析离散傅立叶变换(DFT/FFT)中的“频谱泄漏”与“栅栏效应”问题。系统通过构建包含特定频率成分(整数倍周期与非整数倍周期)及噪声的测试信号,应用五种经典窗函数进行时域加权,并计算其幅度谱与对数谱,最终通过多维度的可视化图表定量评估不同窗函数的频率分辨能力与旁瓣抑制能力。
功能特性
- 多成分信号仿真:能够生成包含基波(50Hz)、相近干扰波(55Hz)、非周期截断分量(120.5Hz)以及高斯白噪声的复合测试信号,专门用于测试频率分辨率和泄漏现象。
- 自定义窗函数库:内置并手工实现了五种经典窗函数(矩形窗、汉宁窗、海明窗、布莱克曼窗、三角窗),不依赖工具箱直接生成窗向量。
- 全流程频谱分析:涵盖信号生成、时域加窗、N点FFT变换、双边谱转单边谱、幅度归一化及对数谱(dB)计算。
- 性能指标自动评估:针对特定频率成分,自动计算并输出各窗函数的3dB主瓣带宽和最大旁瓣衰减(SLL)指标。
- 高级可视化交互:生成四组专业图表,分别展示时域波形对比、线性幅度谱(含局部放大)、对数功率谱(含泄漏点标注)及窗函数自身的频率响应特性。
系统要求
- MATLAB R2016b 及以上版本
- 无需额外工具箱(Signal Processing Toolbox 非必须,核心算法均为原生实现)
核心算法与实现逻辑
本项目主要代码逻辑集中在单文件脚本中,通过主板程序与子函数配合完成以下流程:
1. 信号源构建与参数设置
系统设定采样率 $F_s=1000Hz$,采样点数 $N=512$。
构建的信号 $x(t)$ 包含三个关键正弦分量:
- 50Hz ($f_1$):主要观察对象。
- 55Hz ($f_3$):与 $f_1$ 极为接近,用于测试窗函数的主瓣宽度对频率分辨率的影响。
- 120.5Hz ($f_2$):在 $N=512$ 下不满足整数个周期采样,用于强制触发频谱泄漏,观察窗函数对非周期分量能量外泄的抑制效果。
- 叠加 0.1 强度的高斯白噪声以模拟真实环境。
2. 窗函数处理与FFT变换
程序定义了一个循环,依次对五种窗函数进行处理:
- 加窗处理:调用
generate_window 生成对应的 $N$ 点窗向量,并与原始信号进行点乘 ($x_{win} = x cdot w$)。 - 频谱计算:
* 执行 $N$ 点快速傅立叶变换 (
fft)。
* 计算双边幅度谱 $|P2| = |X(k)|/N$。
* 截取前 $N/2+1$ 点并乘以2(直流项除外)转换为单边幅度谱 $P1$。
* 计算对数谱 $20log_{10}(P1 + epsilon)$ 用于观察微弱的旁瓣细节。
3. 光谱性能指标分析
利用
analyze_spectrum_performance 函数对 50Hz 主峰进行定量分析:
- 3dB 带宽:通过寻找主峰两侧下降 3dB 的点,利用线性插值(Linear Interpolation)估算精确频率宽度,而非简单的频率分辨率(Bin width)。
- 旁瓣衰减 (SLL):动态屏蔽主瓣区域(根据采样点数估算),在剩余频谱中寻找最大峰值,计算其与主峰的幅度差值。
4. 结果可视化
系统生成四个独立的图形窗口进行多维度展示:
- 时域分析:并列显示原始信号波形、各窗函数的时域形状以及加窗后的信号包络。
- 分辨能力分析(线性谱):展示加窗后的幅度谱,并特设局部放大插图(Zoom-in),聚焦 40Hz-65Hz 频段,直观对比 50Hz 与 55Hz 的分离程度。
- 泄漏分析(对数谱):使用 dB 刻度展示全频段频谱,并在 120.5Hz 处添加标注,展示不同窗函数对非整数周期信号泄漏的抑制效果(旁瓣高度)。
- 窗函数频响特性:对窗函数本身进行补零高密度 FFT,绘制其归一化频率响应曲线,展示理论上的主瓣宽度和旁瓣衰减特性。
关键函数说明
generate_window(type, N)
手动实现了窗函数的数学公式,根据输入的类型字符串返回 $N$ 点窗向量:
- Rectangular:全1向量。
- Hanning/Hamming/Blackman:基于余弦级数的经典公式实现。
- Triangular:线性三角波实现。
analyze_spectrum_performance(...)
用于定量评估频谱质量的辅助函数:
- 逻辑:首先定位目标频率附近的局部最大值,然后分别向左、向右搜索下降至 -3dB 阈值的索引位置,结合幅值进行频率点的线性插值,从而获得比 FFT 分辨率更精细的带宽估算;同时计算主瓣外区域的最大旁瓣电平。
使用方法
- 确保 MATLAB 环境已准备就绪。
- 直接运行
main.m 脚本。 - 控制台将实时输出各窗函数的性能指标表(主瓣3dB带宽、最大旁瓣衰减)。
- 程序运行结束后,将自动弹出四个图表窗口,分别对应时域、频域分辨率、频谱泄漏和窗函数特性的可视化分析。