我需要构造0x444的(31,26(hamming代码。
在阅读了维基百科和GeeksForGeeks中显示的算法后,我仍然不明白这是如何工作的,因为我的构建最终与我在互联网上找到的计算器的结果不同。
我的结果是:0100 0100 0010或0x4422它正确吗?
据我所知:P1=位异或(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、C1..(=0
P4=逐位异或(C8、C9、C10、C11、C12、C13、C14、C15..(=0
P5=位异或(C16,C17.(=0
还有一件事我不能理解。。如果假设(31,26(hamming码输出具有5个奇偶校验位和26个数据位的31位结果。。为什么(7,4(hamming码将每个4位转换为7位表示,而不仅仅是7位的1个表示和3个奇偶校验位?
谢谢。
是的,假设从右端的1开始对位进行编号,则0x000444被编码为0x00004422,用于(31,26(汉明码——用于偶数奇偶校验码字。
其中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比特码字也做同样的事情。