代码之家  ›  专栏  ›  技术社区  ›  Pyrolistical

哪种算法适用于极高的非突发错误?

  •  2
  • Pyrolistical  · 技术社区  · 16 年前

    我应该对流应用哪种方案或算法?我一点也不在乎开销。

    这都是理论上的,所以问我是否可以减少流的错误是没有意义的。

    编辑

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

    7 回复  |  直到 16 年前
        1
  •  7
  •   Jon Skeet    16 年前

    如果错误率是50%,那基本上就是随机噪声,不是吗?我的意思是,试着发送一个比特。如果你发一封信 正确位的流,错误率为50%,无论正确位是1还是0,都会得到半个1和半个0。

    如果它实际上小于50%(例如,50%的位将是“随机”的,而不是“翻转的”),那么您可以重复数据-将每个位传输128次,并计算出每接收100位您得到的更多。这是一个简单的代码,效率极低,根本不是数学的解决方案:)

        2
  •  3
  •   dsimcha    16 年前

    Reed-Solomon纠错的要点是,大多数真实世界的错误都是突发性的,所以需要对数据进行交织和去交织。如果您的错误是完全随机的,即泊松分布,那么只需以简单、数学上有效的方式向流中添加冗余即可。你可以看一看某种隐马尔可夫模型,比如 trellis code.

    另外,请看一下 noisy channel coding theorem. 严格地说,它不适用于数字数据,但如果这些位的来源是某个模拟过程,或者您可以对位进行建模 犹如

        3
  •  2
  •   Tall Jeff    16 年前

    在您的问题中,您可能已经排除了这一选项,但是更好的编码方案可能基于数据流本身的相对存在(或不存在)。换言之,要传输一个二进制的…发送一个1/0的交替流。若要发送零,请不发送任何内容,或者发送恒定级别。其思想是发送(和接收)任何东西都代表一种状态,发送(和接收)任何东西都不代表另一种状态。这实际上类似于一种 bipolar encoding 数据的完整性。

        4
  •  1
  •   Captain Segfault    16 年前

    假设通道具有非零容量!

    随机化

        5
  •  1
  •   Antti Huima    16 年前

    翻转率必须低于50%,才能使任何方案起作用。当然,它可能高于50%,但是您可以首先反转流,然后像错误率低于50%那样处理它。

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

        6
  •  0
  •   MarkusQ    16 年前

    你研究过涡轮代码吗?

    啊!我把它误读为50%的随机化,而不是50%的翻转。

        7
  •  0
  •   Captain Segfault    16 年前

    确切地 在任何给定的传输中,50%的位被翻转,而不是每个位都以50%的概率翻转,您可以通过发送两个位的传输来发送一位信息——发送0作为00,发送1作为01。如果接收到的码字的第一位是1,则另一位是不重叠的。