рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрд░реНрд╕ рдХреЗ
рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЕрдиреБрд╡рд╛рдж рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╣реА рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред
рдлрд╛рд╕реНрдЯ рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо (рдПрдлрдПрдлрдЯреА) рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдореИрдВрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдмрд┐рдирд╛ рдФрдкрдЪрд╛рд░рд┐рдХ рдЬреНрдЮрд╛рди рдХреЗ рд╡рд░реНрд╖реЛрдВ рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рд╣рдлреНрддреЗ рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдХрднреА рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдПрдлрдПрдлрдЯреА рдЗрддрдиреА рдЬрд▓реНрджреА рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдПрдХ рдкреБрд░рд╛рдиреА рдХрд┐рддрд╛рдм рд╕реЗ рдзреВрд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдЗрд╕реЗ рдЦреЛрд▓ рджрд┐рдпрд╛, рдФрд░ рднреНрд░рд╛рдордХ рд╕рд░рд▓ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЪрд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдкрдврд╝рд╛ рдХрд┐ рдЬреЗрд╡реА рдХреЛрдЗрд▓реЗ рдФрд░ рдЬреЙрди рдЯрдХреЗ рдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рдХреНрд▓рд╛рд╕рд┐рдХ
1965 рдХреЗ рдХрд╛рдо рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдХрд╛ рд▓рдХреНрд╖реНрдп Cooley-Tukey FFT рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдбреБрдмрдХреА рд▓рдЧрд╛рдирд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд▓реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд░реВрдкрддрд╛ рдХреЛ рд╕рдордЭрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╕рд░рд▓ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдзреНрдпрдпрди рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ, рдЬреИрд╕реЗ рдХрд┐ рдЦреБрдж рдХреЛ, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рддрд╣рдд рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреА рдПрдХ рдФрд░ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред
рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдгрдПрдлрдПрдлрдЯреА рддреЗрдЬ рд╣реИ

рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо (рдбреАрдПрдлрдЯреА) рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо, рдЬрд┐рд╕рдХреА рд╕реАрдзреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ

ред рдбреАрдПрдлрдЯреА, рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдирд┐рд░рдВрддрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣, рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдФрд░ рдЙрд▓рдЯрд╛ рд░реВрдк рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо (DFT):
рдЙрд▓рдЯрд╛ рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг (ODPF):
xn тЖТ Xk
рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рди рд╕реЗ рдЖрд╡реГрддреНрддрд┐ рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╣реИ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдкрд╛рд╡рд░ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЦрдЧреЛрд▓ рд╡рд┐рдЬреНрдЮрд╛рди рдФрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкрд░
рд╣рдорд╛рд░реА рднрд╡рд┐рд╖реНрдп рдХреА рдкреБрд╕реНрддрдХ рдХреЗ рдЕрдзреНрдпрд╛рдп 10 рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЗрд╕рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЪрд┐рддреНрд░ рдФрд░ рдкрд╛рдпрдерди рд╕реНрд░реЛрдд рдХреЛрдб рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛ рдЬрдЯрд┐рд▓ рдЕрдВрддрд░ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдлрдПрдлрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдкреЛрд╕реНрдЯ
"рдкрд╛рдпрдерди рдореЗрдВ рд╢реНрд░реЛрдбрд┐рдВрдЧрд░ рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░рдирд╛" рджреЗрдЦреЗрдВ ред
рдПрдлрдПрдлрдЯреА рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рдХрд╛рд░рдг (рдмрд╛рдж рдореЗрдВ, рдкрд╛рдпрдерди рдХреЗ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рдордХрдХреНрд╖ рдПрдлрдПрдлрдЯреА - рдлрд╛рд╕реНрдЯ рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдЗрд╕рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдФрд░ рдЧреЛрд▓реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред NumPy рдФрд░ SciPy рджреЛрдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП FFTPACK рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЧреЛрд▓реЗ рд╣реИрдВ, рдЬреЛ рдХреНрд░рдорд╢рдГ
numpy.fft
рдФрд░
scipy.fftpack
numpy.fft
рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рд╕рдмрд╕реЗ рддреЗрдЬрд╝ FFT рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐
FFTW рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИ, рдЬреЛ
PyFFTW рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Python рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред
рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдЗрдП рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ рдПрдХ рддрд░рдл рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рдХрд░реЗрдВ рдХрд┐ рд╣рдо рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрдлрдПрдлрдЯреА рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдЧрдгрдирд╛рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рд╕реАрдзреЗ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпреБрддреНрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреАрдПрдлрдЯреА рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕реАрдзрд╛ рд░реИрдЦрд┐рдХ рдСрдкрд░реЗрд╢рди рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ: рдПрдХ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛


рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдо рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛

рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдПрдлрдЯреА рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[1] рдореЗрдВ:
import numpy as np def DFT_slow(x): """Compute the discrete Fourier Transform of the 1D array x""" x = np.asarray(x, dtype=float) N = x.shape[0] n = np.arange(N) k = n.reshape((N, 1)) M = np.exp(-2j * np.pi * k * n / N) return np.dot(M, x)
рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдПрдлрдкреАрдЯреА рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдЗрд╕реЗ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
[2] рдореЗрдВ:
x = np.random.random(1024) np.allclose(DFT_slow(x), np.fft.fft(x))
0ut [2]:
True
рдмрд╕ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╕реБрд╕реНрддреА рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[3] рдореЗрдВ:
%timeit DFT_slow(x) %timeit np.fft.fft(x)
10 loops, best of 3: 75.4 ms per loop 10000 loops, best of 3: 25.5 ┬╡s per loop
рд╣рдо 1000 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдзреАрдореЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд▓рдВрдмрд╛рдИ рдПрди рдХреЗ рдЗрдирдкреБрдЯ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдПрдлрдПрдлрдЯреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ

рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдзреАрдореА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рддрд░рд╛рдЬреВ рдХреА рддрд░рд╣

ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗ рд▓рд┐рдП

рддрддреНрд╡реЛрдВ, рд╣рдо FFT рдХреЛ рд▓рдЧрднрдЧ 50 рдПрдордПрд╕ рдореЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдзреАрдореА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд▓рдЧрднрдЧ 20 рдШрдВрдЯреЗ рд▓рдЧреЗрдВрдЧреЗ!
рддреЛ рдПрдлрдПрдлрдЯреА рдЗрд╕ рддрд░рд╣ рдХреЗ рддреНрд╡рд░рдг рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рд╕рдорд░реВрдкрддрд╛рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрд╕ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрдк-рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓рд╛рдЧрдд рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред Cooley рдФрд░ Tukey рдиреЗ рдПрдлрдПрдлрдЯреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╣рдо рдЕрд░реНрде рдХреЗ рдкреНрд░рд╢реНрди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

ред рдКрдкрд░ рд╣рдорд╛рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ:

рдЬрд╣рд╛рдБ рд╣рдордиреЗ рдкрд╣рдЪрд╛рди рдНрдХреНрд╕реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ [2╧А] in = 1, рдЬреЛ рдХрд┐рд╕реА рднреА рдкреВрд░реНрдгрд╛рдВрдХ n рдХреЗ рд▓рд┐рдП рд╣реИред
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ DFT рдХреА рд╕рдорд░реВрдкрддрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддреА рд╣реИ:

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рд╕реНрддрд╛рд░

рдХрд┐рд╕реА рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдореИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджреЗрдЦреЗрдВрдЧреЗ, рдЗрд╕ рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреАрдПрдлрдЯреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
FFT рдореЗрдВ DFT: рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛Cooley рдФрд░ Tukey рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ FFT рдЧрдгрдирд╛ рдХреЛ рджреЛ рдЫреЛрдЯреЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреАрдПрдлрдЯреА рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ:

рд╣рдордиреЗ рдПрдХ рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЛ рджреЛ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЫреЛрдЯреЗ рдЕрд╕рддрдд рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЗ рд╕рдорд╛рди рд╣реИ, рдПрдХ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдорд╛рди рдФрд░ рдПрдХ рд╕рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдорд╛рдиред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рддрдХ рд╣рдордиреЗ рдХреЛрдИ рд╕рдВрдЧрдгрдХ рдЪрдХреНрд░ рдирд╣реАрдВ рдмрдЪрд╛рдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрдж рдореЗрдВ (N / 2) consists N рдЧрдгрдирд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ

ред
рдЪрд╛рд▓ рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЪреВрдБрдХрд┐ k рдХреА рд╢реНрд░реЗрдгреА 0тЙдk <N рд╣реИ, рдФрд░ n рдХреА рд╕реАрдорд╛ 0 <n <MтЙбN / 2 рд╣реИ, рд╣рдо рдКрдкрд░ рдХреЗ рд╕рдорд░реВрдк рдЧреБрдгреЛрдВ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдорд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрдзреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЧрдгрдирд╛

рдмрди рдЧрдпрд╛ рд╣реИ

рдЬрд╣рд╛рдБ M, N рд╕реЗ рджреЛ рдЧреБрдирд╛ рдХрдо рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ: рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рднреА рдПрдо рд╣реИ, рд╣рдо рдЗрд╕ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЬреАрдд рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓рд╛рдЧрдд рдХреЛ рдЖрдзрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░рдгрд┐рдпрд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рди рд╣реЛрдВ, рддрд╛рдХрд┐ рд░рдгрдиреАрддрд┐ рдХреЛ рдЕрдм рд▓рд╛рдн рди рд╣реЛред рд╕реНрдкрд░реНрд╢реЛрдиреНрдореБрдЦ рд╕реАрдорд╛ рдореЗрдВ, рдпрд╣ рдкреБрдирд░рд╛рд╡рд░реНрддреА рджреГрд╖реНрдЯрд┐рдХреЛрдг O [NlogN] рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рдкрд╛рдпрдерди рдореЗрдВ рдЗрд╕ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдзреАрдореЗ рдбреАрдПрдлрдЯреА рдХреЛрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЙрдкрдорд╛ рдХрд╛ рдЖрдХрд╛рд░ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
[рек] рдореЗрдВ:
def FFT(x): """A recursive implementation of the 1D Cooley-Tukey FFT""" x = np.asarray(x, dtype=float) N = x.shape[0] if N % 2 > 0: raise ValueError("size of x must be a power of 2") elif N <= 32:
рдпрд╣рд╛рдБ рд╣рдо рдПрдХ рддреНрд╡рд░рд┐рдд рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
[рел] рдореЗрдВ:
x = np.random.random(1024) np.allclose(FFT(x), np.fft.fft(x))
рдмрд╛рд╣рд░ [5]:
True
рд╣рдорд╛рд░реЗ рдзреАрдореЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
-рдЗрди [6] рдореЗрдВ:
%timeit DFT_slow(x) %timeit FFT(x) %timeit np.fft.fft(x)
10 loops, best of 3: 77.6 ms per loop 100 loops, best of 3: 4.07 ms per loop 10000 loops, best of 3: 24.7 ┬╡s per loop
рд╣рдорд╛рд░реА рдЧрдгрдирд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо asymptotically рд╣реИ

: рд╣рдордиреЗ рддреЗрдЬреА рд╕реЗ рдлреВрд░рд┐рдпрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЕрднреА рднреА рд╕реБрджреВрд░ рдирд┐рд░реНрдорд┐рдд рдПрдлрдПрдлрдЯреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЧрддрд┐ рдХреЗ рдХрд░реАрдм рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред Fft рд╕реБрдкреА рдХреЗ рдкреАрдЫреЗ FFTPACK рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдлреЛрд░рдЯреНрд░рд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬрд┐рд╕реЗ рд╢реЛрдзрди рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╡рд░реНрд╖ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ NumPy рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкрд╛рдпрдерди рд╕реНрдЯреИрдХ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдХрдИ рдЕрд╕реНрдерд╛рдпреА рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЖрд╡рдВрдЯрди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдордп рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдкрд╛рдпрдерди / рдиреНрдпреВрдордкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдЧрдгрдирд╛ рджреЛрд╣рд░рд╛рдПрдЧреАред рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рдпрдерди рдПрдлрдПрдлрдЯреА рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред
рд╕рджрд┐рд╢ Numpy рд╕рдВрд╕реНрдХрд░рдгрдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ FFT рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдкрд░, рд╣рдо
N / 32 рд╕рдорд╛рди рдореИрдЯреНрд░рд┐рдХреНрд╕-рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рдореИрдЯреНрд░рд┐рдХреНрд╕-рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдЬреАрдд рдЬрд╛рдПрдЧреАред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕реНрддрд░ рдкрд░, рд╣рдо рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рднреА рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред NumPy рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рддреЗрдЬреА рд╕реЗ рдлреВрд░рд┐рдпрд░ рдХреЗ рдЗрд╕ рд╡реЗрдХреНрдЯрд░рдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[7] рдореЗрдВ:
def FFT_vectorized(x): """A vectorized, non-recursive version of the Cooley-Tukey FFT""" x = np.asarray(x, dtype=float) N = x.shape[0] if np.log2(N) % 1 > 0: raise ValueError("size of x must be a power of 2")
рдпрджреНрдпрдкрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд╛ рд╣реИ: рд╣рдо рдЧреБрдгрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд╕рдорд░реВрдкрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╕рд░рдгреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рд╣рдо рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
[8] рдореЗрдВ:
x = np.random.random(1024) np.allclose(FFT_vectorized(x), np.fft.fft(x))
рдмрд╛рд╣рд░ [8]:
True
рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрддреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реЗ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
DFT_slow
рдЫреЛрдбрд╝рдХрд░:
[реп] рдореЗрдВ:
x = np.random.random(1024 * 16) %timeit FFT(x) %timeit FFT_vectorized(x) %timeit np.fft.fft(x)
10 loops, best of 3: 72.8 ms per loop 100 loops, best of 3: 4.11 ms per loop 1000 loops, best of 3: 505 ┬╡s per loop
рд╣рдордиреЗ рдкрд░рд┐рдорд╛рдг рдХреЗ рдПрдХ рдХреНрд░рдо рд╕реЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ! рдЕрдм рд╣рдо FFTPACK рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗ рд▓рдЧрднрдЧ 10 рдЧреБрдирд╛ рджреВрд░ рд╣реИрдВ, рд╢реБрджреНрдз рдкрд╛рдпрдерди + рдиреНрдпреВрдкреА рдХреА рд╕рд┐рд░реНрдл рдПрдХ-рджреЛ рджрд░реНрдЬрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐ рдпрд╣ рдЕрднреА рднреА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг FFTPACK рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк
рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВ ред
рддреЛ FFTPACK рдЗрд╕ рдЕрдВрддрд┐рдо рддреНрд╡рд░рдг рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ? рдЦреИрд░, рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддреГрдд рдмрд╣реАрдЦрд╛рддрд╛ рдХреА рдмрд╛рдд рд╣реИред FFTPACK рдХрд┐рд╕реА рднреА рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд░реИрдЧреНрдб рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрднреА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рдХреЙрдкреА рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ; рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛ рдЬреИрд╕реЗ рдХрд┐ рдлреЛрд░рдЯреНрд░рд╛рди рдореЗрдВ, рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдХрдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Cooley-Tukey рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ 2 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рднрд╛рдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреЛ рд╣рдордиреЗ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ 2 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Cooley-Tukey Radix FFT рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдиреНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдПрдлрдПрдлрдЯреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдиреНрд╡реЗрдВрд╢рди рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реВрд╢реЗрдЯрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рд░реЗрдбрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо)ред рдЙрдкрд░реЛрдХреНрдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдЙрди рдПрдлрдЖрд░ рдкрд░ рднреА рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдПрдлрдПрдлрдЯреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЖрдХрд╛рд░ рджреЛ рдХреА рд╢рдХреНрддрд┐ рдирд╣реАрдВ рд╣реИред
рдпрджреНрдпрдкрд┐ рд╢реБрджреНрдз рдкрд╛рдпрдерди рдореЗрдВ рдХрд╛рд░реНрдп рд╕рдВрднрд╡рддрдГ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИрдВ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдлрдПрдлрдЯреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдЕрдзрд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо-рджрд┐рдорд╛рдЧ рд╡рд╛рд▓реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдореВрд▓рднреВрдд рд╕рд╛рдзрдиреЛрдВ рдХреЗ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рд░рдЦрддреЗ рд╣реИрдВ, рдмреЗрд╣рддрд░ рдЕрднреНрдпрд╛рд╕ред рд╣рдо рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдкреЛрд╕реНрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ IPython Notepad рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдереАред рдкреВрд░реНрдг рдиреЛрдЯрдмреБрдХ рдХреЛ
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ рдпрд╛ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдХрдИ рд▓реЛрдЧ рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рдирдП рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ, рдХрд╛рдлреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рдерд╛ред рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред