首先,需要注意的是,这个问题与1D和2D fft之间的差异无关,而是与总功率和平均功率如何随阵列中元素的数量而变化有关。在
当您说9的因子来自a中的元素比b中的元素多9倍时,您说得非常正确。令人困惑的是,你注意到你已经通过除以np.fft.fft2(a)/3000./3000.和{}进行了标准化,事实上,这些规范化对于得到空间和频率域中的总(非平均)功率是相等的是必要的。为了得到平均值,你必须再除以数组的大小。在
你的问题实际上是关于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
下面是一个完整的例子,从一些玩具箱开始(一维和二维数组填充一个1),最后是你自己的箱子。注意,我使用了的.size属性努比·恩达雷,返回数组中元素的总数。它相当于你的/1000./1000.等。希望这有帮助!在import numpy as np
print 'simple examples:'
# 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