Naposledy aktivní 1 month ago

LRPT k=7 r=1/2 Convolution Encoder

racerxdl's Avatar Lucas Teske revidoval tento gist 9 years ago. Přejít na revizi

1 file changed, 98 insertions

convencode.py(vytvořil soubor)

@@ -0,0 +1,98 @@
1 + #!/usr/bin/env python
2 +
3 + import os, math
4 + import collections
5 +
6 + G1 = 0x79 # 171 octal
7 + G2 = 0x5B # 131 octal
8 +
9 + K = 7
10 + UW = 0x1ACFFC1D
11 +
12 + buff = collections.deque(maxlen=K)
13 +
14 + def binary(num, length=8):
15 + return format(num, '#0{}b'.format(length + 2))
16 +
17 + # Fill the buffer with initial values
18 + for i in range(0, K):
19 + buff.append(0)
20 +
21 +
22 + bitUW = []
23 + binaryUW = binary(UW, 32)[2:]
24 + for i in binaryUW:
25 + bitUW.append(int(i))
26 +
27 + bitG1 = []
28 + bitG2 = []
29 + binaryG1 = binary(G1, K)[2:]
30 + binaryG2 = binary(G2, K)[2:]
31 + for i in range(0, K):
32 + bitG1.append(int(binaryG1[i]))
33 + bitG2.append(int(binaryG2[i]))
34 +
35 + convolved = []
36 +
37 + def buffIsZero():
38 + for i in range(0, K):
39 + if buff[i] == 1:
40 + return False
41 + return True
42 +
43 + for i in bitUW:
44 + buff.appendleft(i)
45 + b0 = 0
46 + b1 = 0
47 + for t in range(0, K):
48 + b0 += bitG1[t] & buff[t]
49 + b1 += bitG2[t] & buff[t]
50 + b0 = b0 % 2
51 + b1 = b1 % 2
52 + b1 = 1 if b1 == 0 else 0
53 + convolved.append(b0)
54 + convolved.append(b1)
55 +
56 + while True:
57 + buff.appendleft(0)
58 + if buffIsZero():
59 + break
60 + b0 = 0
61 + b1 = 0
62 + for t in range(0, K):
63 + b0 += bitG1[t] & buff[t]
64 + b1 += bitG2[t] & buff[t]
65 + b0 = b0 % 2
66 + b1 = b1 % 2
67 + b1 = 1 if b1 == 0 else 0
68 + convolved.append(b0)
69 + convolved.append(b1)
70 +
71 + #convolved = convolved[:len(convolved)-2]
72 +
73 + print convolved
74 +
75 + f = open("UW.bit", "w")
76 + t = open("UW_normal.bit", "w")
77 + for s in range(0, 64):
78 + for i in bitUW:
79 + if i == 1:
80 + t.write(chr(0xFF))
81 + t.write(chr(0xFF))
82 + t.write(chr(0xFF))
83 + else:
84 + t.write(chr(0x00))
85 + t.write(chr(0x00))
86 + t.write(chr(0x00))
87 + for i in convolved:
88 + if i == 1:
89 + f.write(chr(0xFF))
90 + f.write(chr(0xFF))
91 + f.write(chr(0xFF))
92 + else:
93 + f.write(chr(0x00))
94 + f.write(chr(0x00))
95 + f.write(chr(0x00))
96 +
97 + f.close()
98 + t.close()
Novější Starší