我目前正在实施一个消息系统。我想向接收者发送一个受错误保护的消息,但我在基础知识上失败了,即计算纠错码。我使用以下library进行纠错 请考虑以下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%错误的影响。问题在这里?编码的bytearray为空。我的问题是:是否可以保护大文件免受错误的影响,而不是将它们分成小块,然后计算纠错码?
答案 0 :(得分:1)
是否可以在不分块的情况下保护大文件免受错误的影响 将它们分成小块
取决于代码。使用bytewise 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更新,因此在线代码/库更少,也可能没有。
((嗯,它也是旧的,但几十年来没有人对它感兴趣,直到有人意识到它是有用的))。