原理参考的是这个链接添加链接描述
然后自己写了一下代码:
def hamming_encode(data):
# 确保数据长度为4
if len(data) != 4:
raise ValueError("Input data length should be 4.")
# 编码矩阵
G = [[1, 0, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 0, 1, 0],
[0, 0, 1, 1, 0, 0, 1],
[0, 0, 0, 0, 1, 1, 1]]
# 编码
encoded_data = []
for i in range(7):
sum = 0
for j in range(4):
sum += data[j] * G[j][i]
encoded_data.append(sum % 2)
return encoded_data
def hamming_decode(received_data):
# 确保数据长度为7
if len(received_data) != 7:
raise ValueError("Received data length should be 7.")
# 校验矩阵
H = [[1, 0, 1, 0, 1, 0, 1],
[1, 1, 0, 0, 1, 1, 0],
[1, 1, 1, 1, 0, 0, 0]]
received_data1=received_data
# for i in range(7):
# received_data1.append( received_data[6 - i] )
# 计算校验比特
syndrome = []
for i in range(3):
syndrome_sum = 0
for j in range(7):
syndrome_sum += received_data1[j] * H[i][j]
syndrome.append(syndrome_sum % 2)
# 错误检测与纠正
error_pos = sum([2 ** i for i, bit in enumerate(syndrome) if bit])
if error_pos > 0:
# 硬判决纠错
received_data1[7-error_pos] = 1 - received_data1[7-error_pos]
# 提取数据位
decoded_data = [received_data1[0], received_data1[1], received_data1[2], received_data1[4]]
return decoded_data
# 测试
data = [1, 0, 1, 0] # 示例输入数据
encoded_data = hamming_encode(data)
print("Encoded data:", encoded_data)
received_data = [1, 0, 1, 0, 1, 1, 0] # 模拟接收到的数据
decoded_data = hamming_decode(received_data)
print("Decoded data:", decoded_data)
应该是没有问题,可以再自己检查检查