使用比特流进行里德-所罗门校正

问题描述 投票:0回答:1

这适用于

reedsolo
包:

from reedsolo import RSCodec, ReedSolomonError
rsc = RSCodec(10)  # 10 ecc symbols
rsc.encode(b'hello world')  # b'hello world\xed%T\xc4\xfd\xfd\x89\xf3\xa8\xaa'
rsc.decode(b'heXlo worXd\xed%T\xc4\xfdX\x89\xf3\xa8\xaa')[0]     # 3 errors, output: b'hello world'

但我注意到最后添加了校正字节。

如何处理预先未知长度的字节流,我们应该将输入分成块吗?

reedsolo
也可以使用比特流吗?示例:

rsc.encode_bits([1, 0, 0, 1, 1])
# [1, 0, 0, 1, 1, 0, 0, 1, 1]
python bit error-correction reed-solomon
1个回答
0
投票

将所有 10 个奇偶校验位显示为十六进制字节会更容易理解:

rsc.encode(b'hello world')  # b'hello world\xed\x25\x54\xc4\xfd\xfd\x89\xf3\xa8\xaa'

编码可以即时完成,但综合症生成和纠正需要所有接收到的消息。校正子生成可以通过重新编码数据来即时实现,然后使用矩阵乘法将奇偶校验转换为校正子(这是有效的,因为奇偶校验和校正子都是数据字节的线性映射),但 Reed-Solomon 库不是这样的不会包括这个,并且纠错需要完整接收到的消息。

由于此 Reed-Solomon 库使用字节,因此最大编码消息大小为 255 字节:对于 10 字节奇偶校验,然后是 245 字节数据,10 字节奇偶校验。这假设 10 字节根据预期错误率为 255 字节消息提供足够的错误检测和纠正。选择较小的块大小可能会更好,例如总大小 = 64 字节或 128 字节。

© www.soinside.com 2019 - 2024. All rights reserved.