使用 Python 和 Reed Solomon 对大输入进行纠错
Error Correction with Python and Reed Solomon for large inputs
我目前正在实施消息传递系统。我想向接收者发送错误保护消息,但我在基础知识上失败了,即计算纠错码。我使用下面的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% 可能发生的错误的影响。问题在这里?编码的字节数组是空的。我的问题是:是否可以保护大文件免受错误影响,而无需将它们分成小块然后计算纠错码?
Is it possible to protect large files from errors, without chunking
them into smaller pieces
取决于代码。对于按字节的 RS,块是必需的(但这个库会为你完成工作)。
As you can see I want to protect the image from 20% errors that might
occur. The problem here?
是的。首先,这个数字并不意味着 percent-like 。您应该真正阅读该库的示例,并稍微了解一下 RS 的工作原理。
该数字是应该使用 255 个字节中的多少个字节来进行纠错。例如。 40表示每215字节的数据,会有40字节的RS码(约占20%),在这255字节中最多可以纠正20字节的错误。
最后,LDPC 原则可能是您想要研究的内容。在纠正错误方面比 RS 差一点,但差不了多少,而且 快 多。
来自评论的补充:
是否可以更正取决于错误的位置,是的。如果完整的 255 个块都消失了,它就无法更正它。为了使跨度更大,可以使用 higher-order RS 代码(例如,一个独立的块可以有 65536 字节而不是 255),但是 a)这又比(已经很慢了)255-RS,和 b) 我知道的 RS 库做不到(包括你的)。你必须自己写。
同样,LDPC 可以提供帮助,如果它不打扰您,那是完全不同的事情。例如。它没有明确的值有多少错误太多 correct/detect,它也取决于错误模式。由于它比 RS 更新,因此在线的 codes/libraries 较少,也许 none 适合您的情况。
((嗯,它也很旧,但几十年来没有人对它感兴趣,直到有人意识到它有用))。
我目前正在实施消息传递系统。我想向接收者发送错误保护消息,但我在基础知识上失败了,即计算纠错码。我使用下面的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% 可能发生的错误的影响。问题在这里?编码的字节数组是空的。我的问题是:是否可以保护大文件免受错误影响,而无需将它们分成小块然后计算纠错码?
Is it possible to protect large files from errors, without chunking them into smaller pieces
取决于代码。对于按字节的 RS,块是必需的(但这个库会为你完成工作)。
As you can see I want to protect the image from 20% errors that might occur. The problem here?
是的。首先,这个数字并不意味着 percent-like 。您应该真正阅读该库的示例,并稍微了解一下 RS 的工作原理。
该数字是应该使用 255 个字节中的多少个字节来进行纠错。例如。 40表示每215字节的数据,会有40字节的RS码(约占20%),在这255字节中最多可以纠正20字节的错误。
最后,LDPC 原则可能是您想要研究的内容。在纠正错误方面比 RS 差一点,但差不了多少,而且 快 多。
来自评论的补充:
是否可以更正取决于错误的位置,是的。如果完整的 255 个块都消失了,它就无法更正它。为了使跨度更大,可以使用 higher-order RS 代码(例如,一个独立的块可以有 65536 字节而不是 255),但是 a)这又比(已经很慢了)255-RS,和 b) 我知道的 RS 库做不到(包括你的)。你必须自己写。
同样,LDPC 可以提供帮助,如果它不打扰您,那是完全不同的事情。例如。它没有明确的值有多少错误太多 correct/detect,它也取决于错误模式。由于它比 RS 更新,因此在线的 codes/libraries 较少,也许 none 适合您的情况。
((嗯,它也很旧,但几十年来没有人对它感兴趣,直到有人意识到它有用))。