【信号处理】为什么功率谱不是幅度谱的平方
为什么功率谱不是幅度谱的平方
幅度谱:magnitude=2N⋅∣FFT∣magnitude = \frac{2}{N} \cdot |FFT|magnitude=N2⋅∣FFT∣
功率谱:power_spectrum=2N2⋅∣FFT∣2power\_spectrum = \frac{2}{N^2} \cdot |FFT|^2power_spectrum=N22⋅∣FFT∣2
如果你直接用幅度谱平方,会得到4N2⋅∣FFT∣2\frac{4}{N^2} \cdot |FFT|^2N24⋅∣FFT∣2,正好是功率谱的 2 倍。
所以,功率谱确实不是幅度谱的简单平方,根源在于“振幅”和“物理功率”之间的关系,以及单边谱的折叠方式。
下面我用最直白的方式把原因拆开。
- 一个正弦波的“振幅”和“平均功率”
假设有一个电压正弦波:
x(t)=Acos(2πf0t)x(t) = A \cos(2\pi f_0 t)x(t)=Acos(2πf0t)
它的振幅是AAA(峰值电压)。
在 1 Ω 电阻上,它的瞬时功率是x2(t)x^2(t)x2(t),平均功率是:
Pavg=1T∫0TA2cos2(2πf0t) dt=A22P_{\text{avg}} = \frac{1}{T} \int_{0}^{T} A^{2} \cos^{2}(2\pi f_{0} t) \, dt = \frac{A^2}{2}Pavg=T1∫0TA2cos2(2πf0t)dt=2A2
结论:正弦波的平均功率 = 振幅² ÷ 2。
- FFT 得到的双边谱是什么样的
对这个正弦波做 FFT(离散傅里叶变换),会在正频率
+f0+f_0+f0和负频率−f0-f_0−f0各出现一个峰。
两个峰的幅度(忽略相位)都是A/2A/2A/2的量级(乘以点数 N 等比例,这里先不纠结 N)。
可以理解为:
总信号被“拆成”两半,一半能量在正频率,一半在负频率。
所以正频率分量的振幅是A/2A/2A/2,负频率也是A/2A/2A/2。
- 单边幅度谱为什么要“乘 2”
实际频谱图通常只显示正频率(单边谱)。
为了让它直接显示出原始正弦波的振幅AAA,我们会把负频率的分量“合并”到正频率上,也就是将正频率的幅度乘以 2:
单边幅度 =2×A2=A2 \times \frac{A}{2} = A2×2A=A
所以我的代码里:magnitude = (2/N) * |FFT|
得到的峰值就是振幅 1.0 和 0.5,符合直觉。
- 单边功率谱为什么要“乘 2”但最后又只有一半
功率是振幅的平方,所以当我们把负频率的功率合并到正频率时,功率也要加倍(因为负频率的功率和正频率相等)。
于是正频率的原始功率(基于双边谱)是(A/2)2=A2/4(A/2)^2 = A^2/4(A/2)2=A2/4,加倍后变成2×A2/4=A2/22 \times A^2/4 = A^2/22×A2/4=A2/2。
看到了吗?单边功率谱的正频率峰值是A2/2A^2/2A2/2,恰好等于正弦波的平均功率,而不是A2A^2A2。
如果用公式表达:
单边功率谱
2×(∣X(f)∣N)2=2N2∣FFT∣22 \times \left( \frac{|X(f)|}{N} \right)^2 = \frac{2}{N^2} |\text{FFT}|^22×(N∣X(f)∣)2=N22∣FFT∣2
如果直接用刚才的单边幅度谱AAA平方,会得到A2A^2A2,这相当于将平均功率乘了 2,物理上不正确。
- 直观对比
| 对象 | 物理意义 | 正频率峰值 | 数值(A=1) |
|---|---|---|---|
| 单边幅度谱 | 振幅 | AAA | 1 |
| 单边幅度谱 | 振幅 | AAA | 1 |
| 单边幅度谱的平方 | (无直接物理意义) | A2A^2A2 | 1 |
| 单边功率谱 | 平均功率 | A2/2A^2 / 2A2/2 | 0.5 |
所以关系是:
功率谱=2×= 2 \times=2×幅度谱2^22
这就是差一个因子 2 的原因。
- 代码印证
你可以在自己代码里加一行,直接验证:
# 直接用幅度谱平方,再除以 $2$ power_from_magnitude = magnitude**2 / 2 # 画出对比 plt.plot(positive_freqs, power_spectrum, label='直接计算的功率谱') plt.plot(positive_freqs, power_from_magnitude, '--', label='幅度谱$^2$/2') plt.legend()两条线会完全重合。
一句话总结:
幅度谱描述每个频率的“振荡幅度”(峰值);
功率谱描述每个频率贡献的“平均功率”;
对于正弦波,平均功率=A2/2= A^2 / 2=A2/2,而不是A2A^2A2,所以功率谱天然比幅度谱的平方少一半。单边谱折叠时这个1/21/21/2因子被保留了下来。
