【信号处理】为什么功率谱不是幅度谱的平方

📅 2026/6/30 2:43:27
【信号处理】为什么功率谱不是幅度谱的平方
为什么功率谱不是幅度谱的平方幅度谱magnitude2N⋅∣FFT∣magnitude \frac{2}{N} \cdot |FFT|magnitudeN2​⋅∣FFT∣功率谱power_spectrum2N2⋅∣FFT∣2power\_spectrum \frac{2}{N^2} \cdot |FFT|^2power_spectrumN22​⋅∣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πf0​t)它的振幅是AAA峰值电压。在 1 Ω 电阻上它的瞬时功率是x2(t)x^2(t)x2(t)平均功率是Pavg1T∫0TA2cos⁡2(2πf0t) dtA22P_{\text{avg}} \frac{1}{T} \int_{0}^{T} A^{2} \cos^{2}(2\pi f_{0} t) \, dt \frac{A^2}{2}Pavg​T1​∫0T​A2cos2(2πf0​t)dt2A2​结论正弦波的平均功率 振幅² ÷ 2。FFT 得到的双边谱是什么样的对这个正弦波做 FFT离散傅里叶变换会在正频率f0f_0f0​和负频率−f0-f_0−f0​各出现一个峰。两个峰的幅度忽略相位都是A/2A/2A/2的量级乘以点数 N 等比例这里先不纠结 N。可以理解为总信号被“拆成”两半一半能量在正频率一半在负频率。所以正频率分量的振幅是A/2A/2A/2负频率也是A/2A/2A/2。单边幅度谱为什么要“乘 2”实际频谱图通常只显示正频率单边谱。为了让它直接显示出原始正弦波的振幅AAA我们会把负频率的分量“合并”到正频率上也就是将正频率的幅度乘以 2单边幅度 2×A2A2 \times \frac{A}{2} A2×2A​A所以我的代码里magnitude (2/N) * |FFT|得到的峰值就是振幅 1.0 和 0.5符合直觉。单边功率谱为什么要“乘 2”但最后又只有一半功率是振幅的平方所以当我们把负频率的功率合并到正频率时功率也要加倍因为负频率的功率和正频率相等。于是正频率的原始功率基于双边谱是(A/2)2A2/4(A/2)^2 A^2/4(A/2)2A2/4加倍后变成2×A2/4A2/22 \times A^2/4 A^2/22×A2/4A2/2。看到了吗单边功率谱的正频率峰值是A2/2A^2/2A2/2恰好等于正弦波的平均功率而不是A2A^2A2。如果用公式表达单边功率谱2×(∣X(f)∣N)22N2∣FFT∣22 \times \left( \frac{|X(f)|}{N} \right)^2 \frac{2}{N^2} |\text{FFT}|^22×(N∣X(f)∣​)2N22​∣FFT∣2如果直接用刚才的单边幅度谱AAA平方会得到A2A^2A2这相当于将平均功率乘了 2物理上不正确。直观对比对象物理意义正频率峰值数值A1单边幅度谱振幅AAA1单边幅度谱振幅AAA1单边幅度谱的平方无直接物理意义A2A^2A21单边功率谱平均功率A2/2A^2 / 2A2/20.5所以关系是功率谱2× 2 \times2×幅度谱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 / 2A2/2而不是A2A^2A2所以功率谱天然比幅度谱的平方少一半。单边谱折叠时这个1/21/21/2因子被保留了下来。