-
Notifications
You must be signed in to change notification settings - Fork 0
/
lab2_2.py
77 lines (70 loc) · 1.66 KB
/
lab2_2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import matplotlib.pyplot as plt
import random
import math
import time
from multiprocessing import Process, Pipe, Manager
from threading import Thread
n = 10
omegaMax = 1200
N = 64
k = 128
tau = 64
W = []
def Plot(g):
A = []
fi = []
for i in range(n):
A.append(random.random())
fii = random.random() * omegaMax
fi.append(fii)
for i in range(k):
res = 0
for j in range(n):
res += A[j] * math.sin((omegaMax / (j + 1)) * i + fi[j])
g.append(res)
yy = i
def Fourier(g):
Fp = []
Re = []
Im = []
for i in range(len(g)):
Re.append(math.sin(i * 2 * math.pi / 4))
Im.append(math.cos(i * 2 * math.pi / 4))
W.append(math.sqrt((Re[i] * Re[i]) + (Im[i] * Im[i])))
for k in range(len(g) - 1):
Wpk = 0
for p in range(len(g) - 1):
Wpk = Wpk + W[(p * k) % len(g)]
Fp.append(g[k] * Wpk)
return Fp
# Accepts DFT
def FFT(g1, g2):
fastg = []
for p in range(int(N / 2) - 1):
fastg.append(g1[p] + g2[p] * W[p])
for p in range(int(N / 2), N - 2):
fastg.append(g1[p - int(N/2)] - g2[p - int(N/2)] * W[p])
return fastg
def ParallelCompute(g, Fp):
Fp.extend(Fourier(g))
if __name__ == "__main__":
x = []
x1 = []
x2 = []
Fp1 = []
Fp2 = []
Plot(x)
for i in range(N):
if(i % 2 == 1):
x2.append(x[i])
else:
x1.append(x[i])
p1 = Thread(target=ParallelCompute, args=(x1, Fp1))
p2 = Thread(target=ParallelCompute, args=(x2, Fp2))
p1.start()
p2.start()
p1.join()
p2.join()
FastFp = FFT(Fp1, Fp2)
plt.stem(FastFp)
plt.show()