diff --git a/FFT.py b/FFT.py index 45ebfb5..61ec9a0 100644 --- a/FFT.py +++ b/FFT.py @@ -3,10 +3,30 @@ import numpy as np -def FFT(inp): +def FFT_backup(inp): inp = np.array(inp) out = np.fft.fft(inp) out = [val for val in np.abs(out)] print(out) return out + +def FFT_real(inp): + inp = np.array(inp) + out = FFT(inp) + out = [val for val in np.abs(out)] + print(out) + return out + + +def FFT(inp): + inp = np.array(inp) + N = inp.shape[0] + if N == 1: + return inp + X_even = FFT(inp[::2]) + X_odd = FFT(inp[1::2]) + k = np.arange(N // 2) + tw = np.exp(-2j * np.pi * k / N) * X_odd + return np.concatenate((X_even + tw, X_even - tw)) + diff --git a/__pycache__/FFT.cpython-312.pyc b/__pycache__/FFT.cpython-312.pyc index 90dfc2c..7ed90aa 100644 Binary files a/__pycache__/FFT.cpython-312.pyc and b/__pycache__/FFT.cpython-312.pyc differ diff --git a/naive_DFT.py b/naive_DFT.py index 65ae0ad..f00483e 100755 --- a/naive_DFT.py +++ b/naive_DFT.py @@ -3,7 +3,7 @@ from math import sin, cos, pi, sqrt import plotly.graph_objs as go from plotly.subplots import make_subplots -from FFT import FFT +from FFT import FFT_real FP_acc = 1e3 @@ -156,7 +156,7 @@ def DFT_naive_FP(inp_float, out): def FFT_naive(inp, out): - fft_out = FFT(inp) + fft_out = FFT_real(inp) for i in range(len(fft_out)): val = fft_out[i]/len(inp) if (i < len(out)):