簡體   English   中英

numpy.fft.fft如何工作?

[英]How does numpy.fft.fft work?

我目前正在嘗試從numpy了解fft函數。 為此,我測試了以下假設:
我有兩個函數, f(x) = x^2g(x) = f'(x) = 2*x 根據傅立葉變換定律和Wolfram alpha,它應該是G(w) = 2pi*i*F(w) (預因子可以變化,但是應該只有一個常數)。 在python中實現時,我寫

import numpy as np
def x2(x):
    return x*x
def nx(x):
    return 2*x

a = np.linspace(-3, 3, 16)
a1 = x2(a)
a2 = nx(a)

b1 = np.fft.fft(a1)
b2 = np.fft.fft(a2)

c = b1/b2

現在我期望c值幾乎恆定,但是我得到

array([  1.02081592e+16+0.j        ,   1.32769987e-16-1.0054679j ,
         4.90653893e-17-0.48284271j,  -1.28214041e-16-0.29932115j,
        -1.21430643e-16-0.2j       ,   5.63664751e-16-0.13363573j,
        -5.92271642e-17-0.08284271j,  -4.21346622e-16-0.03978247j,
        -5.55111512e-16-0.j        ,  -5.04781597e-16+0.03978247j,
        -6.29288619e-17+0.08284271j,   8.39500693e-16+0.13363573j,
        -1.21430643e-16+0.2j       ,  -0.00000000e+00+0.29932115j,
        -0.00000000e+00+0.48284271j,   1.32769987e-16+1.0054679j ])

我的錯誤在哪里?如何按預期使用fft?

您提供的屬性將應用於連續傅立葉變換 (CFT)。 FFT計算的是離散傅里葉變換 (DFT),它與CFT有關,但並不完全等效。

的確,在某些條件下DFT與CFT成正比:即,對超出樣本限制的零函數進行足夠的采樣(例如,參見本書的附錄E)。

這兩個條件都不能滿足您上面建議的功能,因此DFT與CFT不成比例,並且您的數值結果反映了這一點。


以下是一些代碼,可以使用適當的采樣帶寬限制函數通過FFT確認您感興趣的關系:

import numpy as np

def f(x):
    return np.exp(-x ** 2)
def fprime(x):
    return -2 * x * f(x)

a = np.linspace(-10, 10, 100)
a1 = f(a)
a2 = fprime(a)

b1 = np.fft.fft(a1)
b2 = np.fft.fft(a2)
omega = 2 * np.pi * np.fft.fftfreq(len(a), a[1] - a[0])

np.allclose(b1 * 1j * omega, b2)
# True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM