周期图法与汉明窗辅助的高斯白噪声背景下正弦信号功率谱估计
项目介绍
本项目实现了一种基于改进周期图法的功率谱密度(PSD)估计系统。该工具旨在研究在含有单位方差高斯白噪声的背景下,如何通过非参数化方法准确识别多频正弦信号。项目通过蒙特卡洛模拟方法,对50组独立生成的样本序列进行统计分析,重点评估了在特定采样长度和窗函数作用下,算法对低频率差分量(180Hz与195Hz)的分辨能力,以及估计结果的统计稳定性(方差表现)。
功能特性
- 多频率信号合成:通过叠加三个具有不同频率(120Hz、180Hz、195Hz)和幅度的正弦信号构建仿真目标。
- 随机相位模拟:为模拟真实的随机信号特性,每个正弦分量的初始相位在各次仿真中均服从 [0, 2π] 的均匀分布。
- 频谱泄露抑制:通过手动实现的汉明窗函数对原始数据进行加权处理,有效抑制功率谱估计中的旁瓣干扰。
- 功率谱归一化修正:引入窗能量补偿因子 U,确保功率谱密度的估值符合统计无偏性要求。
- 波形能量补偿:实现了双边谱向单边谱的转换,并对除直流和奈奎斯特频率外的频点进行能量倍增补偿。
- 统计特性分析:计算并可视化50次独立实验的平均功率谱以及各个频率点上的估值方差,揭示周期图法的不稳定性。
- 自动化谱峰识别:内置简易寻峰算法,能够自动定位并标注功率谱中的主要谐波分量位置。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱依赖:本程序采用自包含设计,核心算法(汉明窗计算、寻峰逻辑)均为手动实现,无需安装额外的信号处理工具箱。
实现逻辑与算法细节
#### 1. 参数定义与初始化
系统设定采样频率为 1000Hz,观测样本点数为 512 点。定义了三个目标频率分量:120Hz、180Hz 和 195Hz,其中后两者间隔较近,用于考察频率分辨率。
#### 2. 信号生成模型
在 50 次迭代循环中,每次生成以下组合信号:
- 确定性分量:三个独立相位的正弦波叠加。
- 随机干扰:通过服从标准正态分布的随机数生成单位方差(Variance=1)的高斯白噪声。
- 预处理:对合成信号应用汉明窗,窗口函数公式为 $w(n) = 0.54 - 0.46 cos(2pi n / (N-1))$。
#### 3. 周期图法计算流程
- 快速傅里叶变换:对加窗后的序列执行 N 点 FFT。
- 功率计算:采用公式 $P(f) = |X(k)|^2 / (fs cdot U)$ 计算。其中 $U$ 是窗序列的平方和,用于纠正加窗带来的幅值衰减。
- 单边谱转换:截取 [0, fs/2] 范围的频率分量,并乘以系数2以保持总能量守恒。
#### 4. 统计与可视化处理
- 均值平滑:通过对 50 组 PSD 结果求算术平均,降低单次周期图估计的高方差特性。
- 方差计算:针对频率轴上的每个点,计算 50 次估计值的离散程度,反映噪声对不同频段的影响。
- 可视化方案:
*
对比图:同屏绘制 50 条灰色背景谱线与一条红色平均谱线,直观展示随机性。
*
线性谱图:展示平均 PSD 并在识别出的峰值处通过红圈和文字标签进行标注。
*
方差分布图:使用填充面积图展示方差随频率的变化趋势。
#### 5. 辅助功能实现
- 自定义汉明窗:不依赖内置函数,严格按照数学定义构建窗向量。
- 局部极大值检测:通过比较相邻数据点识别潜在谱峰,并结合最小峰值距离过滤算法,确保在 180Hz 和 195Hz 这种较近的频率处能准确区分不同谱峰。
关键算法分析
- 频率分辨率:在 512 点长度下,矩形窗的主瓣较窄但旁瓣较高,而汉明窗通过牺牲一定的灵敏度换取了更低的旁瓣,使得噪声背景下的微弱信号(或邻近信号)更易被观察。
- 周期图法的一致性:代码通过方差分布图展示了经典周期图法并非一致估计量。即使 N 增大,单次估计的方差也不会趋于零,这验证了在实际应用中进行多样本平均(如本项目采用的蒙特卡洛法)或使用改进算法(如 Welch 法)的必要性。