Функция преобразование Фурье(DFT) работает не правильно?

def dft(list_of_values):
    HEIGHT = max(list(map(lambda x: abs(x), list_of_values)))
    MAX_HERZT = len(list_of_values)

    total = list()

    for hertz in range(1, MAX_HERZT + 1):
        interval_total = list()
        for values in enumerate(list_of_values):
            interval_total.append(values[1] * HEIGHT * math.cos(math.pi * 2 * values[0] / hertz) - values[1] * HEIGHT * math.sin(math.pi * 2 * values[0] / hertz))

        total.append(sum(interval_total))

    total = list(map(lambda x: x / max(total), total))


    g = list()
    for i in total:
        g.append(i)
        g.append(i)
    return g

k = 100

b = list()
for i in range(k):
    b.append(i)
    b.append(i)
b = b[1:] + [k - 1]

a = [random.randint(-1, 1) for i in range(k)]
plot = pg.plot(b, dft(a), fillLevel=0, brush=(0, 214, 0, 100))
plot.plot([0, k], [0, 0], pen=(255, 255, 255))

plot_2 = pg.plot([i for i in range(len(a))], [int(i) for i in np.fft.fft(a)], fillLevel=0, brush=(30, 144, 255))
plot_2.plot([0, k], [0, 0], pen=(255, 255, 255))

app = QtWidgets.QApplication([])
w = QtWidgets.QWidget()
w.resize(1200, 800)
layout = QtWidgets.QGridLayout()
w.setLayout(layout)
layout.addWidget(plot, 0, 0)
layout.addWidget(plot_2, 0, 1)
w.show()
app.exec()

Результат моей функция dft, отличается от результата функции numpy.fft.fft, при одинаковых входных данных. Что я сделал не так


Ответы (0 шт):