mirror of
https://github.com/mborgerding/kissfft.git
synced 2025-12-13 12:43:09 -05:00
38 lines
613 B
Python
38 lines
613 B
Python
#!/usr/local/bin/python2.3
|
|
import math
|
|
pi=math.pi
|
|
e=math.e
|
|
j=complex(0,1)
|
|
|
|
def T(n,k):
|
|
return e ** -2*j*pi*k/n
|
|
|
|
def fft(f):
|
|
n=len(f)
|
|
if n==1:
|
|
return f
|
|
|
|
for p in 4,3,2,5:
|
|
if n%p==0:
|
|
break
|
|
else:
|
|
raise Exception('%s not factorable ' % n)
|
|
m = n/p
|
|
|
|
Fm=[]
|
|
for q in range(p): # 0,1
|
|
fp = f[q::p]
|
|
Fp = fft( fp )
|
|
Fm.extend( Fp )
|
|
|
|
Fout=[0]*n
|
|
for k in range(n):
|
|
val = 0
|
|
for q in range(p):
|
|
t = e ** ( -j*2*pi*k*q/n )
|
|
val += Fm[ q*m + (k%m) ] * t
|
|
Fout[k] = val
|
|
|
|
return Fout
|
|
|