Я реализовал DFT и обратную функцию DFT по следующим формулам:
![](https://i.ibb.co/8gw4qfJ/Code-Cogs-Eqn-2.gif)
Функция 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
Поскольку оригинальная функция работает и модификации для обратного довольно просты, я понятия не имею, что пошло не так!?