我目前正在与 reed-solomon 合作。据我了解,第一个纠错码始终与对数据字进行异或运算相同,因为范德蒙德矩阵的第一行始终为 1,并且伽罗瓦域中的元素相加等效于异或。
现在我尝试使用 ReedSolomonEncoder 的 Zxing 3.3.0 实现来获取一些代码字。请参阅 Java 中的以下列表:
ReedSolomonEncoder rs = new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256);
int[] codeword = {72,87,0,0};
rs.encode(codeword, 2);
System.out.println("Ecc for " + codeword[0] + " and " + codeword[1]);
System.out.println("XOR: " + (72^87));
System.out.println("RS #1: " + codeword[2]); // Shouldn't this be 31 too?
System.out.println("RS #2: " + codeword[3]);
这给出了以下输出:
Ecc for 72 and 87
XOR: 31
RS #1: 28
RS #2: 3
有两种可能:
- 我对 Reed-Solomon 有误解
- 我以错误的方式使用实现(因为 javadoc 写得不好)
或者这是一个错误,我不知何故不相信。