(7,4)汉明码 python实现

原理参考的是这个链接添加链接描述
然后自己写了一下代码:

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)

应该是没有问题,可以再自己检查检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值