travail d'un we (j'en ai big marre)
This commit is contained in:
35
old/spotify-codes-part-2/src/simple_convolutional_code.py
Normal file
35
old/spotify-codes-part-2/src/simple_convolutional_code.py
Normal file
@@ -0,0 +1,35 @@
|
||||
from typing import List
|
||||
|
||||
|
||||
def encode(bits: List[int], polynomial: List[int], tail_bite=False):
|
||||
"""Convolutionally encode the stream of bits using the generator polynomial.
|
||||
If tail_bite == True, prepend the tail of the input. Otherwise use 0s to fill.
|
||||
"""
|
||||
if tail_bite:
|
||||
tail = bits[-(len(polynomial) - 1):]
|
||||
else:
|
||||
tail = [0 for i in range(len(polynomial) - 1)]
|
||||
full = tail + bits
|
||||
polynomial.reverse() # Reverse since we're working the other direction
|
||||
parity_bits = []
|
||||
for i in range(len(bits)):
|
||||
parity = 0
|
||||
for j in range(len(polynomial)):
|
||||
parity ^= full[i + j] * polynomial[j]
|
||||
parity_bits.append(parity)
|
||||
return parity_bits
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
g0 = [1, 0, 1, 1, 0, 1, 1]
|
||||
g1 = [1, 1, 1, 1, 0, 0, 1]
|
||||
bits = "010001001110111111110001110101101011011001100"
|
||||
g0_expected = "100011100111110100110011110100000010001001011"
|
||||
g1_expected = "110011100010110110110100101101011100110011011"
|
||||
bits = [int(i) for i in bits]
|
||||
|
||||
p0 = encode(bits, g0, True)
|
||||
p1 = encode(bits, g1, True)
|
||||
|
||||
print(g0_expected == "".join(str(i) for i in p0))
|
||||
print(g1_expected == "".join(str(i) for i in p1))
|
||||
Reference in New Issue
Block a user