Continue Correção de Erro

Sep 29 2020

Tenho um fluxo de dados com as seguintes propriedades:

  • Binário
  • Comprimento dinâmico
  • Vem em blocos de 20 bits
  • Quaisquer bits aleatórios podem virar, criando um erro (não há mais probabilidade de que bits adjacentes sejam virados juntos)
  • Eu gostaria de usar cerca de 16 bits como dados e 4 para redundância por bloco, mas estou aberto para alterar esse número
  • A probabilidade de um bit estar correto é de cerca de 97%
  • Idealmente, o código seria capaz de corrigir 2 bits por bloco
  • A quantidade de blocos será bastante pequena, geralmente 1-6.

Qual seria um bom código para usar neste cenário? Pensei em Reed-Solomon, mas de acordo com este artigo , seria uma escolha ruim:

if a data stream is not characterized by error bursts or drop-outs but by random single bit errors, 
a Reed-Solomon code is usually a poor choice. More effective codes are available for this case. 

Eu também examinei Bossen's b-adjacent algorithm, mas parece ter sido projetado levando em consideração que bit flips adjacentes têm maior probabilidade de acontecer.

Respostas

1 kodlu Sep 30 2020 at 18:40

Modelando seus erros como binomiais, vamos ver o que acontece se você corrigir um único erro:

A probabilidade de 0 ou 1 erro é $$q=(1-p)^{20}+20(1-p)^{19}p$$ que é aproximadamente $0.88$ para $p=0.03,$ portanto, sua probabilidade de erro codificada ao corrigir um erro é $0.12$.

A probabilidade de erro sem codificação é $1-(1-p)^{20}$ que está por aí $0.456$ então você obtém uma melhoria considerável se usar codificação.

De acordo com este papel aqui dado$r\geq 3,$ e $2^{r-1}+1\leq n\leq 2^r-1,$ há um $[n,n-r,3]$código de Hamming encurtado com algumas boas propriedades de detecção de erro duplo. Quando$n=20,$ isto dá $r=5,$ então você tem um $[n,n-r,3]=[20,15,3]$ código de Hamming encurtado de correção de erro único e você pode transmitir $k=15$ bits por bloco de comprimento $n=20.$