impemented FFT with numpy and recursion
This commit is contained in:
22
FFT.py
22
FFT.py
@ -3,10 +3,30 @@ import numpy as np
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def FFT(inp):
|
def FFT_backup(inp):
|
||||||
inp = np.array(inp)
|
inp = np.array(inp)
|
||||||
out = np.fft.fft(inp)
|
out = np.fft.fft(inp)
|
||||||
out = [val for val in np.abs(out)]
|
out = [val for val in np.abs(out)]
|
||||||
print(out)
|
print(out)
|
||||||
return 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))
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@ -3,7 +3,7 @@ from math import sin, cos, pi, sqrt
|
|||||||
import plotly.graph_objs as go
|
import plotly.graph_objs as go
|
||||||
from plotly.subplots import make_subplots
|
from plotly.subplots import make_subplots
|
||||||
|
|
||||||
from FFT import FFT
|
from FFT import FFT_real
|
||||||
|
|
||||||
FP_acc = 1e3
|
FP_acc = 1e3
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ def DFT_naive_FP(inp_float, out):
|
|||||||
|
|
||||||
|
|
||||||
def FFT_naive(inp, out):
|
def FFT_naive(inp, out):
|
||||||
fft_out = FFT(inp)
|
fft_out = FFT_real(inp)
|
||||||
for i in range(len(fft_out)):
|
for i in range(len(fft_out)):
|
||||||
val = fft_out[i]/len(inp)
|
val = fft_out[i]/len(inp)
|
||||||
if (i < len(out)):
|
if (i < len(out)):
|
||||||
|
|||||||
Reference in New Issue
Block a user