Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.88 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Oct 26 01:09:48 2016
  4.  
  5. @author:
  6. """
  7.  
  8. import numpy as np
  9. #from time import clock
  10.  
  11. def randomnumbers(N): #creates an array of N random complex numbers
  12.     a = np.zeros(N)
  13.     b = np.zeros(N)
  14.     for i in range(0,N):
  15.         a[i] = 2 * np.random.random() - 1
  16.         b[i] = 2 * np.random.random() - 1
  17.     return a + 1j * b
  18.  
  19. def ft(f, multi): #fourier transformation - optional multiplier for periodic extension
  20.     N = f.size
  21.     ft  = np.zeros(multi*N, dtype=complex)
  22. #    ft_ = np.zeros(N,       dtype=complex) #only for slower version
  23.     for n in range(0, multi*N):
  24.         ft_ = np.exp((-2j*np.pi*(n - N//2)*np.arange(-N//2, N//2))/N) * f
  25. #        Slower version of line above:
  26. #        for i in range(0, N):
  27. #            ft_[i] = np.exp((-2j*np.pi*(n - N//2)*(i - N//2))/N) * f[i]
  28.         ft[n] = np.sum(ft_)/N
  29.     return ft
  30.  
  31. def invft(ft, multi): #inverse fourier transformation - optional multiplier for periodic extension
  32.     N = ft.size
  33.     f  = np.zeros(multi*N, dtype=complex)
  34. #    f_ = np.zeros(N,       dtype=complex) #only for slower version
  35.     for i in range(0, multi*N):
  36.         f_ = np.exp((2j*np.pi*(i - N//2)*np.arange(-N//2, N//2))/N) * ft
  37. #        Slower version of line above:
  38. #        for n in range(0, N):
  39. #            f_[n] = np.exp((2j*np.pi*(n - N//2)*(i - N//2))/N) * ft[n]
  40.         f[i] = np.sum(f_)
  41.     return f
  42.  
  43. #f = randomnumbers(5000)
  44. #time = clock()
  45. #invft(ft(f,1),1)
  46. #print(clock()-time)
  47.  
  48. randomnumbers(10).tofile("numbers")
  49.  
  50. f = np.fromfile("numbers", dtype=complex)
  51. N = f.size
  52. print("Original", N, "numbers:\n", f)
  53.  
  54. ft = ft(f, 1)
  55. ft.tofile("ftnumbers")
  56. print("\nFourier transformed numbers:\n", ft)
  57. ft_ = np.fft.fft(f)
  58. print("\nComparison with FFT:\n", ft_)
  59.  
  60. f2 = invft(ft, 1)
  61. print("\nInverse transformed numbers:\n", f2)
  62. f2_ = np.fft.ifft(ft_)
  63. print("\nComparison with IFFT:\n", f2_)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement