1
- """"
1
+ """ "
2
2
Author: Ayush Chakraborty
3
3
Date: 6th October 2024
4
4
5
- generate (15,11) hamming encoded bits gives 11 bit data
5
+ generate (15,11) hamming encoded bits gives 11 bit data
6
6
7
7
input: 11 bit binary number with type string
8
8
return: 16 bit binary hamming encoded number returned in string form
9
9
"""
10
10
11
+
11
12
def hamming_15_11 (number : str ) -> str :
12
13
"""
13
14
Performs parity checks to assign values to the redundant bits, in the 16 bit number
14
15
returned, bits at index 0, 1, 2, 4, 8 are redundant bits used for checking
15
16
16
17
Hamming generated 16 bits generated from the 11 bit binary number can only detect and change
17
- a single bit change, but can only detect more than a single bit change
18
-
18
+ a single bit change, but can only detect more than a single bit change
19
+
19
20
for more theoretical knowledege about Hamming codes, refer: https://www.youtube.com/watch?v=X8jsijhllIA&t=143s
20
21
by 3B1B YT channel
21
22
@@ -27,39 +28,82 @@ def hamming_15_11(number: str) -> str:
27
28
'0011001101100110'
28
29
>>> hamming_15_11("10001000010")
29
30
'0001100001000010'
30
-
31
+
31
32
"""
32
33
if len (number ) == 11 :
33
- digits = [0 if number [i ] == '0' else 1 for i in range (len (number ))]
34
+ digits = [0 if number [i ] == "0" else 1 for i in range (len (number ))]
34
35
total_num_1 = sum (digits )
35
36
hamming_digits = [0 for i in range (16 )]
36
- bit_1 = reduce (lambda x ,y :x ^ y , [digits [1 ], digits [4 ], digits [8 ], digits [0 ], digits [3 ], digits [6 ], digits [10 ]])
37
- bit_2 = reduce (lambda x ,y :x ^ y , [digits [2 ], digits [5 ], digits [9 ], digits [0 ], digits [3 ], digits [6 ], digits [10 ]])
38
- bit_3 = reduce (lambda x ,y :x ^ y , [digits [1 ], digits [2 ], digits [3 ], digits [7 ], digits [8 ], digits [9 ], digits [10 ]])
39
- bit_4 = reduce (lambda x ,y :x ^ y , [digits [4 ], digits [5 ], digits [6 ], digits [7 ], digits [8 ], digits [9 ], digits [10 ]])
40
- bit_0 = int (total_num_1 % 2 )^ bit_1 ^ bit_2 ^ bit_3 ^ bit_4
37
+ bit_1 = reduce (
38
+ lambda x , y : x ^ y ,
39
+ [
40
+ digits [1 ],
41
+ digits [4 ],
42
+ digits [8 ],
43
+ digits [0 ],
44
+ digits [3 ],
45
+ digits [6 ],
46
+ digits [10 ],
47
+ ],
48
+ )
49
+ bit_2 = reduce (
50
+ lambda x , y : x ^ y ,
51
+ [
52
+ digits [2 ],
53
+ digits [5 ],
54
+ digits [9 ],
55
+ digits [0 ],
56
+ digits [3 ],
57
+ digits [6 ],
58
+ digits [10 ],
59
+ ],
60
+ )
61
+ bit_3 = reduce (
62
+ lambda x , y : x ^ y ,
63
+ [
64
+ digits [1 ],
65
+ digits [2 ],
66
+ digits [3 ],
67
+ digits [7 ],
68
+ digits [8 ],
69
+ digits [9 ],
70
+ digits [10 ],
71
+ ],
72
+ )
73
+ bit_4 = reduce (
74
+ lambda x , y : x ^ y ,
75
+ [
76
+ digits [4 ],
77
+ digits [5 ],
78
+ digits [6 ],
79
+ digits [7 ],
80
+ digits [8 ],
81
+ digits [9 ],
82
+ digits [10 ],
83
+ ],
84
+ )
85
+ bit_0 = int (total_num_1 % 2 ) ^ bit_1 ^ bit_2 ^ bit_3 ^ bit_4
41
86
42
87
redundant_bits = [bit_0 , bit_1 , bit_2 , bit_3 , bit_4 ]
43
88
44
89
j = - 1
45
90
r = 0
46
91
for k in range (16 ):
47
- if ( k == 0 or k == 1 or k == 2 or k == 4 or k == 8 ) :
92
+ if k == 0 or k == 1 or k == 2 or k == 4 or k == 8 :
48
93
hamming_digits [k ] = redundant_bits [r ]
49
94
r += 1
50
95
else :
51
96
j += 1
52
- hamming_digits [k ] = digits [j ]
97
+ hamming_digits [k ] = digits [j ]
98
+
99
+ return "" .join ([str (i ) for i in hamming_digits ])
53
100
54
- return '' .join ([str (i ) for i in hamming_digits ])
55
-
56
101
else :
57
102
return "please provide a 11 bit binary number"
58
103
104
+
59
105
if __name__ == "__main__" :
60
106
from functools import reduce
61
107
import doctest
62
108
63
109
doctest .testmod ()
64
-
65
-
0 commit comments