为什么我计算的结果与Matlab计算的结果不同?

3

这是Matlab的答案:

x=[1,0,1,1]

x_encode=encode(x,7,4)

>>x_encode [1,0,0,1,0,1,1]

我从海明编码的定义中计算出了海明码,以下是我的计算过程:
2^r≥k+r+1
Here,k=4
2^r≥5+r
r=3
n=k+r=7
encode:[r1,r2,1,r3,0,1,1]
r1->[r1,1,0,1]、r2->[r2,1,1,1]、r3->[r3,0,1,1]

如果我使用奇校验位,那么它会是这样的:
r1=1,r2=0,r3=1
>>x_encode [1,0,1,1,0,1,1]

但如果我使用偶校验位,那么它会像这样:

r1=0,r2=1,r3=0
>>x_encode [0,1,1,0,0,1,1]

以上的方法都无法得出Matlab计算的结果。我想知道原因,如果有人能回答我的问题,我将不胜感激。谢谢!


这里是一个详细的链接,包含Matlab代码的编码和解码:https://medium.com/@4ravind/hamming-7-4-efficient-implementation-matlab-octave-1605a73429f7 - m2016b
1个回答

3
您可以在Matlab中打开encode函数。该函数执行以下步骤:
m = n-k;
h = hammgen(m);
gen = gen2par(h);
code = rem(x * gen, 2);

尝试逐步检查这些命令的作用以及它们与经典海明码的区别。


2
我不知道 'open' 函数,谢谢!你真的让我眼前一亮。但我仍然想知道为什么 Matlab 使用这种编码方法而不是定义。我怀疑我的知识是否有误。 - Jay Kwok
1
看起来Matlab使用了不同的奇偶校验矩阵。请查看hammgen函数。它返回一个矩阵,其中奇偶校验位是通过考虑(x1,x3,x4)、(x1,x2,x3)、(x2,x3,x4)计算的,而在https://en.wikipedia.org/wiki/Hamming(7,4)中报告的奇偶校验矩阵是通过考虑其他组合设计的。 - Alessandro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接