2

我想通过嘈杂的通道传输二进制数据。

我读到 Reed-Solomon 是一个很好的检测错误的 ECC 算法。问题是我不理解这个算法的输入。

这是我对 zxing.net 的天真失败的尝试:

int[] toEncode = { 123,232,432};
var gf = GenericGF.AZTEC_DATA_12;
ReedSolomonEncoder rse = new ReedSolomonEncoder(gf);
rse.encode(toEncode, 2);

ReedSolomonDecoder rsd = new ReedSolomonDecoder(gf);
rse.encode(toEncode, 2);

请向我解释编码器和解码器的输入。

4

1 回答 1

2

这是您在此处使用的实现:ReedSolomonEncoder.cs吗?

如果是这样,要用 M 个数据校正整数对 N 个整数进行编码,您需要传递一个长度为 N+M 的数组。您的数据应该在前 N 个索引中,并且代码看起来应该添加到最后 M 个条目的末尾。

另外,请注意编码器中的以下限制:

更新:更新版本在这里:http: //zxingnet.codeplex.com/。其最新版本的ReedSolomonEncoder.cs没有此限制。

此类实现用于处理QR 码的 Reed-Solomon 编码方案。Reed Solomon 编码的一个非常简短的描述在这里:Reed-Solomon Codes

“QR_CODE_FIELD_256”的编码选择(这对您来说可能是一个合理的选择)意味着在您的消息的字节大小的块(“符号”)上生成纠错码,这意味着您的最大消息长度(要编码的数据加上纠错码)为 255 字节长。如果要发送更多数据,则需要将其分成块。

更新 2:使用 QR_CODE_FIELD_256,您的整数也需要介于 0 和 255 之间,因此要编码一般字节流,您需要将每个字节放入整数数组中的单独整数,传递 int 数组(加上错误空间校正码)通过编码器,然后重新转换为(更大的)字节数组。反之则用于解码。

于 2014-07-04T17:22:55.380 回答