Advertisement
jckuri

FFT.py

Oct 30th, 2016
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.16 KB | None | 0 0
  1. import math as m
  2. from cmath import exp, pi
  3.  
  4. def recursiveFFT(x,inverse):
  5.  n=len(x)
  6.  if n<=1: return x
  7.  even=recursiveFFT(x[0::2],inverse)
  8.  odd=recursiveFFT(x[1::2],inverse)
  9.  halfN=n//2
  10.  sign=-1 if inverse else 1
  11.  w=[exp(sign*pi*k/n) for k in range(halfN)]
  12.  T=[w[k]*odd[k] for k in range(halfN)]
  13.  R=[even[k]+T[k] for k in range(halfN)]
  14.  R+=[even[k]-T[k] for k in range(halfN)]
  15.  return R
  16.            
  17. def getAdditionalZeroes(n):
  18.  power2=int(m.log(n-1,2))+1
  19.  return 2**power2-n
  20.  
  21. def createListWithAdditionalZeroes(a):
  22.  n=len(a)
  23.  newList=[x for x in a]
  24.  newList+=[0 for i in range(getAdditionalZeroes(n))]
  25.  return newList
  26.            
  27. def fft2(a):
  28.  n=len(a)
  29.  a2=createListWithAdditionalZeroes(a)
  30.  return recursiveFFT(a2,False)
  31.            
  32. def ifft2(a):
  33.  a2=createListWithAdditionalZeroes(a)
  34.  n2=len(a2)
  35.  return [x/n2 for x in recursiveFFT(a2,True)]
  36.  
  37. a=[10,20,30,40,50,60,70]
  38. #a=[10,20,30,40,50]
  39. a2=fft2(a)
  40. a3=ifft2(a2)
  41. print('Results of my FFT with zero padding:')
  42. print(a)
  43. print(a2)
  44. print(a3)
  45.  
  46. from numpy.fft import fft,ifft
  47. from numpy import array
  48.  
  49. b2=fft(a)
  50. b3=ifft(b2)
  51. print('Results of numpy.fft:')
  52. print(a)
  53. print(b2)
  54. print(b3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement