-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgolayCode.py
More file actions
109 lines (95 loc) · 3.42 KB
/
golayCode.py
File metadata and controls
109 lines (95 loc) · 3.42 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import numpy as np
from termcolor import colored
# Simule le fonctionnement de la transmission d'un message avec un code correcteur de golay (24,12,8)
# Le programme crée le message à envoyer, génère des erreurs et sépare le message pour identifier les erreurs.
MatGeneratrice = np.array([
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0],
[1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1],
[1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0],
[1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1],
[1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1],
[1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1],
[1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0],
[1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0],
[1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0],
])
def genererMessage(message):
"""
Génère le message de 24 bits à envoyer.
"""
M = np.mod(np.dot(MatGeneratrice, message), 2)
return M
def messageAlea():
"""
Génère et renvoie un message de données de 12 bits à transmettre.
"""
return np.random.randint(2, size=(12, 1))
def afficheMatrice(matrice):
"""
Permet un affichage propre de matrices colonnes.
"""
res = np.copy(matrice)
res.shape = (1, res.shape[0])
for i in range(matrice.shape[0]):
print(str(matrice[i]).strip('[]'), " ", end='')
print()
return res
def genererErreur(message, s):
"""
Permet de simuler un nombre s d'erreurs.
"""
res = np.copy(message)
for i in range(s):
b = np.random.randint(len(message))
res[b] = (res[b] + 1) % 2
return res
def differenceMatrice(matrice1, matrice2):
"""
Affichage de différence de 2 matrices, les bits équivalents sont en vert, les différents sont en rouge.
"""
for i in range(matrice1.shape[0]):
if matrice1[i] == matrice2[i]:
print(colored(str(matrice2[i]).strip('[]'), 'green'), " ", end='')
else:
print(colored(str(matrice2[i]).strip('[]'), 'red'), " ", end='')
print()
def partie(message, a):
"""
Retourne la partie du message comprise entre le bit a et a+12.
"""
retour = np.zeros((12, 1), dtype=int)
for k in range(a, a + 12):
retour[k - a] = message[k]
return retour
def main():
# Générer et afficher le message aléatoire de 12 bits
message = messageAlea()
print("Data to transmit = ")
afficheMatrice(message)
# Générer et afficher le message codé de 24 bits
encoded_message = genererMessage(message)
print("Message to send = ")
afficheMatrice(encoded_message)
# Nombre d'erreurs à insérer
num_errors = int(input('Number of errors to insert (integer between 0 and 8): '))
noisy_message = genererErreur(encoded_message, num_errors)
print("Received message (with errors) = ")
afficheMatrice(noisy_message)
print("Difference display (errors in red) = ")
differenceMatrice(encoded_message, noisy_message)
if __name__ == "__main__":
main()