实施 DFT,反函数无法正常工作

Implementing DFT, inverse function not working properly

我已经根据以下公式实现了 DFT 和逆 DFT 函数:

DFT 函数有效,但在输出上测试逆函数时,我没有得到原始序列。

import numpy as np
import random

exp = np.exp
pi = np.pi

def mydft(X):
    n = len(X)
    out = []
    for k in range(n):
        temp = 0
        for i in range(n):
            temp += X[i] * exp(-2j*pi*k*i/n)
        out.append(temp)
    return np.array(out)

def myidft(X):
    n = len(X)
    out = []
    for k in range(n):
        temp = 0
        for i in range(n):
            temp += X[i] * exp(2j*pi*k*i/n)
        out.append(temp)
    return (1/n) * np.array(out)

测试

orig = np.random.random(100)
trans = mydft(orig)

inv = myidft(trans)
print(np.allclose(inv, trans))
>>> False

print(np.allclose(trans, np.fft.fft(orig)))
>>> True

既然原来的函数是有效的,逆函数的修改也很简单,我不知道哪里出了问题!?

你的测试不应该是

print(np.allclose(inv, orig))

因为

orig = myidft(mydft(orig))

因为当我绘制你的 DFT 时

和invDFT(原始信号的DFT)

numpy FFT algorithm相比,结果完全一样。您的实施似乎是正确的。你的测试是错误的。