Na teoria da informação, os turbo códigos (em inglês: turbo codes) são uma classe de códigos de correção antecipada de erros (FEC) de alto desempenho desenvolvidos por volta de 1990–91, mas publicados pela primeira vez em 1993. Eles foram os primeiros códigos práticos a se aproximarem intimamente da capacidade máxima do canal ou do limite de Shannon, um máximo teórico para a taxa de código na qual a comunicação confiável ainda é possível, dado um nível de ruído específico. Os turbo códigos são usados em comunicações móveis 3G/4G (por exemplo, em UMTS e LTE) e em comunicações por satélite (espaço profundo), bem como em outras aplicações onde os projetistas buscam alcançar uma transferência de informações confiável em links de comunicação com restrição de largura de banda ou latência na presença de ruído que corrompe os dados. Os turbo códigos concorrem com os códigos de verificação de paridade de baixa densidade (LDPC), que fornecem um desempenho semelhante. Até que a patente dos turbo códigos expirasse,[1] o status livre de patentes dos códigos LDPC foi um fator importante para a relevância contínua do LDPC.[2]

O nome "turbo código" surgiu do loop de retroalimentação (feedback) usado durante a decodificação normal do turbo código, que foi comparado à retroalimentação de exaustão usada para o turbocompressor de motores. Joachim Hagenauer argumentou que o termo turbo código é um nome impróprio, uma vez que não há retroalimentação envolvida no processo de codificação.[3]

História

editar

O pedido de patente fundamental para os turbo códigos foi depositado em 23 de abril de 1991. O pedido de patente lista Claude Berrou como o único inventor dos turbo códigos. O depósito da patente resultou em várias patentes, incluindo a Patente dos EUA 5.446.747, que expirou em 29 de agosto de 2013.

O primeiro artigo público sobre turbo códigos foi "Near Shannon Limit Error-correcting Coding and Decoding: Turbo-codes".[4] Este artigo foi publicado em 1993 nos Anais da IEEE International Communications Conference. O artigo de 1993 foi formado a partir de três submissões separadas que foram combinadas devido a restrições de espaço. A fusão fez com que o artigo listasse três autores: Berrou, Glavieux e Thitimajshima (da Télécom Bretagne, antiga ENST Bretagne, França). No entanto, fica claro a partir do depósito original da patente que Berrou é o único inventor dos turbo códigos e que os outros autores do artigo contribuíram com material diferente dos conceitos centrais.

Os turbo códigos foram tão revolucionários na época de sua introdução que muitos especialistas no campo da codificação não acreditaram nos resultados relatados. Quando o desempenho foi confirmado, ocorreu uma pequena revolução no mundo da codificação que levou à investigação de muitos outros tipos de processamento iterativo de sinais.[5]

A primeira classe de turbo código foi o código convolucional concatenado paralelo (PCCC). Desde a introdução dos turbo códigos paralelos originais em 1993, muitas outras classes de turbo códigos foram descobertas, incluindo os códigos convolucionais concatenados serialmente e os códigos de repetição-acumulação. Métodos iterativos de decodificação turbo também foram aplicados a sistemas FEC mais convencionais, incluindo códigos convolucionais corrigidos por Reed-Solomon, embora esses sistemas sejam muito complexos para implementações práticas de decodificadores iterativos. A equalização turbo também fluiu do conceito de turbo codificação.

Além dos turbo códigos, Berrou também inventou os códigos convolucionais sistemáticos recursivos (RSC), que são usados na implementação de exemplo dos turbo códigos descritos na patente. Os turbo códigos que usam códigos RSC parecem ter um desempenho melhor do que os turbo códigos que não usam códigos RSC.

Antes dos turbo códigos, as melhores construções eram os códigos concatenados em série baseados em um código de correção de erros Reed-Solomon externo combinado com um código convolucional interno de comprimento de restrição curto decodificado pelo algoritmo de Viterbi, também conhecidos como códigos RSV.

Num artigo posterior, Berrou deu o crédito à intuição de "G. Battail, J. Hagenauer e P. Hoeher, que, no final dos anos 80, destacaram o interesse do processamento probabilístico". Ele acrescenta que "R. Gallager e M. Tanner já haviam imaginado técnicas de codificação e decodificação cujos princípios gerais estão intimamente relacionados", embora os cálculos necessários fossem impraticáveis naquela época.[6]

Um exemplo de codificador

editar

Existem muitas instâncias diferentes de turbo códigos, usando diferentes codificadores componentes, relações de entrada/saída, entrelaçadores e padrões de perfuração (puncturing). Esta implementação de exemplo de codificador descreve um turbo codificador clássico e demonstra o design geral dos turbo códigos paralelos.

Esta implementação do codificador envia três sub-blocos de bits. O primeiro sub-bloco é o bloco de bits de dados de carga útil (payload). O segundo sub-bloco consiste em bits de paridade para os dados da carga útil, calculados usando um código convolucional sistemático recursivo (código RSC). O terceiro sub-bloco consiste em bits de paridade para uma permutação conhecida dos dados da carga útil, novamente calculados usando um código RSC. Assim, dois sub-blocos redundantes, mas diferentes, de bits de paridade são enviados junto com a carga útil. O bloco completo tem bits de dados com uma taxa de código de . A permutação dos dados da carga útil é realizada por um dispositivo chamado entrelaçador (interleaver).

Em termos de hardware, este codificador de turbo código consiste em dois codificadores RSC idênticos, e , conforme ilustrado na figura, que são conectados um ao outro usando um esquema de concatenação, chamado concatenação paralela:

Na figura, é um registrador de memória. A linha de atraso e o entrelaçador forçam os bits de entrada a aparecerem em sequências diferentes. Na primeira iteração, a sequência de entrada aparece em ambas as saídas do codificador, e ou devido à natureza sistemática do codificador. Se os codificadores e são usados em e iterações, suas taxas são respectivamente iguais a:

O decodificador

editar

O decodificador é construído de maneira semelhante ao codificador acima. Dois decodificadores elementares são interconectados um ao outro, mas em série, não em paralelo. O decodificador opera em velocidade menor (ou seja, ), portanto, destina-se ao codificador , e serve correspondentemente para . produz uma decisão suave que causa um atraso . O mesmo atraso é causado pela linha de atraso no codificador. A operação de causa um atraso .


Um entrelaçador instalado entre os dois decodificadores é usado aqui para dispersar as rajadas de erro vindas da saída de . O bloco DI é um módulo de demultiplexação e inserção. Ele funciona como um interruptor, redirecionando os bits de entrada para em um momento e para em outro. No estado OFF, ele alimenta ambas as entradas e com bits de preenchimento (zeros).

Considere um canal AWGN (ruído gaussiano branco aditivo) sem memória, e suponha que na -ésima iteração, o decodificador recebe um par de variáveis aleatórias:

onde e são componentes de ruído independentes com a mesma variância . é o -ésimo bit da saída do codificador .

A informação redundante é demultiplexada e enviada através de DI para (quando ) e para (quando ).

produz uma decisão suave; ou seja:

e a entrega a . é chamado de logaritmo da razão de verossimilhança (LLR, do inglês log-likelihood ratio). é a probabilidade a posteriori (APP) do bit de dados que mostra a probabilidade de interpretar um bit recebido como . Levando o LLR em conta, produz uma decisão rígida (hard decision); ou seja, um bit decodificado.

Sabe-se que o algoritmo de Viterbi é incapaz de calcular a APP, portanto, não pode ser usado em . Em vez disso, um algoritmo BCJR modificado é usado. Para , o algoritmo de Viterbi é o apropriado.

No entanto, a estrutura retratada não é ótima, porque usa apenas uma fração adequada da informação redundante disponível. Para melhorar a estrutura, um loop de retroalimentação é usado (veja a linha pontilhada na figura).

Abordagem de decisão suave (Soft decision)

editar

O front-end do decodificador produz um número inteiro para cada bit no fluxo de dados. Este inteiro é uma medida do quão provável é que o bit seja um 0 ou 1 e também é chamado de soft bit. O inteiro pode ser extraído do intervalo [-127, 127], onde:

  • -127 significa "certamente 0"
  • -100 significa "muito provavelmente 0"
  • 0 significa "pode ser tanto 0 quanto 1"
  • 100 significa "muito provavelmente 1"
  • 127 significa "certamente 1"

Isto introduz um aspecto probabilístico ao fluxo de dados do front-end, mas transmite mais informações sobre cada bit do que apenas 0 ou 1.

Por exemplo, para cada bit, o front-end de um receptor sem fio tradicional tem que decidir se uma tensão analógica interna está acima ou abaixo de um determinado nível de limite de tensão. Para um decodificador de turbo código, o front-end forneceria uma medida inteira de quão longe a tensão interna está do limite fornecido.

Para decodificar o bloco de dados de bits, o front-end do decodificador cria um bloco de medidas de verossimilhança, com uma medida de verossimilhança para cada bit no fluxo de dados. Existem dois decodificadores paralelos, um para cada um dos sub-blocos de paridade de bits. Ambos os decodificadores usam o sub-bloco de verossimilhanças para os dados da carga útil. O decodificador que trabalha no segundo sub-bloco de paridade conhece a permutação que o codificador usou para este sub-bloco.

Resolvendo hipóteses para encontrar bits

editar

A principal inovação dos turbo códigos é como eles usam os dados de verossimilhança para reconciliar as diferenças entre os dois decodificadores. Cada um dos dois decodificadores convolucionais gera uma hipótese (com verossimilhanças derivadas) para o padrão de bits no sub-bloco da carga útil. Os padrões de bits das hipóteses são comparados e, se forem diferentes, os decodificadores trocam as verossimilhanças derivadas que têm para cada bit nas hipóteses. Cada decodificador incorpora as estimativas de verossimilhança derivadas do outro decodificador para gerar uma nova hipótese para os bits na carga útil. Em seguida, eles comparam essas novas hipóteses. Esse processo iterativo continua até que os dois decodificadores cheguem à mesma hipótese para o padrão de bits da carga útil, o que normalmente ocorre de 15 a 18 ciclos.

Uma analogia pode ser traçada entre esse processo e a resolução de quebra-cabeças de referência cruzada, como palavras cruzadas ou sudoku. Considere um jogo de palavras cruzadas parcialmente preenchido e possivelmente confuso. Dois solucionadores de quebra-cabeças (decodificadores) estão tentando resolvê-lo: um possuindo apenas as pistas "verticais" (bits de paridade) e o outro possuindo apenas as pistas "horizontais". Para começar, ambos os solucionadores adivinham as respostas (hipóteses) para suas próprias pistas, anotando o quão confiantes estão em cada letra (bit de carga útil). Em seguida, eles comparam suas anotações, trocando respostas e classificações de confiança entre si, percebendo onde e como eles diferem. Com base nesse novo conhecimento, ambos apresentam respostas atualizadas e classificações de confiança, repetindo todo o processo até convergirem para a mesma solução.

Desempenho

editar

Os turbo códigos apresentam um bom desempenho devido à combinação atraente da aparência aleatória do código no canal, aliada à estrutura de decodificação fisicamente realizável. Os turbo códigos são afetados por um patamar de erro (error floor).

Aplicações práticas usando turbo códigos

editar

Telecomunicações:

Formulação Bayesiana

editar

Do ponto de vista da inteligência artificial, os turbo códigos podem ser considerados como uma instância de propagação de crença com loops em redes Bayesianas.[8]

Ver também

editar

Referências

editar
  1. [1] 
  2. Erico Guizzo (1 de mar de 2004). «CLOSING IN ON THE PERFECT CODE». IEEE Spectrum. Cópia arquivada em 23 de abril de 2023  "Outra vantagem, talvez a maior de todas, é que as patentes do LDPC expiraram, para que as empresas possam usá-las sem ter que pagar por direitos de propriedade intelectual."
  3. Hagenauer, Joachim; Offer, Elke; Papke, Luiz (março de 1996). «Iterative Decoding of Binary Block and Convolutional Codes» (PDF). IEEE Transactions on Information Theory. 42 (2): 429–445. doi:10.1109/18.485714. Consultado em 20 de março de 2014. Cópia arquivada (PDF) em 11 de junho de 2013 
  4. Citação:
  5. Erico Guizzo (1 de mar de 2004). «CLOSING IN ON THE PERFECT CODE». IEEE Spectrum. Cópia arquivada em 23 de abril de 2023 
  6. Citação:
  7. Digital Video Broadcasting (DVB); Interaction channel for Satellite Distribution Systems, ETSI EN 301 790, V1.5.1, Maio de 2009.
  8. Citação:

Leitura adicional

editar

Publicações

editar

Ligações externas

editar

Predefinição:CCSDS

Predefinição:ORDENAR:Turbo Codigos

📚 Artikel Terkait di Wikipedia

Low-density parity-check code

português), também conhecidos como LDPC ou Códigos de Gallager, são códigos corretores de erro lineares. Códigos LDPC são códigos capazes de se aproximar

Código concatenado

1993). «Reed–Solomon Codes and the Exploration of the Solar System». JPL  K. Andrews et al., The Development of Turbo and LDPC Codes for Deep-Space Applications

Código Tornado

Todas as camadas, exceto a última, usam um código de correção de erros LDPC, que é rápido, mas tem chance de falha. A camada final usa um código de correção

Ameaça quântica

using quantum LDPC codes». arXiv:2602.11457 [quant-ph]  Costello, Craig (12 de abril de 2026). «Quantum computers are coming to break our codes faster than

Código Reed–Solomon

Hamkins, J.; Jones, C.R.; Pollara, F. (2007). «The development of turbo and LDPC codes for deep-space applications.» (PDF). Proceedings of the IEEE. 95 (11):

Código de apagamento

paridade de baixa densidade (LDPC) Código Fonte (Fountain code) Códigos Online Códigos LT Códigos Raptor Códigos de Rede (Network Codes) Códigos triangulares

Parchive

mais antigos. Mais algoritmos de código de correção de erros (tais como LDPC e matriz rala aleatória). Hashes BLAKE3, abandonando o suporte aos hashes

Unidade de disco rígido

de verificação de paridade de baixa densidade (LDPC) estavam suplantando Reed-Solomon; Os códigos LDPC permitem um desempenho próximo ao limite de Shannon