Algorithm 编码/纠错挑战

Algorithm 编码/纠错挑战,algorithm,math,encoding,error-correction,Algorithm,Math,Encoding,Error Correction,将初始4字节消息编码为8字节在数学上是否可行?如果8字节中的一个字节被完全删除,而另一个字节重建初始4字节消息是错误的?无法重新传输,也无法知道丢弃字节的位置 如果使用Reed-Solomon纠错功能,将4个“奇偶校验”字节附加到4个“数据”字节的末尾,例如DDPPPP,而您最终得到的是DDDEPPP(其中E是一个错误),并且一个奇偶校验字节已被删除,我认为没有办法重建初始消息(尽管如果我错了请纠正我) 将初始的4字节消息乘以一个常数(或执行另一个数学运算),然后利用逆数学运算的属性来确定丢弃了

将初始4字节消息编码为8字节在数学上是否可行?如果8字节中的一个字节被完全删除,而另一个字节重建初始4字节消息是错误的?无法重新传输,也无法知道丢弃字节的位置

如果使用Reed-Solomon纠错功能,将4个“奇偶校验”字节附加到4个“数据”字节的末尾,例如DDPPPP,而您最终得到的是DDDEPPP(其中E是一个错误),并且一个奇偶校验字节已被删除,我认为没有办法重建初始消息(尽管如果我错了请纠正我)

将初始的4字节消息乘以一个常数(或执行另一个数学运算),然后利用逆数学运算的属性来确定丢弃了哪个字节。或者,对消息的结构施加一些约束,使每个字节都必须是奇数,其他字节必须是偶数

或者,它也可以是以某种方式编码为8位十进制数字的4位十进制数字,而不是字节,在上述相同的情况下,可以检测并纠正错误-无重传且丢失字节的位置未知

我在寻找任何人可能有的疯狂想法。。。有什么想法吗

编辑:


这可能有点做作,但我试图解决的情况是,比如说,你有一台有故障的打印机,它将重要的数字打印到表单上,然后邮寄给一家处理公司,该公司使用OCR读取表单。OCR不会是完美的,但它应该接近只有数字可以读取。有故障的打印机可能是一个更大的问题,它可能会掉一个整数,但无法知道它会掉哪一个,但它们总是以正确的顺序出现,不会有任何数字交换

表单可以更改,以便始终在初始四个数字和错误更正数字之间打印一个空格,即1234 5678,以便知道是删除了1234初始数字还是删除了5678错误更正数字,如果这使问题更容易解决的话。我的想法有点类似于他们通过算法验证信用卡号码的方式,但是是四位数的


希望这能为我寻找的东西提供一些澄清…

我想你需要研究一下能为你提供什么。我自己也不知道任何界限,但也许某种MDS代码可以实现这一点

编辑:在快速搜索后,我找到了图书馆,在图书馆里它说

In general, with E errors, and K erasures, you will need
* 2E + K bytes of parity to be able to correct the codeword
* back to recover the original message data.

看起来Reed-Solomon代码确实是答案,你可以从8,4代码中的一次擦除和一次错误中得到恢复

奇偶校验码可以工作,只要两个不同的数据字节不受错误或丢失的影响,只要在奇偶校验字节丢失时错误不等于任何数据字节,imho。

在十进制数字的情况下,假设一个是第一位奇数,第二位偶数,第三位奇数,等等-两位数字,则得到00-99,可以用3个奇数/偶数/奇数数字(125个总组合)表示-00=101、01=103、20=181、99=789等。因此,将两组十进制数字编码为6个总数字,然后最后两个数字表示前两组数字或某种校验和的内容。。。我想,倒数第二个数字可能是最初的两位数初始消息(1=偶数前两位数,3=奇数前两位数)上的某种奇偶指示符,并遵循奇数模式。然后,最后一个数字可以是单个数字总和的一个位置,这样,如果缺少一个数字,它将立即变得明显,并且可以在假设最后一个数字正确的情况下进行更正。虽然,如果最后两个数字中的一个被删除了,这会让事情变得糟糕…

在没有“好”的代数结构的情况下,我怀疑很难找到一个简洁的方案,让你一直到10**4码字,因为从理论上讲,信息没有太多的松弛。(下面的一个可以使用GF(5)表示5**5=3125。)幸运的是,问题很小,您可以尝试Shannon贪婪的代码构造方法(找到一个与已选择的代码不冲突的代码,将其添加到集合中)


将最多35位编码为GF(128)上的四次多项式f。在八个预定点x0、…、x7处计算多项式,并将其编码为0f(x0)1f(x1)0f(x2)1f(x3)0f(x4)1f(x5)0f(x6)1f(x7),其中交替的零和一存储在MSB中

解码时,首先查看MSB。如果MSB与索引mod 2不匹配,则该字节已损坏和/或已被删除而左移。假设它是好的,并将其移回右侧(可能在一个点上累积多个不同的可能值)。现在我们在已知点上至少有七个四次多项式f的求值,其中最多有一个是损坏的。我们现在可以尝试所有腐败的可能性

编辑:bmm6o提出了我的解决方案的第二部分不正确的说法。我不同意

让我们回顾一下MSB为0101101的情况的可能性。假设X是发送的字节数组,Y是接收的字节数组。一方面,Y[0]、Y[1]、Y[2]、Y[3]具有正确的MSB,并且被假定为X[0]、X[1]、X[2]、X[3]。另一方面,Y[4]、Y[5]、Y[6]具有不正确的MSB,并且被假定为X[5]、X[6]、X[7]

如果X[4]被删除,那么我们有七个正确的f值

如果X[3]被删除并且X[4]被破坏,那么我们在3处有一个错误的计算,并且有六个正确的计算

如果X[5]被删除并且X[4]被破坏,那么我们在5处有一个不正确的计算,并且有六个正确的计算

除了这些,还有更多的可能性,但我们从来没有少于六个正确的评估,足以恢复f。

它看起来是
1 0 0 0  0 1 1 1
0 1 0 0  1 0 1 1
0 0 1 0  1 1 0 1
0 0 0 1  1 1 1 0