使用Python和Reed-Solomon对大输入进行纠错



我目前正在实现一个消息传递系统。我想向接收器发送一条受错误保护的消息,但我在基础上失败了,即计算纠错码。我使用以下库进行错误更正
考虑以下MWE:

from reedsolo import RSCodec
with open("imageToSend.png", "rb") as pic:
picContent = pic.read()
correctionLength = int((len(picContent)/100)*20)
rs = RSCodec(correctionLength)
rs.encode(picContent)

正如你所看到的,我想保护图像不受可能发生的20%错误的影响。这里的问题是什么?编码的字节数组为空。我的问题是:是否可以保护大文件不受错误的影响,而不需要将它们分块成更小的部分,然后计算纠错码?

是否可以在不分块的情况下保护大文件不受错误的影响

取决于代码。对于字节RS,块是必要的(但这个lib为您完成了工作)。

正如你所看到的,我想保护图像免受20%的错误发生这里的问题是什么?

是。这个数字一开始并不意味着百分之一。您应该认真阅读lib的示例,并了解RS是如何工作的
数字是255个字节中应用于纠错的字节数。例如,40意味着对于每215字节的数据,将有40字节的RS码(约20%),在这255字节中,它可以纠正多达20字节的错误。

最后,LDPC原理可能是您想要研究的内容。在纠错方面比RS差一点,但没有太多,而且快得多

注释中的添加:
如果可以根据错误的位置进行更正,则为。如果255个块全部消失,它就无法纠正。为了使跨度更大,可以使用更高阶的RS代码(例如,一个独立的块可以有65536字节而不是255),a)它再次比(已经很慢的)255-RS慢得多,b)我知道的RS库无法做到这一点(包括你的)。你必须自己写。

同样,LDPC可能会有所帮助,如果它不困扰你的话,它是一件完全不同的事情。例如,它没有明确的数值,有多少错误太多而无法纠正/检测,这也取决于错误模式。由于它比RS更新,所以网上的代码/库更少,可能没有适合您的情况。

(嗯,它也很旧,但几十年来没有人对它感兴趣,直到有人意识到它很有用))。

最新更新