1. 功率谱密度计算基础
功率谱密度(PSD)是信号处理中分析信号频率成分的重要工具。它描述了信号功率在不同频率上的分布情况,单位为V²/Hz。在工程实践中,我们通常使用Welch方法来估计PSD,这是一种改进的周期图法,通过分段平均来减少方差。
1.1 Welch方法的核心思想
Welch方法的核心在于三个关键步骤:
- 信号分段:将长信号划分为若干重叠的短段
- 窗函数处理:每段乘以窗函数以减少频谱泄漏
- 分段平均:对各段功率谱进行平均以降低估计方差
这种方法相比直接对整个信号做FFT有两个主要优势:
- 减少了由于有限观测时间导致的频谱泄漏
- 通过平均降低了功率谱估计的方差
提示:在实际应用中,通常选择50%的重叠率,这能在计算复杂度和统计稳定性之间取得良好平衡。
1.2 关键参数选择
在实现Welch方法时,有几个关键参数需要特别注意:
-
nperseg(段长度):决定了频率分辨率Δf=fs/nperseg
- 较长的段提供更好的频率分辨率
- 但会减少分段数量,增加估计方差
-
noverlap(重叠点数):通常设为nperseg的50%
- 增加重叠可以提高分段数量
- 但计算量也会相应增加
-
窗函数选择:汉宁窗(Hann)是最常用的选择
- 能有效抑制频谱泄漏
- 需要区分"对称"和"周期"两种形式
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 手动实现Welch方法
2.1 信号准备与分段处理
首先我们需要准备测试信号并进行分段处理:
python复制import numpy as np
from scipy.signal.windows import get_window
from scipy.fft import rfft, rfftfreq
# 信号参数设置
fs = 1000 # 采样率1000Hz
n_points = 512 # 信号长度
t = np.linspace(0, n_points/fs, n_points, endpoint=False)
x = 2 * np.sin(2 * np.pi * 100 * t) # 100Hz正弦波
# 分段参数
nperseg = 256
nove
