带数组的傅立叶变换

时间:2019-12-13 20:01:14

标签: python arrays fft

我正在尝试为Python中的数组定义傅立叶变换。 The formula I'm trying to use

但是,输出始终是一个空数组。您能帮我解决我的错误吗?

import numpy as np
def TF(T):
    N = len(T)
    Tr = np.array([])
    for k in range(0,N-1):
        Tl = 0
        for l in range(0,N-1):
            Tk += (T[l])*np.exp((-2j*np.pi*k*l)/N)
        np.append(Tr,Tk)
    print('Tr =',Tr)

TF(np.array([2,3,5,7,2,9]))

2 个答案:

答案 0 :(得分:3)

  1. 您需要存储结果。np.append就地工作。
  2. 您的代码需要更改

使用此:

import numpy as np

def TF(T):
    N = len(T)
    results = []
    for k in range(N): # this goes from 0 to N-1
        Tk = 0 # Tk here
        for l in range(N): # this goes from 0 to N-1
            Tk += (T[l])*np.exp((-2j*np.pi*k*l)/N)
        results.append(Tk) # store the result
    return np.array(results) # return the results

T = np.array([2, 3, 5, 7, 2, 9])

TF(T)
array([ 28. +0.00000000e+00j,  -2.5+2.59807621e+00j,
        -0.5+7.79422863e+00j, -10. -2.22329102e-14j,
        -0.5-7.79422863e+00j,  -2.5-2.59807621e+00j])

答案 1 :(得分:1)

该函数的原始公式中的其他地方有一个错误,我对它进行了些微修改以使其向量化,并将其与官方的numpy FFT函数进行了比较:

def TF(T):
    N = len(T)
    idx = np.arange(N)
    Tr = np.empty(shape=T.shape, dtype=np.complex)
    for k in idx:
        Tr[k] = np.sum(T*np.exp((-2j*np.pi*k*idx)/N))

    return Tr

np.fft.fft()相比:

x = np.array([2,3,5,7,2,9])

custom_fft = TF(x)
numpy_fft = np.fft.fft(x)

np.allclose(custom_fft, numpy_fft)
>>> True

在对代码执行完整性检查时,请始终对照已知解决方案进行检查!它将为您节省很多时间:)