在Python中使用fft时,我遇到了函数规范化和计算系数平方和的问题。
我的代码如下:
echo "a" >test.txt
根据Parseval的身份,总和应该相等;然而,它们的关系是256倍(sumffty是较小的一个)。我错过了什么?
答案 0 :(得分:6)
Parseval定理指出两个域中的总功率(空间/时间和频率)是相等的。它对DFT的陈述是this。请注意,尽管右侧为1 / N,但这不是平均功率,而是总功率。 1 / N的原因是DFT的归一化约定。
放入Python,这意味着对于时间/空间信号sig
,Parseval等价可以表示为:
np.sum(np.abs(sig)**2) == np.sum(np.abs(np.fft.fft(sig))**2)/sig.size
下面是一个完整的例子,从一些玩具箱开始(一个和二维阵列填充一个1s)。请注意,我使用了numpy.ndarray的.size
属性,该属性返回数组中元素的总数。希望这有帮助!
import numpy as np
# 1-d, 4 elements:
ones_1d = np.array([1.,1.,1.,1.])
ones_1d_f = np.fft.fft(ones_1d)
# compute total power in space and frequency domains:
space_power_1d = np.sum(np.abs(ones_1d)**2)
freq_power_1d = np.sum(np.abs(ones_1d_f)**2)/ones_1d.size
print 'space_power_1d = %f'%space_power_1d
print 'freq_power_1d = %f'%freq_power_1d
对不起,我无法直接使用您的示例 - 我不是Pandas用户,无法理解它。