汉明码由理查德·汉明于1950年发明,是一种通过噪声信道传输数据的方法,使接收者能够纠正简单的错误。发送器将奇偶校验位添加到传输流中,这样,当数据位和奇偶校验位相结合时,可以识别和纠正数据位或奇偶校验比特中的任何单位错误。所需奇偶校验位的数量由汉明规则给出d日+第页+ 1 ≤ 2第页哪里d日是数据位数第页是奇偶校验位的数目。码字的长度c(c)它结合了数据位和奇偶校验位d日+第页,汉明代码描述为(c(c),d日). 我们将说明如何使用4位数据字,它需要3个奇偶校验位才能满足汉明规则(2是不够的,因为4+2+1>4,但3是足够的,因为4+3+1≤8),并由(7,4)描述。
汉明码的一个特定实例使用两个矩阵,G公司生成器矩阵和H(H)综合征矩阵。以下是(7,4)汉明码的样本生成器(左)和综合征(右)矩阵:
1 0 0 0 1 1 1 1 0 1 1 1 0 0
0 1 0 0 0 1 1 1 1 0 1 0 1 0
0 0 1 0 1 0 1 1 1 1 0 0 0 1
0 0 0 1 1 1 0
生成器矩阵表示为[我:一个]由一个单位矩阵组成我在最左边的四列(数据位数)和奇偶校验编码矩阵中一个在最右边的三列中(奇偶校验位的数量)。对于一个矩阵;它的构造必须确保每个数据位都由两个或多个奇偶校验位进行检查,这样奇偶校验比特的组合就不会与数据位重叠。表示综合征矩阵[一个T型:我]由奇偶编码矩阵的转置组成一个在最左边的四列中,单位矩阵在最右边的四列。
数据字通过将其乘以生成矩阵进行编码,所有算术均为模2;我们给出了一个矩阵乘法的算法上一次练习例如,数据字[1 0 0 1]被编码为[1 0 0 1 0 0 1],如下所示:
|1|
| 0 |
| 1 0 0 0 1 1 1 | | 0 |
| 1 0 0 1 | * | 0 1 0 0 0 1 1 | = | 1 |
| 0 0 1 0 1 0 1 | | 0 |
| 0 0 0 1 1 1 0 | | 0 |
| 1 |
解码是逆运算,将综合征矩阵乘以编码数据:
| 1 |
| 0 |
| 1 0 1 1 1 0 0 | | 0 | | 0 |
| 1 1 0 1 0 1 0 | * | 1 | = | 0 |
| 1 1 1 0 0 0 1 | | 0 | | 0 |
| 0 |
| 1 |
如果所有结果位均为零,则传输成功且无错误,输入代码为编码的前四位[1 0 0 1]。但如果有传输错误,则该综合征会指向它。例如,如果接收者接收到的传输为[1 0 1 1 0 0 1],则综合征计算为[1 01],这与H(H)矩阵,表示传输的第三位出错,因此消息不是[10 1 1],而是[1 0 0 1],这是正确的。
您的任务是编写使用上述汉明码对消息进行编码和解码的函数。完成后,欢迎您阅读或运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。
页:1 2