def fft(x, flag=True):
"""
flag is True by default to represent the forward FFT
flag is False, if inverse FFT is wanted
this is a simple version for understanding FFT quickly
the length of x should be even to be correct
"""
n = len(x)
factor = 1 if flag else 0.5
if n == 1:
return x
w = np.exp(2 * np.pi * 1j/ n) if flag else np.exp(-2 * np.pi * 1j / n)
x_even, x_odd = x[::2], x[1::2]
y_even, y_odd = fft(x_even, flag), fft(x_odd, flag)
y = np.array([0 + 0j] * n)
for i in range(int(n/2)):
y[i] = y_even[i] + w**i * y_odd[i]
y[i + int(n/2)] = y_even[i] - w**i * y_odd[i]
return y * factor
基于Python实现快速傅里叶变换FFT
于 2023-12-02 16:42:18 首次发布