我有一個簡單的問題,關於在python中做二維FFT時的規範化。 我的理解是規範化因素可以通過使數組填充1來確定。例如在1d中,[1,1,1,1]的FFT會給我[4 + 0j,0 + 0j,0 + 0j,0 + 0j],所以歸一化因子應該是1/N = 1/4。二維FFT的歸一化
在2D中,[[1,1],[1,1]]的FFT會給我[[4 + 0j,0 + 0j],[0 + 0j,0 + 0j]],所以歸一化應該爲1/MN = 1 /(2 * 2)= 1/4。現在假設我們有一個3000乘3000的矩陣,每個元素的高斯分佈值均值爲0.當我們FFT並歸一化(歸一化因子= 1 /(3000 * 3000))時,我們得到的平均功率爲訂單10^-7。
現在我們使用1000乘1000元素子區域(歸一化因子= 1 /(1000 * 1000))重複此操作。我們從這得到的平均功率是10^-6。我想知道爲什麼有一個10倍的差異。不應該平均的權力是相同的?我是否錯過了一個額外的標準化因素?
如果我們說因素差異事實上是9,那麼我可以猜測這是來自元素數量(3000 x 3000的元素數多於1000 x 1000的9倍),但是這是什麼直觀原因額外的因素?另外,我們如何確定絕對標準化因子以獲得「真實」潛在平均功率?
任何有識之士將不勝感激。提前致謝!
示例代碼:
import numpy as np
a = np.random.randn(3000,3000)
af = np.fft.fft2(a)/3000.0/3000.0
aP = np.mean(np.abs(af)**2)
b = a[1000:2000,1000:2000]
bf = np.fft.fft2(b)/1000.0/1000.0
bP = np.mean(np.abs(bf)**2)
print aP,bP
>1.11094908545e-07 1.00226264535e-06
我認爲FFT也是一個平均過程,所以你需要根據量化進行補償。 20.log(3,10)= 9.54:你的因素也許在這裏。更多信息:http://www.lumerink.com/courses/ece697/docs/Papers/The%20Fundamentals%20of%20FFT-Based%20Signal%20Analysis%20and%20Measurements.pdf – lucasg