栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python实现】汉明码编码和纠错

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python实现】汉明码编码和纠错

前言

这是我大三上学期的一个作品。然后为了能够显示中间过程,用面向过程的思想编写。

  • 注:强烈建议用 jupyter 运行代码
  • n 代表运行顺序
    • In [n]: 代表第 n 步运行
    • Out [n]: 代表第 n 步运行对应的输入
    • In [ ]: 代表不运行

In [1]:

import numpy as np

In [2]:

# 二进制 转 十进制
def Bin_to_Dec(Bin):
    Dec = 0
    for i in range(len(Bin)):
        Dec += Bin[-i-1] * 2 ** i
    return Dec

class HammingCode:
    def __init__(self):
        """
        定义 生成矩阵 G 和 校验矩阵 H 
        """
        self.G = np.array(
            [[1, 0, 0, 0, 0, 1, 1],
             [0, 1, 0, 0, 1, 0, 1],
             [0, 0, 1, 0, 1, 1, 0],
             [0, 0, 0, 1, 1, 1, 1]], dtype = np.uint8)
        self.H = np.array(
            [[0, 0, 0, 1, 1, 1, 1],
             [0, 1, 1, 0, 0, 1, 1],
             [1, 0, 1, 0, 1, 0, 1]], dtype = np.uint8)
        
    def getHammingCode(self, v):
        """
        获取汉明码,由4位信息码生成7位汉明码
        """
        vG = np.matmul(v, self.G)
        for i in range(len(vG)):
            vG[i] %= 2
        return vG
    
    def checkHammingCode(self, vG):
        """
        检查汉明码,如果没有错误就打印ok;如果出现错误,自动纠正并打印正确的汉明码
        """
        HvGT = np.matmul(self.H, vG.T)
        for i in range(len(HvGT)):
            HvGT[i] %= 2
        if 1 not in HvGT:
            print("ok")
        else:
            print("error")
            error_i = Bin_to_Dec(HvGT) - 1
            vG[error_i] = 0 if vG[error_i] == 1 else 1
            print("True vG", vG)

In [3]:

hc = HammingCode()

In [4]:

# 以 1 0 1 0 为例
vG = hc.getHammingCode(np.array([1, 0, 1, 0], dtype = np.uint8))
print(vG)
print("信息码", vG[:4])
print("监督码", vG[4:])
hc.checkHammingCode(vG)

Out [4]:

[1 0 1 0 1 0 1]
信息码 [1 0 1 0]
监督码 [1 0 1]
ok

In [5]:

# 输入错误的汉明码 1 0 0 0 1 0 1
error_vG = np.array([1, 0, 0, 0, 1, 0 ,1], dtype = np.uint8)
hc.checkHammingCode(error_vG)

Out [5]:

error
True vG [1 0 1 0 1 0 1]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号