哪种算法可以实现极高的非突发错误?

时间:2009-03-02 19:55:50

标签: algorithm binary random error-correction

我有一个错误率非常高的二进制流。错误率为50%,意味着每个位有50%的机会被翻转。错误不会在突发中发生,并且完全是随机的,因此Reed-Solomon代码不能正常工作。

我应该将哪种方案或算法应用于流?我根本不关心开销。

这完全是理论上的,所以没有必要问我是否可以减少流的错误。

修改

不要说它不可能,它的第一个答案告诉你可以使用noisy channel coding theorem.

7 个答案:

答案 0 :(得分:7)

如果错误率是50%,那基本上是随机噪音不是吗?我的意思是,考虑只是尝试传输一个位。如果发送正确位的无限流,误差率为50%,则无论正确的位是1还是0,都会得到半个1和0的半。

如果它实际上小于50%(例如50%的位将是“随机”而不是“翻转”)那么你可以重复数据 - 每个位发送128次并找出你得到更多的数据每100位收到。这是简单的代码,非常低效,而不是数学解决方案:)

答案 1 :(得分:3)

嗯,Reed-Solomon纠错的重点是大多数现实世界中的错误都是以突发形式发生的,因此您可以对数据进行交错和解交织。如果您的错误是完全随机的,即泊松分布,那么只需以简单,数学上有效的方式向流添加冗余就可以了。你可以看到的一件事是某种隐藏的马尔可夫模型,例如trellis code.这基本上只是一种增加冗余的数学有效方法。

另外,请看一下noisy channel coding theorem.严格地说,它不适用于数字数据,但如果这些位的来源是某些模拟过程,或者您可以将位建模为如果它们是某些模拟过程的结果,它可以让您深入了解您可以做的最好的事情。这可以防止你浪费时间试图做得比数学上更好。

答案 2 :(得分:2)

当信道接近50%的实际噪声率时,根本不可能传输任何信息。对于Jon Skeet的回答,如果错误率低于50%的噪声,那么您可以通过冗余地对预期数据进行更长时间的突发来获取数据,并在统计上将结果看作原始值的某种程度的置信度。然后,基于噪声的表征,导出给定长度的所需突发长度和置信水平。但是,要了解您在此处所做的是有效降低数据速率,以提高传输流的净信噪比。

在您的问题中,您可能已将此作为选项进行排除,但更好的编码方案可能基于数据流本身的相对存在(或不存在)。换句话说,传输二进制数据....发送1/0的交替流。要发送零,不发送任何内容或者发送一个恒定级别。这个想法是发送(和接收)任何东西代表一个状态,发送(和接收)没有代表另一个状态。这实际上类似于bipolar encoding数据的类型。

答案 3 :(得分:1)

如果您的错误率为50%,则比特流是随机的,并且与原始比特流无关。就像你用完全随机的比特流对流进行异或,结果是完全随机的。你无能为力。

翻转率必须低于50%才能使任何方案有效。当然,它可能超过50%,但是你可以先反转流,然后像错误率低于50%一样处理它。

如果错误是完全随机且非常频繁的(例如,25%的位被翻转),则很难提出鲁棒的错误检测方案。您需要添加大量冗余。

答案 4 :(得分:1)

噪声信道编码定理说你实际上可以实现信道的香农容量。 表示频道的容量非零!

如果随机化通道中100%的位,其中50%将保持不变,因此您只需随机翻转50%的位。很明显,你不能通过这样一个频道发送任何数据 - 它的香农容量为零。

答案 5 :(得分:0)

您是否查看了turbo代码?

- MarkusQ

卫生署!我误读为50%随机,而不是50%翻转。

答案 6 :(得分:0)

如果完全 50%的位在任何给定的传输中被翻转,而不是以50%的概率翻转每个位,您可以通过发送两位传输来发送一些信息 - - 将0发送为00,将1发送为01.如果接收到的代码字的第一位为1,则另一位未被删除。