Advertisement
Guest User

Laba6

a guest
May 24th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.74 KB | None | 0 0
  1. import math
  2. import random
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5.  
  6. class complex:
  7.     re = 0
  8.     im = 0
  9.  
  10. def dif(a, b):
  11.     r = complex()
  12.     r.re = a.re - b.re
  13.     r.im = a.im - b.im
  14.     return r
  15.  
  16. def sum(a, b):
  17.     r = complex()
  18.     r.re = a.re + b.re
  19.     r.im = a.im + b.im
  20.     return r
  21.  
  22. def prod(a, b):
  23.     r = complex()
  24.     r.re = a.re * b.re - a.im * b.im
  25.     r.im = a.re * b.im + a.im * b.re
  26.     return r
  27.  
  28.  
  29. def prn(a, n):
  30.     print()
  31.     x = []
  32.     y = []
  33.     for i in range(1, n+1):
  34.        x.append(i)
  35.        y.append(a[i].re)
  36.     plt.plot(x, y)
  37.  
  38. def fft(x, m):
  39.     u = s = t = g = complex()
  40.     r = n = le = le2 = ip = 0
  41.     n = int(math.pow(2, m))
  42.  
  43.     for l in range(1, m+1):
  44.         le = int(math.pow(2, m + 1 - l))
  45.         le2 = int(le / 2)
  46.         u.re = 1
  47.         u.im = 0
  48.         r = math.pi / le2
  49.         s.re = math.cos(r)
  50.         s.im = math.sin(r)
  51.         for j in range(1, le2 + 1):
  52.             for i in range(j, n + 1, le):
  53.                 ip = i + le2
  54.                 t = sum(x[i], x[ip])
  55.                 x[ip] = prod(dif(x[i], x[ip]), u)
  56.                 x[i] = t
  57.             u = prod(u, s)
  58.  
  59.     nd2 = int(n / 2)
  60.     nm1 = n - 1
  61.     j = 1
  62.     k = 0
  63.  
  64.     for q in range(1, int(nm1) + 1):
  65.         if q < j:
  66.             x[j] = x[q]
  67.             x[q] = x[j]
  68.         k = nd2
  69.         while k < j:
  70.             j -= k
  71.             k /= 2
  72.  
  73.         j += k
  74.  
  75. def sig(k1, k2, t1):
  76.     return 3 * (1 + 0.3 * np.cos(2*np.pi*k1*t1/n)) * np.cos(2*np.pi*k2*t1/n)
  77.  
  78.  
  79. k1 = 5
  80. k2 = 17
  81. n = 1024
  82. m = 10
  83. x = []
  84. for i in range(n+1):
  85.     x.append(complex())
  86.  
  87. for i in range(1, n+1):
  88.     x[i].re = sig(k1, k2, i)
  89.     x[i].im = 0
  90.  
  91. prn(x, n)
  92. plt.show()
  93. fft(x, m)
  94. prn(x, n)
  95. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement