algorithm - 如何计算 (31,26) 的汉明码?
问题描述
我需要构造 0x444 的 (31,26) 汉明码。
在阅读了维基百科和 GeeksForGeeks 中显示的算法后,我仍然无法理解这是如何工作的,因为我的构造最终与我在互联网上找到的计算器的结果不同。
我的结果是:0100 0100 0010 0010 或 0x4422 是否正确?
据我了解:P1 = 按位 XOR(C1,C3,C5,C7,C9,C11,C13.C15,C17..) = 0
P2 = 按位异或(C2,C3,C6,C7,C10,C11,C14,C15..) = 1
P3 = 按位异或(C4,C5,C6,C7,C12,C13,C14,C15..) = 0
P4 = 按位异或(C8,C9,C10,C11,C12,C13,C14,C15..) = 0
P5 = 按位 XOR(C16,C17..) = 0
我无法理解的另一件事..如果(31,26)汉明码应该输出具有5个奇偶校验位和26个数据位的31位结果..为什么(7,4)汉明码将每个4位转换为7位表示,而不仅仅是 7 位和 3 个奇偶校验位的 1 个表示?
谢谢。
解决方案
是的,假设您在右手端从 1 开始对位进行编号,那么对于 (31,26) 汉明码,0x000444 被编码为 0x00004422——对于偶校验码字。
其中 C1、C2 等是代码字的第 1、2 等位,而 P1、P2 等是奇偶校验位 1、2 等。我认为更清楚地说:
P1 = C1 = Bitwise_XOR(C3, C5, C7, C9, ...)
以便:
Bitwise_XOR(C1, C3, C5, C7, C9, ...) == 0
等等。这甚至是平价。
您没有说您尝试了哪个“计算器”,但您看到的差异可能与您编号的目的有关。我注意到维基百科给出:
如果要编码的数据字节为 10011010,则数据字(使用_表示奇偶校验位)为 __1_001_1010,码字为 011100101010。
这显然是从左端开始计算位。
很遗憾我不明白你的第二个问题。我可以说 (31,26) 汉明码确实需要 26 位数据并添加 5 个奇偶校验位以产生 31 位代码字。并且 (7,4) 汉明码同样适用于 4 位数据、3 位奇偶校验位和 7 位代码字。
推荐阅读
- kubernetes - Kubernetes 入口将 http 重定向到 https
- java - 仅当数组包含等于另一个嵌入字段的值时才使用 java 驱动程序进行匹配
- java - 音频流 - 捕获和读取麦克风数据
- bash - sed 模式的命令输出
- angular - Angular 9 显示来自嵌套 json 的数据,从 rest api 获取
- c# - 将 GraphQL.Net 与 c# 一起使用时,如何访问 GraphQL 字段中的参数值?
- java - Json 字符串作为对应于外部 .java 文件的输出
- python - 在 Python 3 中压缩/解压缩字符串
- javascript - react dnd中的项目类型问题(不变违规:必须定义项目类型)
- arrays - 将数组转换为哈希 - Ruby