用于读取噪声比特流的冗余算法

Ted*_*sen 7 .net c# algorithm

我正在读一个有损的比特流,我需要一种方法来恢复尽可能多的可用数据.可以有1代替0和0代表1,但准确度可能超过80%.

如果算法可以补偿丢失/太多位,则可以获得奖励.

我正在读取的信号源是噪声模拟(麦克风通过FFT),读取时序可能因计算机速度而异.

我记得读过CD-ROM中使用的算法吗?层,所以我猜测使用几个层是一个不错的选择.我不记得细节,所以如果有人可以分享一些很棒的想法!:)

编辑:添加样本数据

Best case data:
 in: 0000010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111
out: 0010101000010110100101101100111000000100100101101100111000000100100001100000010000101110101001101100111000101110000001001111011001100110000001001100111011110110101011100111011000100110000001000010111011

Bade case (timing is off, samples are missing):
out: 00101010000101101001011011001110000001001001011011001110000001001000011000000100001011101010011011001
 in: 00111101001011111110010010111111011110000010010000111000011101001101111110000110111011110111111111101

Edit2:我能够控制发送的数据.目前正在尝试实现简单的XOR检查(虽然这还不够).

Rei*_*ica 2

您需要使用前向纠错。XOR 奇偶校验仅检测何时发生错误。一个简单的纠错算法是将每个数据块发送多次(至少 3 次)并做出多数决定。

算法的选择取决于几个因素:

  • 通道利用率(如果您有大量空闲时间,则不需要高效的编码)
  • 错误类型:坏位是随机间隔的还是通常连续出现
  • 处理时间:如果数据传输需要快速,则代码复杂度受到限制