我不知道要寻找什么,因为我得到的所有与“错误纠正代码”有关的东西都与您不知道错误位置的情况有关。因此,这些代码比我需要的要复杂得多,效率低下。
在下文中,请注意位等于数据包(因为仅可能丢失整个数据包,因此该位模拟非常适合)。
是否有一些ECC考虑到您已经知道丢失了k位,而只为您提供了一种在那k个位置重构数据流的方法?另外,由ECC添加的位应该是独立的(最好)。这样,如果在数据的ECC部分内部发生数据包丢失,它仍然可以重构某些原始数据(并非总是会出现k个错误,大多数情况下不会有k个错误。因此,重要的是ECC容错自己ECC位已添加)。
这与IMO有很大的不同。对于一个简单的缺失位,我只能使用一个XOR位。但是我不够聪明,无法将其概括为n位。
再说一遍,我有一个n位的流,我知道多达k位丢失(我真的知道到底是哪一个以及它们丢失了,不可能发生损坏)。现在,我需要一个编解码器,它可以以尽可能少的开销添加到数据流中来重建它们。我梦想着拥有(n + k)位来纠正n位流中的k个随机位错误:)。最重要的是,理想情况下,如果任何这些ķ加入ECC位ñ位数据流被破坏,就好说了Ç的位ķ位遭到损坏,那么它应该仍然能够重建(KC)的位错误n位流。
请注意,通过xD我不知道错误位置。
例子:
我能想到的一种算法是这个。n位数据流要防止错误。
令p为n的最小相对素数。然后,通过递增j,对i =(p * j)mod n的数据流进行迭代,对通过选择每个偶数j的位获得的子流进行XOR。该子流具有n / 2个元素。迭代后,我们获得了n / 2个元素的奇偶校验。我们可以用相同的方式(取奇数j)获得另一半的奇偶校验。
对于2位丢失,这可减少50%的错误。
好的一面是,我们现在可以任意改善。只需采用下一个较高的相对质数,然后再次执行相同操作即可。现在,我们有25%的错误机会。基本上,每次添加两个额外的奇偶校验位,我们就可以将错误机会减少一半。
您需要一个擦除代码(而不是错误检测代码)。错误检测由链路和传输层负责。由于您正在尝试减轻UDP数据包丢失的风险,因此您已经知道丢失了哪些部分,即丢失了丢失的数据包。
在字节(或位)级别上没有擦除或错误,至少没有任何合理的可能性(至少有两个底层协议层,有时是三个,每个层都有一个校验和,可以确保这一点) 。你要么得到一个完整的,完整的数据包,或者你没有。两者之间绝对没有。
Cauchy Reed Solomon码是您可能考虑的一类算法,它们将一定长度的k个数据块转换为k + m个块,并允许恢复最多m次擦除的原始数据。这种算法的一个特殊情况是奇偶校验,对于它而言,编码和解码都是简单的异或运算,并且m = 1。这是Raid-5中使用的算法,上面的评论中已经提到过。
一句话,你想要长发。
作为替代方案,如果您有大量数据要传输给多个参与方,并且想花哨的话,可以考虑使用源代码。这些复杂得多(因而也更慢),位效率也更低,但是它们使您可以创建任意数量的数据包,其中任何k都将重构k个长度很短的原始消息。如果您能够多播到许多都想要一组大数据但不必同时开始下载的客户端,则可以节省大量带宽。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句