Você está na página 1de 55
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLÓGIA DA PARAÍBA COORDENAÇÃO DO CURSO SUPERIOR DE TECNOLOGIA

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLÓGIA DA PARAÍBA

COORDENAÇÃO DO CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS DE TELECOMUNICAÇÕES

Sérgio Ricardo Lima Ribeiro

Código Turbo

João Pessoa, 2012.

Sérgio Ricardo Lima Ribeiro

Código Turbo

Trabalho de Conclusão de Curso submetido à Coordenação do CST em Sistemas de Telecomunicações do Instituto Federal de Educação, Ciência e Tecnologia da Paraíba, como parte dos requisitos para a obtenção do grau de Tecnólogo em Telecomunicações.

Orientador:

João Pessoa, 2012.

Luiz Guedes Caldeira

Sérgio Ricardo Lima Ribeiro

Código Turbo

Trabalho de Conclusão de Curso submetido à Coordenação do Curso Superior de Tecnologia em Sistemas de Telecomunicações do Instituto Federal de Educação, Ciência e Tecnologia da Paraíba, como parte dos requisitos para a obtenção do grau de Tecnólogo em Telecomunicações.

Aprovado Pela Banca Examinadora em:

BANCA EXAMINADORA

/

/ 2012

Professor Luiz Guedes Caldeira, Dr. Orientador

Professor Erick Silva, MSc. Membro da Banca

Professora Késia Santos, MSc. Membro da Banca

João Pessoa, 2012.

AGRADECIMENTOS

Agradeço a Deus por ter me dado saúde, perseverança e pelas pessoas que colocou em meu caminho. Agradeço ao meu orientador Professor Guedes, pela orientação, incentivo e paciência. Agradeço a minha esposa Aidê pelos cuidados, paciência, compreensão e por estar sempre me ajudando nos momentos difíceis e comemorando comigo nas conquistas. Agradeço a meu filho Pablo pela compreensão e apoio. Agradeço ao grande amigo Fábio Monteiro, por ter me dado a oportunidade de realizar esta conquista. Agradeço aos meus pais, Graça e Gildo pela motivação e lições de vida. Agradeço aos meus irmãos, Paulo e Danielle pelo companheirismo. Agradeço aos amigos do IFPB pelo incentivo, especialmente a Adriana, Laís, Girlene e Isaac que estudaram ao meu lado sendo sempre companheiros nas horas difíceis. Agradeço aos professores com quem tive o prazer de estudar pelos ensinamentos, especialmente aos professores Erick Silva, Késia Santos, Jeferson Costa, Rossana Moreno e Silvana Cunha.

RESUMO

Este trabalho tem como objetivo mostrar a importância dos códigos corretores de erros na transmissão digital de informações, onde a tendência em curto prazo dos sistemas de telecomunicações é a migração total para a transmissão digital, devido a facilidade da manipulação da informação, seja por processamento do sinal, utilização de códigos corretores de erro, dentre outras o que pode aumentar de forma considerável as taxas de transmissão com qualidade e confiabilidade. A ênfase deste trabalho está no estudo dos códigos turbo, os quais são utilizados em vários esquemas de codificação de canal em uma transmissão digital, identificando os principais componentes que afetam as características e o desempenho da codificação turbo. Para se averiguar de forma teórica a eficácia do código turbo foram realizadas simulações utilizando o Software Matlab.

Palavras-Chave: transmissão digital, código corretor de erros, código turbo, codificação de canal, código convolucional, entrelaçadores.

i

ABSTRACT

This work aims to show the importance of error correcting codes in digital transmission of information, where the trend in a short time of telecommunications systems is the total migration to digital transmission, due to ease of manipulation of information, either by processing signal, using error correcting codes, and others which may increase considerably the rates of transmission quality and reliability. The emphasis of this work is the study of turbo codes, which are used in various coding schemes in a digital transmission channel, identifying the main components that affect the characteristics and performance of turbo coding. To verify the theoretical form of the efficiency of the turbo code simulations were performed using Matlab software.

Keywords: digital transmission, error correction code, turbo code, channel coding, convolutional code, interleaving.

ii

SUMÁRIO

RESUMO

i

ABSTRACT

ii

SUMÁRIO

iii

LISTA

TABELAS

iv

LISTA

DE SIGLAS

vii

CAPÍTULO 1 - Introdução

1

CAPÍTULO 2 - Transmissão digital de sinais

4

2.1 Codificação de Canal

5

2.2 Códigos

convolucionais

5

CAPÍTULO 3 - Código turbo

12

3.1 Decodificação iterativa do código turbo

19

3.2 Propriedades de distribuição de pesos do código turbo

24

CAPÍTULO 4 - Análise de desempenho do código turbo

28

4.1

Simulação

34

CAPÍTULO 5 - Conclusão

42

REFERÊNCIAS

43

iii

LISTA DE FIGURAS

Figura 2.1 - Etapas do processo da transmissão de um sinal

4

Figura 2.2 - Codificador convolucional linear com taxa R = ½

7

Figura 2.3 - Diagrama de estados para o codificador da Figura 2.2

8

Figura 2.4 - Diagrama em treliça para o codificador da Figura 2.2

10

Figura 3.1 Diagrama de bloco do codificador turbo sem perfuração de taxa 1/3

Figura

Treliça terminada

3.3

13

Figura 3.2 Diagrama de bloco do codificador turbo com perfuração de taxa 1/2

14

-

16

18

Figura 3.5 - Um decodificador iterativo código turbo baseado no algoritmo MAP

22

Figura 3.6 - Desempenho do Código Turbo (37, 21, 65536) em função do número de iterações

do

23

Figura 3.7 - Diagrama do codificador e diagrama do estado para um código

27

37

37

38

40

40

iv

LISTA TABELAS

Tabela 2.1 - Tabela de transição de estados para o diagrama da Figura 2.4

9

Tabela 3.1 Peso e multiplicidade para o espectro de distância para o código (32,12)

15

Tabela 3.2 - Código de Hamming (7,4,3) sistemático

24

vi

LISTA DE SIGLAS

AWGN (additive white gaussian noise) Ruído branco aditivo com distribuição gaussiana BER (bit error ratio) Taxa de erro de bit BPSK (binary phase shift keying) Chaveamento por deslocamento de fase binário CWEF (conditional weight enumerating function) Função de distribuição de pesos condicional FEC (forward error correction) Correção posterior de erro LLR (log likelihood ratio) Razão log de verossimilhança MAP (maximum a-posteriori) Máximo posterior MIMO (multiple input, multiple output) Múltiplas entradas, Multíplas saídas

ML (maximum Likelihood) Máxima Verossimilhança

PCCC (parallel concatenated convolutional code) Codificador convolucional concatenado em paralelo. QAM (quadrature amplitude modulation) Modulação de amplitude em quadratura QPSK (quadrature phase shift keying) Modulação em quadratura por deslocamento de fase SNR (signal to noise ratio) Taxa de relação sinal ruído

SISO (soft-input, soft-output) Entrada suave e saída suave

WEF (weight enumerating function) Função de distribuição de pesos

vii

CAPÍTULO 1

Introdução

Os códigos corretores de erros são uma ferramenta fundamental na teoria da informação. A necessidade de se garantir a integridade de uma grande quantidade de informação transmitida em um curto espaço de tempo pelos mais variáveis meios de transmissão exige o uso de sofisticados sistemas de correções de erros. A teoria da informação trata dos aspectos quantitativos de armazenamento e transmissão das mensagens e tem como objetivo principal, entre outros, garantir a integridade dos dados enviados através de algum tipo de canal [1]. Na manipulação das mensagens vários obstáculos são encontrados como falta de capacidade no armazenamento na transmissão das mensagens enviadas e introdução aleatória de erros nestas mensagens, conhecidos como ruídos.

Ao contrário das teorias matemáticas que surgiram nas universidades e geralmente após um longo período de tempo migrou para as aplicações práticas em tecnologia, a teoria de códigos corretores de erros surgiu nos laboratórios de empresas de telefonia e posteriormente se transformou em uma teoria matemática completa com aplicações em várias áreas como, por exemplo, geometria algébrica [1]. Um código corretor de erro visa recuperar informações que no processo de transmissão tenham sofrido algum tipo de ruído [2]. Pode-se afirmar que hoje praticamente todo sistema de envio de informações possui algum tipo de código corretor de erro. Como exemplos típicos, a telefonia digital, a transmissão de dados via satélite, a comunicação interna em computadores, armazenamento óptico de dados e armazenamento de dados em fitas ou disquetes magnéticos [3]. Em 1993 com início dos esquemas concatenados de códigos que utilizam o sistema de correção posterior de erro (FEC foward error correction) associado aos algoritmos de decodificação iterativos ressaltou a importância do conceito de capacidade de canal [4]. Analisando-se a curva de limite de Shannon é possível obsevar qual o limite de ruído será suportado por um esquema de codificação e decodificação infinitamente complexo. O código turbo está sendo apresentado como esquemas capazes de recuperar essa informação útil a

1

0,1dB deste limite teórico [4]. Essa recente aproximação ao limite teórico é uma forma de avaliar o desempenho de um determinado sistema [5]. De forma genérica, pode-se classificar como código turbo todo esquema de codificação de canal que utilize processos de decodificação iterativa e a concatenação de códigos componentes separados por entrelaçadores temporais. Assim, percebe-se que o termo “turbo” está diretamente associado à decodificação iterativa e não necessariamente à forma de implementação da codificação [6]. Hoje, quase 20 anos após a invenção do código turbo, as pesquisas sobre o tema se encontram em um estágio avançado e ramificaram-se, dando surgimento ao processamento turbo que é o estado da arte dos códigos corretores de erro sendo interpretado como uma das mais promissoras técnicas para a melhoria de desempenho em sistemas de comunicação. Por essa razão, a invenção do código turbo está sendo considerada como o segundo grande marco do desenvolvimento cientifico das comunicações, desde o desenvolvimento da teoria matemática da comunicação no final da década de 40 por Claude Elwood Shannon [7]. Qualquer sistema com realimentação a partir de agora deve ser interpretado não simplesmente como um sistema onde a realimentação de sinais, mas sim onde a realimentação

de

informação, como acontece no processamento turbo [8]. Dentre as várias técnicas nas quais

o

processamento turbo pode ser aplicado podemos citar exemplos como a equalização,

estimação de canal, codificação de fonte e canal conjunta, detecção multiusuário, o cancelamento de interferências, os sistemas MIMO (multiple input, multiple output) e a codificação espaço-temporal [9]. O objetivo deste trabalho é analisar as vantagens da utilização do código turbo, mostrando sua importância para a transmissão digital e sua eficiência através de simulações realizadas no software Matlab. Este trabalho está dividido em capítulos organizados da seguinte forma:

No capítulo 2 é explanado como funciona a transmissão digital de sinais dando ênfase maior na codificação de canal onde se é utilizado o objeto de nosso estudo e nos códigos convolucionais com suas formas de codificação e decodificação mostrando sua importância na construção do código turbo. No capítulo 3 é explicado em detalhes o código turbo, como ele é formado por códigos convolucionais e entrelaçadores, o código turbo perfurado e o não perfurado, algumas de suas características como o error floor e o espectral thining e a importância dos entrelaçadores e do espectro de distância de Hamming para um projeto de código turbo eficiente. Neste

2

capítulo é mostrado também como é realizada a decodificação iterativa de máxima verossimilhança. No capítulo 4 é analisado o desempenho do código turbo utilizando para isso duas forma de abordagem, na primeira temos uma análise matemática utilizando a técnica do limitante da união com a decodificação MAP. Na segunda são realizadas simulações utilizando um simulador turbo desenvolvido para o software Matlab, nesta simulação é enfatizada a importância da quantidade de iterações e do tamanho do entrelaçador para um bom desempenho do código turbo. Finalmente no capítulo 5 são apresentadas as conclusões desse trabalho mostrando a utilização de códigos turbo em diversos meio de transmissão sendo utilizadas com outras técnicas para uma transmissão digital confiável robusta.

3

CAPÍTULO 2

Transmissão digital de sinais

A transmissão digital surgiu como ume evolução natural da transmissão analógica,

antes todas as etapas envolvidas na transmissão de informação desde o tratamento da informação até a recepção era tratada de forma de sinais analógicos, com o avanço da

tecnologia agregado aos estudos sobre a quantização e digitalização das informações surgiu a transmissão digital de sinais [10].

A transmissão digital contem códigos de controle de erros que detectam e corrigem os

erros de transmissão e admitem técnicas complexas de condicionamento e processamento de sinal, como codificação de fonte, criptografia e equalização, para melhorar o desempenho geral do enlace de comunicação. Outra principal vantagem é a possibilidade de alterar ou melhorar um sistema de transmissão sem a troca de equipamentos, bastando simplesmente incluir uma melhoria no software [11].

O processo de transmissão de um sinal digital possui várias etapas como podemos

visualizar na Figura 2.1, a primeira delas é a codificação de fonte, depois a codificação de

canal (objetivo do estudo deste trabalho), modulação e o lado da recepção que refaz o processo inverso.

e o lado da recepção que refaz o processo inverso. Figura 2.1 - Etapas do processo

Figura 2.1 - Etapas do processo da transmissão de um sinal digital.

4

O último processo realizado no sinal antes da transmissão propriamente dita é a

modulação que consta em transformar as informações entregues pelo codificador de canal em uma forma de onda e frequência adequadas para transmissão por meio do canal [2]. O sinal é modulado para facilitar a transmissão do mesmo através de um meio, existem três tipos básicos de modulação; por amplitude, por fase e por frequência, todas estas técnicas de modulação representam a informação em um sinal senoidal. Os tipos de modulação mais utilizados na transmissão digital são as modulações em fase PSK (phase shift keying) e (QAM

- quadrature amplitude modulation) [12]. Depois que o sinal passa pelo canal chega ao receptor onde é realizado todo processo de tratamento do sinal, demodulação, decodificação de canal e decodificação de fonte, para então o sinal ser entregue ao destino. Essa sendo a parte mais complexa de um sistema de comunicação.

2.1 Codificação de Canal

O canal de comunicação é responsável pela introdução de ruído, corrompendo a

informação transmitida. O principal objetivo da codificação de canal é combater este efeito danoso provocado pelo canal e propiciar uma comunicação confiável em uma dada taxa de erro tolerável (BER bit error rate), reduzir a relação sinal/ruído (SNR - signal to noise ratio) necessária, aumentando a eficiência na utilização da potência de transmissão [4]. A codificação de canal deve, obrigatoriamente, apresentar um melhor desempenho que uma transmissão não codificada, para mesma SNR, caso contrário à codificação não se justifica. O processo de codificação de canal consiste fundamentalmente na introdução de bits redundantes na informação que vai ser transmitida transformando um bloco de informação com tamanho k bits em um bloco codificado com n bits. Os bits adicionais permitem de um modo geral, a detecção e/ou a correção de erros no sinal recebido.

2.2 Códigos convolucionais

O código turbo pode utilizar diversos tipos de códigos corretores de erros, dentre eles os mais utilizados são os códigos convolucionais, pois oferecem uma grande facilidade de

5

implementação. Um codificador convolucional converte uma sequência inteira de dados, não importando o seu comprimento em uma palavra código, consiste basicamente no mapeamento de uma sequência continua de bits de informação em uma sequência continua de bits de saída do codificador cujo mapeamento é dado pela estrutura algébrica inerente ao codificador. A codificação convolucional, em geral, alcança ganhos de codificação maiores do que os códigos de blocos de igual complexidade. Os códigos convolucionais foram inicialmente estudados por Peter Elias em 1955, ele mostrou que é possível introduzir redundância em uma sequência de dados a partir do uso de um registrador de deslocamento linear (linear shift register) [13]. Em 1961, Wozencraft e Reiffen [14] descreveram o primeiro algoritmo prático de decodificação para os códigos convolucionais, foi um dos primeiros algoritmos que forneceram decodificação rápida, porém subótima, dos códigos convolucionais. Em 1967, Viterbi [15] descobriu uma terceira aproximação para a decodificação dos códigos convolucionais que mostrou ser assintoticamente ótima. Em 1973, Forney [16] [17] mostrou que o algoritmo de Viterbi [15] é realmente de máxima verossimilhança para a decodificação de códigos convolucionais. Um código convolucional é gerado passando-se a sequência de informação através de um registrador de deslocamento associado a algumas funções lógicas. Em geral, o registrador de deslocamento contém estágios de k bits e m geradores de função linear algébrica baseado nos polinômios geradores, Os dados de entrada são deslocados para e ao longo do registrador de deslocamento, bit a bit de cada vez, O número de bits de saída para cada sequência de dados de entrada do usuário de k bits é n bits. A taxa de código é R = k/n. Os estágios são considerados como comprimento de restrição e indica o número de bits de dados de entrada do qual a saída atual depende, este comprimento determina o quanto complexo e eficiente é o código [18]. Devido à utilização de registros deslizantes e a permanente alimentação de bits na

entrada do codificador, existe um atraso associado ao processo de codificação. Estes tipos de códigos possuem memória. Assim, os bits codificados dependem não só dos bits de informação como também da informação armazenada pela memória do código. Na Figura 2.2 temos um exemplo de um codificador convolucional linear de taxa R = ½.

) é aplicada à entrada de um registrador

de deslocamento. A partir dos bits de entrada e dos valores armazenados no registrador cria-se

um par de sequências de dados codificados y (0) = (y 0 (0) , y 1 (0) , y 2 (0) , )

A sequência binária de dados x = (x 0 , x 1 , x 2

y (1)

= (y 0 (1) ,

y 1 (1) ,

e

6

y 2 (1) ,

).

Essas sequências de saídas são multiplexadas para criar uma única sequência de saída

y = (y 0 (0) y 0 (1) , y 1 (0) y 1 (1) , y 2 (0) y 2 (1) ,

),

em que y é a palavra código convolucional. [2].

Após a entrada da sequência x completa no codificador, introduz-se uma sequência de zeros para que no final do processo de codificação o conteúdo do registrador seja nulo. Essa é uma condição necessária para efetuar a decodificação dos códigos convolucionais. Um código convolucional pode ser descrito por uma variedade de métodos, podendo- se destacar o diagrama em treliça e o diagrama de estados. Como a saída do codificador é determinada pela entrada e pelo estado atual do codificador, um diagrama de estados pode ser

usado para representar o processo de codificação. O diagrama de estado é simplesmente um gráfico dos possíveis estados do codificador e das possíveis transições de um estado para o outro [19]. Considere o codificador da Figura 2.2, ele contém três elementos de memória binários

, S 7 }

que assumem coletivamente um entre oito possíveis estados designados por {S 0 , S 1 , S 2 , e associados com o conteúdo dos elementos de memória como podemos ver a seguir.

S 0 → (000) S 1 → (100)

S 2 → (010) S 3 → (110)

S 4 → (001) S 5 → (101)

S 6 → (011) S 7 → (111)

S 5 → (101) S 6 → (011) S 7 → (111) Figura 2.2 - Codificador

Figura 2.2 - Codificador convolucional linear com taxa R = ½

7

Figura 2.3 - Diagrama de estados para o codificador da Figura 2.2. Como se pode

Figura 2.3 - Diagrama de estados para o codificador da Figura 2.2.

Como se pode observar na Figura 2.3, os estados do codificador são representados por círculos, enquanto que as transições de estado, provocadas por cada novo bit de informação, são representadas pelas setas. Assim em cada uma das transições o parâmetro k/n representa através de k o bit de informação que está entrando no registrador enquanto n representa a sequência codificada na saída. Tendo em conta o diagrama de transições e considerando o estado do codificador como sendo o conteúdo dos registros que o compõe pode-se construir uma tabela de transição de estados. A tabela de transição de estados permite relacionar os estados final e inicial do codificador com a informação de entrada e a informação colocada à saída. A Tabela 2.1 apresenta a transição de estados para o codificador da Figura 2.2.

8

Tabela 2.1 - Tabela de transição de estados para o diagrama da Figura 2.3

Estado Inicial (S)

Entrada

Estado Final (S)

Saída

000

(0)

0

000

(0)

00

000

(0)

1

100

(1)

11

100

(1)

0

010

(2)

01

100

(1)

1

110

(3)

10

010

(2)

0

001

(4)

10

010

(2)

1

101

(5)

01

110

(3)

0

011

(6)

11

110

(3)

1

111

(7)

00

001

(4)

0

000

(0)

11

001

(4)

1

100

(1)

00

101

(5)

0

010

(2)

10

101

(5)

1

110

(3)

01

011

(6)

0

001

(4)

01

011

(6)

1

101

(5)

10

111

(7)

0

011

(6)

00

111

(7)

1

111

(7)

11

Alternativamente, o codificador pode ser representado por uma treliça. Este tipo de diagrama permite observar em cada instante todas as transições de estado possíveis, isto é, mostra explicitamente a passagem do tempo. A nomenclatura utilizada é semelhante à já apresentada no diagrama de estados. A treliça do código convolucional referido anteriormente pode ser observada na Figura 2.4.

9

Figura 2.4 - Diagrama em treliça para o codificador da Figura 2.2 . Do ponto

Figura 2.4 - Diagrama em treliça para o codificador da Figura 2.2

.

Do ponto de vista puramente teórico, a melhor forma de decodificar uma sequência recebida com erros é compará-la com cada uma das sequências de codificação possíveis procedendo-se, portanto a um processo de decodificação de máxima verossimilhança [10]. A função do decodificador é estimar a informação de entrada codificada usando um método que resulta no número mínimo possível de erros. Existe uma correspondência um a um entre a sequência de informação e a sequência de código e qualquer par de informação e de código é associado exclusivamente a um caminho através da treliça, com isso a tarefa do decodificador é estimar o caminho que foi seguido pelo codificador na treliça [19]. Existem diversas técnicas para decodificar os códigos convolucionais. O mais importante desses métodos é o algoritmo de Viterbi [15], por ser um decodificador de simples implementação e que realiza a decodificação de máxima verossimilhança [2]. O algoritmo de Viterbi basicamente considera que a decodificação ótima de códigos convolucionais envolve a procura na treliça da sequência transmitida mais provável. Outro decodificador para códigos convolucionais é o algoritmo BCJR [20] baseado em probabilidades a posteriori desenvolvido em 1974 que leva o nome das iniciais de seus criadores Bahl, Cocke, Jelinek e Raviv. Este algoritmo também é conhecido como o algoritmo MAP (maximum a posteriori) ou ainda por “forward-backward algorithm” [21], por ser mais complexo que o algoritmo de Viterbi, durante cerca de vinte anos não foi usado na prática,

10

situação que foi substancialmente alterada com o advento do código turbo em 1993 e com a

atual capacidade de processamento.

Considerando um codificador convolucional de taxa k/n descrito por uma treliça, que

apresente na sua saída uma sequência de N palavras de código, ou símbolos, de n bits cada.

x N , onde x t representa o símbolo produzido pelo

Designemos essa sequência por x = x 1 x 2

codificador no instante t. O bit de informação que nesse instante lhe deu origem, u k , pode

tomar os valores -1 ou +1 com uma probabilidade de ocorrência a priori P(u k ). Associada a

esta probabilidade define-se a quantidade a que se dá o nome de log-razão de

verossimilhança, (LLR - log-likelihood ratio) representado por

.

Se os

bits

u k = ±1

forem equiprováveis esta LLR a priori é nula [21]. Este instante se dá na Equação 2.1.

(2.1)

A sequência codificada x atravessa um canal com ruído gaussiano sem memória (canal

AWGN - additive white gaussian noise) que a transforma numa sequência de símbolos reais y

y N . É esta sequência que o decodificador recebe e a partir dela o algoritmo BCJR vai

= y 1 y 2

tentar estimar a sequência de bits originais u k . Para isso o algoritmo calcula a LLR a posteriori

dado à sequência de saída y, definindo assim um valor real pela Equação 2.2 [21].

(2.2)

O sinal, positivo ou negativo, da LLR, indicia que o bit enviado foi +1 ou -1,

respectivamente, e o seu valor absoluto traduz a maior ou a menor confiança, ou fiabilidade,

que temos nessa presunção, isto é, quanto mais afastado o valor de estiver do limiar

de decisão nulo mais confiança teremos na estimativa do bit, no numerador e no denominador

da Equação 2.2 temos probabilidades condicionais a posteriori, ou seja, probabilidades

calculadas após o conhecimento de y [21].

Falaremos mais detalhadamente sobre este algoritmo de decodificação no capítulo

sobre a decodificação iterativa do código turbo.

11

CAPÍTULO 3

Código turbo

A codificação turbo consiste em duas ideias fundamentais, a primeira é que o codificador produz um código com propriedades aleatórias e a segunda é que o decodificador realiza uma decisão suave com decodificação iterativa. O codificador é composto por dois ou mais codificadores convolucionais e por entrelaçadores, a decodificação de máxima verossimilhança (Viterbi) é muito complexa para ser utilizada neste tipo de codificação,

entretanto, é possível empregar decodificação de entrada e saída suave (SISO - soft-input, soft- output) iterativa em cada código constituinte, tal que a informação de saída suave (informação extrínseca) de um decodificador é passada para o outro, e vice-versa, até uma estimativa sobre a informação transmitida ser obtida. Um diagrama em bloco de estrutura do codificador é ilustrado na Figura 3.1 a sequência

de informações é denotada por u = [u 0 , u 1 ,

codificadores de taxa ½ com 2 2 estados e um entrelaçador denotado por π, de comprimento K. Os primeiros k bits de u são de informação e os restantes são bits de terminação. O polinômio gerador é mostrado na Figura 3.1 (b) [9]. O esquema de codificação da Figura 3.1 é sistemático, então a primeira sequência de paridade é V (0) = u. O primeiro codificador gera a sequência de paridade V (1) . O entrelaçador reordena os k bits de informação, produzindo a sequência de u’ na entrada do segundo

codificador. A sequência de paridade do segundo codificador é V (2) = [V 0 (2) , V 1 (2) ,

Observe que os dois codificadores operam com versões diferentes da sequência de

, u k-1 ]. O esquema básico consiste de dois

,

V k-1 (2) ].

informação, embora esta tenha o mesmo peso. As duas sequências de paridade V (1) e V (2) terão pesos de Hamming [22] distintos. Esse esquema gera a palavra-código V = [V 0 (0) , V 0 (1) ,

V 0 (2) , V 1 (0) , V 1 (1) , V 1 (2) , V 2 (0)

].

12

Figura 3.1 – Diagrama de bloco do codificador turbo sem perfuração de taxa 1/3 Para

Figura 3.1 Diagrama de bloco do codificador turbo sem perfuração de taxa 1/3

Para atingir o desempenho próximo o limite de Shannon [7] o tamanho do bloco de informações deve ser alto, tipicamente u > 1.000, o tamanho do entrelaçador deve ser do mesmo tamanho do bloco de informações, u = K. Para obter probabilidade de erro de bit em

torno de 10 -5 , codificadores com V relativamente curtos podem ser usados, tipicamente V <=

4. Podemos utilizar um esquema de código turbo sem perfuração como na Figura 3.1 onde

se utiliza todas as saídas ou com perfuração onde as saídas geradas pelos códigos convolucionais são utilizadas de maneira alternada, um momento a palavra código terá o

símbolo da saída V (1) , no outro terá o símbolo da saída V (2) como mostra a Figura 3.2, nesse esquema de codificação a palavra-código gerada é V = [V 0 (0) , V 0 (1) , V 1 (0) , V 0 (2) , V 2 (0) , V 1 (1) ,

Dessa maneira utilizamos o mesmo esquema da Figura 3.1 com o

posicionamento de bits alternados de V (1) e V (2) , produzindo assim um código de taxa R = ½.

V 3 (0) ,

V 1 (2)

].

13

Figura 3.2 – Diagrama de bloco do codificador turbo com perfuração de taxa 1/2 Codificadores

Figura 3.2 Diagrama de bloco do codificador turbo com perfuração de taxa 1/2

Codificadores e entrelaçadores adicionais podem ser empregados, produzindo códigos de baixa taxa. Os melhores entrelaçadores reordenam os bits de forma pseudoaleatória. O entrelaçador é parte integrante do esquema de codificação. A complexidade da descrição de estados é muito alta e a decodificação MAP não é simples. Uma decodificação subótima é empregada com cada decodificador componente SISO implementando o algoritmo BCJR [21]. A decodificação pode parar a um número fixo de iterações (usualmente 10 a 20) ou de acordo com um critério de parada baseado na confiabilidade de decisão. Podemos destacar algumas desvantagens para esse tipo de código, como principalmente o elevado atraso de decodificação devido ao tamanho do bloco de informação (udeve ser elevado, tipicamente algumas dezenas de milhar) e às várias iterações necessárias para atingir desempenho próximo à capacidade [23]. Outra desvantagem é a presença de um patamar de erro (error floor), existe um valor mínimo da SNR pelo qual o aumento da SNR além deste valor não acarreta na diminuição significativa da BER, isto é devido ao fato que o código turbo não tem distância mínima elevada, sendo este um parâmetro relevante para determinar o desempenho para SNR elevada. Este patamar pode ser reduzido via projeto do entrelaçador onde os entrelaçadores podem ser projetados para aumentar a distância mínima do código ou através de um código concentrador, ou seja, um código externo pode corrigir erros na saída do esquema do código turbo, a um custo da complexidade [21]. O desempenho de um código turbo está diretamente ligado às distâncias de Hamming entre as sequências de símbolos codificadas. A enumeração destas distâncias com suas

14

respectivas multiplicidades constituem o espectro de distâncias do código. O espectro de

distâncias tem um papel importante na estimativa da probabilidade de erro, como exemplos de

espectro de distâncias pode-se citar o espectro de distâncias de códigos convolucionais

terminados e o espectro de distância de concatenação em paralelo [9], na Tabela 3.1 pode-se

visualizar o peso da distância com sua respectiva multiplicidade para os dois exemplos

citados.

Tabela 3.1 Peso e multiplicidade para o espectro de distância para o código (32,12).

(a) Convolucional Terminado

(b) Concatenação em paralelo

Peso

Multiplicidade

Peso

Multiplicidade

0

1

0

1

1

0

1

0

2

0

2

0

3

0

3

0

4

0

4

0

5

0

5

1

6

11

6

4

7

12

7

8

8

23

8

16

9

38

9

30

10

61

10

73

11

126

11

144

12

200

12

210

13

332

13

308

14

425

14

404

15

502

15

496

16

545

16

571

17

520

17

558

18

491

18

478

19

346

19

352

20

212

20

222

21

132

21

123

22

68

22

64

23

38

23

24

24

11

24

4

25

2

25

4

26

0

26

1

27

0

27

0

28

0

28

0

29

0

29

0

30

0

30

0

31

0

31

0

32

0

32

0

15

Para o espectro de distância de códigos convolucionais terminados considere um código convolucional sistemático recursivo de taxa R = ½ com matriz geradora.

(3.1)

Para codificadores realimentados uma sequência de terminação zero, definida por b, é requerida para retornar o codificador para o estado zero. A taxa do código é R = ½ para u alto. Um exemplo de uma treliça terminada é mostrado na Figura 3.3. Um código convolucional terminado é um código de bloco. Estamos interessados em enumerar o peso de Hamming de todas as 2k - 4 palavras códigos não nula. Para isto devemos enumerar sequências que divergem do caminho todo zero em qualquer tempo. A sequência de informação de comprimento u = 16, incluindo a terminação, geram um código de bloco

(32,12).

Para o espectro de distância de concatenação em paralelo considere o codificador do exemplo anterior com entrada de comprimento u = 16 com k = 12 (bits de informação) e b = 4 (bits de terminação). A sequência de paridade é V (1) .

e b = 4 (bits de terminação). A sequência de paridade é V ( 1 )

Figura 3.3 - Treliça terminada

16

A

sequência de informação é entrelaçada pelo entrelaçador:

K

= [0, 8, 15, 9, 4, 7, 11, 5, 1, 3, 14, 6, 13, 12, 10, 2]

A

nova sequência de informação u’ é:

u’ 0 = u 0 , u’ 1 = u 8 , u’ 2 = u 15 , u’ 3 = u 9 ,

, u’ 15 = u 2

A sequência u’ é a entrada do codificador, produzindo V (2) . Para produzir um código de

taxa R = ½, o código é posicionado descartando-se bits das duas sequências de paridade

alternadamente. O código concatenado em paralelo resultante é (32,12).

O espectro de distância de concatenação em paralelo mostrado na Tabela 3.1 revela um

espectro menos denso nas distâncias pequenas embora o mesmo codificador tenha sido empregado. A alteração do espectro é resultado direto do entrelaçador que permutou os bits de informação para codificá-los novamente. A distância mínima decresceu de 6 para 5, mas o efeito relevante é a redução de multiplicidade dos pesos das palavras código com peso de Hamming entre 6 e 9. Portanto, para o código concatenado em paralelo, existe um deslocamento das multiplicidades das palavras de peso baixo para peso mais elevado. Este efeito é conhecido como spectral thinning, onde palavras código de peso baixo na saída do primeiro codificador estão associadas a palavras de peso alto na saída do segundo codificador. Isto é típico de um esquema concatenado em paralelo com codificadores realimentados. Podemos observar que o spectral thinning tem pouco efeito em distância mínima, mas reduz a multiplicidade das palavras de peso pequeno. Este efeito é mais dramático quando o comprimento do bloco aumenta. Os espectros de um código terminado a um código

concatenado são mostrados na Figura 3.4, para u = 32. O código é (64,28). A distância mínima é igual a 6 nos dois casos e b = 4 (bits de terminação) são usados [9].

17

Figura 3.4 - Ilustração de spectral thinning Para valores de u elevados, os multiplicadores das

Figura 3.4 - Ilustração de spectral thinning

Para valores de u elevados, os multiplicadores das palavras código de peso pequeno são reduzidos por um fator aproximadamente igual a u. Esta redução é referida como ganho de entrelaçamento. O código concatenado em paralelo não é invariante no tempo. Se a sequência de entrada é deslocada no tempo, a saída V (1) é deslocada no tempo, mas a saída V (2) não. O entrelaçador quebra a invariância no tempo, terminando o código variante no tempo. Portanto, se u = D*u, então V (1) = D*V (1) , mas u’ ≠ D*u’ e então, V (2) ≠ D*V (2) com probabilidade alta [8]. Entrelaçador estruturado, como de bloco ou convolucional, não garantem a associação de V (1) de baixo peso com V (2) de alto peso. Um entrelaçador deve quebrar os padrões das sequências de entrada que produzem palavras códigos de baixo peso. Entrelaçadores pseudoaleatório tem esta propriedade e produzem spectral thinning com mais eficiência. Desde que os códigos constituintes são sistemáticos recursivos, pelo menos um bit é requerido na parte de terminação da sequência de informação para retornar o codificador ao estado 0 (zero). Portanto, as palavras códigos não nulas estão associadas com sequência de informações de peso pelo menos 2 (pelo menos 1 bit para partir e outro para retornar para o estado 0 (zero)) [9].

18

Quando os últimos k bits de sequência de informação u são usados para forçar o primeiro codificador retornar ao estado 0 (zero), é provável que o entrelaçador produza uma sequência u’ que termine o segundo codificador no estado 0 (zero). Em geral, o segundo codificador não é terminado. Entrelaçadores pseudoaleatório produzem um espectro de distância com características próximas da distribuição binomial, o que é equivalente à distribuição associada por Shannon na prova do teorema de codificação de canal [7]. Em outras palavras, códigos com distribuição de peso binomial podem atingir o desempenho garantido pelo limitante de Shannon. Em suma, entrelaçadores tem um papel destacado para explicar o bom desempenho do código turbo [7].

3.1 Decodificação iterativa do código turbo

Considere o esquema turbo com dois codificadores com taxa total igual a R = 1/3. O decodificador emprega dois decodificadores iterados em série que implementam o algoritmo recursivo BCJR. Evidências sugerem que o algoritmo iterativo, com troca de informações entre os decodificadores componentes converge para a solução ótima [21]. Em cada instante de tempo, três valores de saída do canal são disponíveis. Uma correspondente ao bit de informação u k na saída V k (0) denotada por r k (0) e outras duas saídas associadas aos bits de paridade V k (1) e V k (2) , denotado por r k (1) e r k (2) . Três sequências recebidas são formadas:

r (0) = (r 0 (0) , r 1 (0) ,

r (1) = (r 0 (1) , r 1 (1) ,

r (2) = (r 0 (2) , r 1 (2) ,

,

,

,

r

r

r

k-1

k-1

k-1

(0)

(1)

(2)

)

)

)

As sequências r (0) e r (1) são as entradas do primeiro decodificador, enquanto r (2) é uma versão entrelaçada de r (0) . As sequências r (2) e r’ (0) são as entradas do segundo decodificador. O entrelaçador é idêntico ao usado no codificador. Dado um vetor recebido r, o algoritmo BCJR calcula as probabilidades a posteriores P(u k = i|r) para formar a razão de log-probabilidade denotado por :

19

(3.2)

A descrição do algoritmo BCJR é complexa, exigindo muitos passos até a sua formulação final, o que foge do escopo deste trabalho. Para maior clareza vamos admitir que estamos transmitindo em um canal AWGN e após algumas simplificações dos referidos passos temos:

(3.3)

Onde, Ʌr é a razão de log-probabilidade de um canal AWGN para transmissão sem codificação com símbolos de informação equiprováveis. A confiabilidade da decisão baseada em r k (0) é proporcional à r k (2) e o fator de probabilidade aumenta linearmente com a SNR.

Denota-se por o fator de confiabilidade do canal.

Na primeira iteração do algoritmo, as entradas do 1º decodificador de vetores r (0) , r (1) é

Ʌ a (1) = [Ʌ a (u 0 ), Ʌ a (u 1 ),

, Ʌ a (u k-1 )], que pode ser feito igual a zero nas primeiras k posições

se os símbolos de informação forem equiprováveis. As saídas suaves do primeiro

decodificador são as razões de log-probabilidade, denotado por Ʌ (1) (u k ):

Ʌ (1) (u k ) = Ʌ a (1) (u k ) + Ʌ r (u k ) + Ʌ e (1) (u k ) ,

k = 0, 1,

K-1

(3.4)

O segundo decodificador calcula Ʌ (2) (u k ) baseado nas sequências de entrada r (2) e r’ (0) . Note que este decodificador tem disponível uma estimativa de probabilidade a posterior de u k calculada pelo primeiro decodificador, Ʌ (1) (u k ). O segundo decodificador pode considerá-la como a razão a priori Ʌ a (2) (u k ). (devidamente entrelaçada). O segundo decodificador calcula:

Ʌ (2) (u k ) = Ʌ (1) (u k ) + Ʌ r (u k ) + Ʌ e (2) (u k )

Ʌ (2) (u k ) = Ʌ a (1) (u k

) + Ʌ r (u k ) + Ʌ e (1) (u k ) + Ʌ r (u k ) + Ʌ e (2) (u k )

(3.5)

A Equação 3.5 revela que ao passar Ʌ a (1) (u k ) para o segundo decodificador, a estimativa prévia de Ʌ a (1) (u k ) também é passada, o que é desnecessário. Adicionalmente, quando o

20

decodificador continuar a iterar a razão Ʌ r (u k ) será acumulada e a contribuição de r k (1) será enfatizada. Portanto, apenas a informação extrínseca Ʌ e (1) (u k ) = Ʌ (1) (u k ) + Ʌ a (1) (u k ) + Ʌ r (u k ) (devidamente entrelaçado) é passada para o segundo decodificador. Esta subtração remove o efeito de r k (0) (sequência recebida sistemática de Ʌ (1) (u k ), deixando apenas o efeito dos símbolos de paridade recebida produzir uma estimativa independente de Ʌ a (2) (u k )). Como a entrada do segundo decodificador inclui uma versão entrelaçada de r (0) este está correlacionada com a saída suave do primeiro decodificador Ʌ (1) (u k ). a contribuição devida a r k (0) deve ser retirada de Ʌ (1) (u k ) para eliminar a correlação. A saída do segundo decodificador contém 2 termos:

1 – Ʌ (2) (u k ) = Ʌ e (1) (u k ) + Ʌ r (u k ) + Ʌ e (2) (u k ) 2 – A informação extrínseca Ʌ a (2) (u k ) = Ʌ (2) (u k ) - Ʌ e (1) (u k ) - Ʌ r (u k ) produzida pelo segundo decodificador, após desentrelaçar, é passada para o decodificador 1 como a razão de log-probabilidade a priori Ʌ a (1) (u k ).

Portanto, a informação extrínseca que é passada de um decodificador para outro durante o processo iterativo é tratada como novos conjuntos de razão de log-probabilidade a priori pelo algoritmo MAP. A Figura 3.5 ilustra o diagrama em blocos do decodificador. A decodificação é então processada iterativamente com cada decodificador passando a sua informação extrínseca para o outro decodificador. Os decodificadores SISO refinam a confiabilidade dos símbolos de informação a cada iteração. A razão de log-probabilidade a priori do segundo decodificador é a informação extrínseca do primeiro (entrelaçada):

Ʌ a (2) (u k ) = Ʌ e (1) (u k )

21

(3.6)

Figura 3.5 - Um decodificador iterativo código turbo baseado no algoritmo MAP As probabilidades a

Figura 3.5 - Um decodificador iterativo código turbo baseado no algoritmo MAP

As probabilidades a priori, que são as informações de entrada de cada iteração e são a partir de informações extrínseca passada pelo outro decodificador:

(3.7)

Então, as probabilidades a priori são dadas por:

22

(3.8)

(3.9)

Análise similar é válida para as probabilidades a priori do codificador 1. Estas probabilidades são usadas na probabilidade de transição de estados do algoritmo BCJR. A informação extrínseca Ʌ e (1) (u k ) passada pelos decodificadores durante a primeira iteração é independente de u k , mas isto é unidade para iterações subsequentes. Então, a

informação extrínseca torna-se menos importante para obter estimativas mais confiáveis dos símbolos de informação nas demais iterações. Após um número suficiente de iterações, o aumento da confiabilidade não é possível e a decisão final é realizada comparando a razão

log-probabilidade do segundo decodificador, Ʌ (2) (u k ), k = 0, 1,

A eficácia desta técnica pode ser vista na Figura 3.6 que mostra o desempenho do código turbo original tendo o número de iterações como parâmetro, para K = 2 16 = 65.536 bits. O desempenho melhora até 18 iterações.

, K-1 com o limiar 0 (zero).

melhora até 18 iterações. , K-1 com o limiar 0 (zero). Figura 3.6 - Desempenho do

Figura 3.6 - Desempenho do Código Turbo (37, 21, 65536) em função do número de iterações do decodificador.

23

3.2

Propriedades de distribuição de pesos do código turbo

O espectro de distância de um código turbo depende do entrelaçador escolhido. Para

evitar uma busca exaustiva do melhor espectro para todos os possíveis entrelaçadores,

introduziremos o conceito de entrelaçador uniforme.

Um entrelaçador uniforme de comprimento K é um dispositivo probabilístico que

mapeia uma sequência de entrada de peso w em todas as permutações distintas com igual

probabilidade

[9]. Calcularemos um espectro de distância médio (sobre todos os possíveis

entrelaçadores). Este espectro médio é típico de um espectro obtido por um entrelaçador

escolhido de forma aleatória. Considere um código conforme a Tabela 3.2.

Tabela 3.2 - Código de Hamming (7,4,3) sistemático

Informação

Paridade

Peso de Hamming da palavra código

0

0

0

0

0

0

0

0

1

0

0

0

1

0

1

3

0

1

0

0

1

1

0

3

1

1

0

0

0

1

1

4

0

0

1

0

0

1

1

3

1

0

1

0

1

1

0

4

0

1

1

0

1

0

1

4

1

1

1

0

0

0

0

3

0

0

0

1

1

1

1

4

1

0

0

1

0

1

0

3

0

1

0

1

0

0

1

3

1

1

0

1

1

0

0

4

0

0

1

1

1

0

0

3

1

0

1

1

0

0

1

4

0

1

1

1

0

1

0

4

1

1

1

1

1

1

1

7

24

A função enumeradora dos pesos (WEF - weight enumeration function) é dada por:

(3.10)

Onde A d é o número de palavras código (não nulas) com peso de Hamming “d”, ou seja, é o número de palavras código com distância de Hamming “d” em relação à palavra toda nula. Para o código de Hamming (7,4,3) sistemático acima temos:

A(x) = 7x 3 + 7x 4 + x 7

(3.11)

Isto é 7 palavras código tem peso de Hamming 3, 7 palavras código tem peso de Hamming 4 e 1 palavra código com peso de Hamming 7. Para um código sistemático, cada palavra código é composta de k símbolos de informação e (u-k) símbolos de paridade. O peso de Hamming da palavra código é a soma dos pesos de Hamming destas duas porções. É conveniente enumerar o peso de Hamming de um código dividindo a contribuição dos símbolos de informação e dos símbolos de paridade. A função enumeradora condicionada no peso (CWEF - conditional weight enumerating function) é definida na forma:

(3.12)

A w (z) enumera o peso de Hamming z na porção de paridade de todas as palavras código (não nulas) com peso de w na porção de informação. Desta forma:

25

(3.13)

Para o código de Hamming (7,4,3), a Equação 3.13, torna-se:

 

A(w,z) = wA 1 (z) + w 2 A 2 (z) + w 3 A 3 (z) + w 4 A 4 (z)

(3.14)

Onde:

 

A 1 (z) = 3z 2 + z 3

(3.15)

A 2 (z) = 3z + 3z 2

(3.16)

A 3 (z) = 1 + 3z

(3.17)

A 4 (z) = z 3

(3.18)

A Figura 3.7 ilustra um dos codificadores convolucionais constituinte do esquema turbo e seu respectivo diagrama de estados com os rótulos indicando os pesos de Hamming da informação (w) e paridade (z). A partir deste diagrama de estados retira-se a enumeração CWEF i , com i=1,2, de cada codificador em separado (que em geral são idênticos). Para compor a CWEF TC do esquema turbo, multiplica-se as WEFs dos codificadores e

divide-se pelo efeito médio do entrelaçador o que leva a CWEF TC média do turbo dada

por:

(3.19)

Esta expressão da CWEF média do esquema turbo é utilizada na análise de desempenho para a estimativa da BER conforme veremos no próximo capítulo.

26

Figura 3.7 - Diagrama do codificador e diagrama do estado para um código (2,1,2). O

Figura 3.7 - Diagrama do codificador e diagrama do estado para um código (2,1,2).

O ganho de entrelaçamento reduz as multiplicidades de palavras de baixo peso, produzindo um desempenho excepcional para SNR's baixas ou moderadas. Como o turbo tipicamente não tem distâncias mínimas elevadas o desempenho é mais fraco para SNR elevada. Note que a CWEF média para um entrelaçador uniforme resulta em dividir o produto

da CWEF de um código constituinte por fator . Desde que não existe sequências de

entrada com peso w = 1 para um codificador sistemático com realimentação, o menor fator de

divisão será para sequência de entrada com w = 2. Para w = 3, este fator será , que é o

maior par em fator aproximadamente igual a K. Para valores de K elevados, as palavras código com peso w = 2 são as contribuições mais importantes para as palavras de peso baixo do codificador turbo.

27

CAPÍTULO 4

Análise de desempenho do código turbo

Nesta seção usaremos a técnica do limitante da união para estimar o desempenho de códigos turbo em canais AWGN com decodificação de máxima verossimilhança. Para um

entrelaçador de comprimento K, existem 2 k palavras código distintas. A sequência de sinal transmitido para a sequência toda zero em um canal AWGN normalizado com modulação

, -1). A sequência recebida para n-1

r k-1 (n-1) ) é composto de

. Para facilitar a

codificadores constituintes é: r = (r 0 (0)

BPSK (binary phase shift keying) é dada por v 0 = (-1, -1,

r 0 (n-1) , r 1 (0)

r

1 (n-1) ,

,

r

k-1 (0)

nk variáveis aleatórias Gaussianas independentes de média -1 e variância

notação adotaremos r = (r 0

O decodificador realiza a correlação de r com cada sequência transmitida e decodifica a que gerar a máxima correlação. A probabilidade de uma sequência especifica v' com peso de Hamming d ser escolhida ao invés de v 0 dado que v 0 foi transmitida. Se v k é a k-ésima palavra código, a probabilidade que uma palavra código seja

codificada erroneamente é limitada por:

r nk-1 ).

(4.1)

(4.2)

Onde A d é o número de palavras código com peso de Hamming “d”,

é a SNR

do sistema e Q(.) é a bem conhecida função da cauda Gaussiana. A probabilidade média de erro de bit dado v 0 é dada por:

28

Defina a variável aleatória como:

Então:

X j = 1,

se P(µ j

Y j = 0,

se P(µ j =

j

j

)

)

(4.3)

(4.4)

(4.5)

(4.6)

Onde M b é uma variável aleatória que descreve o número de bits em que b 0

diferem. Dado que v 0 foi transmitido:

(4.7)

(4.8)

(4.9)

b k-1 e

Onde w i é o peso da i-ésima sequência de informação e o d i o peso da i palavra código. Combinando (x) com (y) gera:

29

(4.10)

Podemos reescrever a Equação 4.10 da seguinte forma:

(4.11)

Onde A w,d é o número de palavras código com peso de Hamming “d” gerados por todas as sequências de entrada de peso w. Definir:

 

(4.12)

Então:

 

(4.13)

Resumindo para o canal AWGN, temos:

 

(4.14)

(4.15)

Usando o limitante:

 

(4.16)

30

Obtemos os limitantes menos apertados:

 

(4.17)

(4.18)

(4.19)

Definindo a função:

 

(4.20)

Escrevemos:

 

(4.21)

Gerando os seguintes limitantes:

 

(4.22)

(4.23)

Então:

 

(4.24)

31

De forma análoga:

Esses limitantes diferem do anterior por um fator de escala

(4.25)

, que depende da

distância livre do código. Como exemplo vamos considerar um PCCC (parallel concatenated convolutional code) de taxa R = 1/3 gerado por um codificador sistemático visto anteriormente. Aproximações para bit e palavra código WEF são dada por:

(4.26)

(4.27)

A distância mínima é d free = 7 (deve se d free = 10 para vários entrelaçadores. Mas devemos usar a menor possível para avaliar o limitante). Os limitantes P w e P b usando as WEF's acima são mostrados nas Figuras 4.1, para K = 100, 1.000 e 10.000. É mostrado simulações de um código convolucional com 16 entradas (mesma complexidade do PCCC). A simulação do PCCC é para K = 10.000, com entrelaçamento pseudoaleatório e 18 iterações.

32

Figura 4.1 - Curvas para um PCCC e um Código Convolucional com R = 1/3.

Figura 4.1 - Curvas para um PCCC e um Código Convolucional com R = 1/3. (a) Palavra código (b) Probabilidade de erro de bit

33

A Figura 4.1 (b) claramente indica o ganho do entrelaçamento. Quando K aumenta de

um fator de 10, P b melhora do mesmo fator. O ganho de codificação (diferente de na curva

P b fixo) diminui com o aumento de

.

O Pw converge para o mesmo valor quando K aumenta, porque o número de palavras de

peso 10 não decresce com K. Para o código convolucional o desempenho piora com K visto que pelo menos 1 evento erro torna-se muito provável quando K aumenta (A d ´s crescem linearmente com K). No PCCC o entrelaçador não permite este efeito. Para P b = 10 -5 , o PCCC com K = 10.000 tem ganho de codificação de 3,8dB mesmo com d free = 12.

limitante da união não é bom para < 2dB. Este é preciso para SNR elevado. Outra

O

metodologia deve ser empregada para melhorar o limitante para

baixa.

4.1

Simulação

Em 1993 Berrou, Glavieux e Thitimajshima [24] demonstraram através de resultados de simulações que uma relação sinal-ruído de 0,7dB era suficiente para garantir uma probabilidade de erro de bit de 10 -5 através do uso de um código de taxa R= ½ num canal AWGN. Nesta seção demonstra-se os resultados de uma simulação do código turbo (37,21), onde como principal característica temos a importância do entrelaçador na codificação e decodificação dos sinal transmitido para conseguir atingir o resultado próximo ao da simulação de 1993. Para simular o desempenho dos códigos turbo foi utilizado o software Matlab e um simulador desenvolvido pelo Departamento de Engenharia Elétrica e Computacional da Universidade de Bradley nos Estados Unidos. O simulador foi desenvolvido utilizando as ferramentas do Simulink para código turbo, o esquema de blocos do simulador pode ser visto na Figura 4.2. Abaixo segue o programa para gerar os gráficos no Matlab, no programa podemos alterar parâmetros como tamanho do entrelaçador, a quantidade de iterações, a potência do sinal e a matriz geradora do código.

34

MaxdB = 6.0; EbNo_incr = 0.5; No_pts = MaxdB/EbNo_incr;

% número de iterações.

Iter = 4;

%trellis = poly2trellis(3, [7 5],7); trellis = poly2trellis(5, [37 21],37); code_rate = 1/3; multiplier = 1/code_rate;% multiplier = symbol_period/sample_time

% tamanho do entrelaçador.

for numero = 20:20:100, Len = numero*1024; Turbo_Pb = zeros(Iter,No_pts); Seed = 54123; Ps = 1; % potência do sinal

for i = 1:No_pts+1, EbNodB = EbNo_incr*(i-1); EbNo = 10.0.^(0.1*EbNodB); EsNo = EbNo/code_rate; Variance = Ps*multiplier/EsNo; %Calcula a variância do ruído do canal. sim('turbo_code_no_punc_multiple_run'); % Aciona o SIMULINK. Turbo_Pb(:, i) = bit_error_rate.signals.values(:,:,4); end

% gráficos

x_index = (0:No_pts)*EbNo_incr; figure for i = 1:Iter, semilogy(x_index,Turbo_Pb(i,:),'r.-'); hold on; end grid, xlabel('Eb/No em dB'), ylabel('BER') title('Turbo code (não-puncionado)') end

35

Figura 4.2 – Modelo do simulador do código turbo A simulação consiste em passar um

Figura 4.2 Modelo do simulador do código turbo

A simulação consiste em passar um bloco de informações binárias geradas aleatoriamente por um canal AWGN utilizando o código turbo (37,21) com taxa R = 1/3 na codificação de canal e calcular a taxa de erro de bit da transmissão no receptor. Na primeira simulação o código turbo utilizado foi o não perfurado, na Figura 4.3 podemos ver o esquema desse código.

na Figura 4.3 podemos ver o esquema desse código. Figura 4.3 – Modelo do codificador turbo

Figura 4.3 Modelo do codificador turbo não perfurado.

36

Foram gerados quatro gráficos para esse modelo de código variando entre eles o tamanho do entrelaçador e a quantidade de iterações. Nos gráficos da Figura 4.4 e 4.5 temos o mesmo tamanho de entrelaçador variando apenas a quantidade de iterações, podemos visualizar nos dois gráficos o aparecimento do error floor.

nos dois gráficos o aparecimento do error floor . Figura 4.4 – Gráfico da simulação do

Figura 4.4 Gráfico da simulação do código turbo não perfurado de taxa R = 1/3 com 4 iterações e entrelaçador 20 x 1024.

de taxa R = 1/3 com 4 iterações e entrelaçador 20 x 1024. Figura 4.5 –

Figura 4.5 Gráfico da simulação do código turbo não perfurado de taxa R = 1/3 com 6 iterações e entrelaçador 20 x 1024.

37

Figura 4.6 – Gráfico da simulação do código turbo não perfurado de taxa R =

Figura 4.6 Gráfico da simulação do código turbo não perfurado de taxa R = 1/3 com 4 iterações e entrelaçador 100 x 1024.

taxa R = 1/3 com 4 iterações e entrelaçador 100 x 1024. Figura 4.7 – Gráfico

Figura 4.7 Gráfico da simulação do código turbo não perfurado de taxa R = 1/3 com 6 iterações e entrelaçador 100 x 1024.

38

Nos gráficos das Figuras 4.6 e 4.7 alteramos o tamanho do entrelaçador com isso podemos visualizar claramente a importância do entrelaçador para a codificação turbo, onde com o aumento do entrelaçador a taxa do BER ultrapassou a faixa de 10 -5 chegando a uma taxa de quase 10 -6 com uma SNR de 1dB. Não temos mais o aparecimento do error floor e uma diferença considerável de ganho com o aumento de quatro para seis iterações, porém se tem uma desvantagem, o aumento de cálculos exigindo um processamento mais demorado. Para compensar o aumento desse processamento devido ao tamanho do entrelaçador utilizamos o modelo perfurado do código turbo, na Figura 4.8 podemos ver o esquema desse código. A perfuração como já foi discutido transformar um código de taxa R = 1/3 para um código de taxa R = ½ , com isso diminui de forma considerável a quantidade de cálculos.

diminui de forma considerável a quantidade de cálculos. Figura 4.8 – Modelo do codificador turbo perfurado.

Figura 4.8 Modelo do codificador turbo perfurado.

Para o codificador perfurado fora gerados mais quatro gráficos também variando entre eles o tamanho do entrelaçador e a quantidade de iterações. Nos gráficos da Figura 4.9 e 4.10 temos o mesmo tamanho de entrelaçador variando apenas a quantidade de iterações, e nos gráficos das Figuras 4.11 e 4.12 aumentamos o entrelaçador, comprovando mais uma vez a importância do entrelaçador para a eficiência do código turbo. Ao compararmos os gráficos do código não perfurado com o perfurado percebemos que apesar dos códigos perfurados necessitar de menos processamento, perde um pouco em eficiência, pois os codificador não perfurado consegue atingir o nível de um BER 10 -5 com um SNR de 1dB, já o perfurado atinge o mesmo valor de BER mas com o SNR acima de 2dB, uma diferença de fundamental para escolha correta do código ao se desenvolver projetos.

39

Figura 4.9 – Gráfico da simulação do código turbo perfurado de taxa R = ½

Figura 4.9 Gráfico da simulação do código turbo perfurado de taxa R = ½ com 4 iterações e entrelaçador 20 x 1024.

de taxa R = ½ com 4 iterações e entrelaçador 20 x 1024. Figura 4.10 –

Figura 4.10 Gráfico da simulação do código turbo perfurado de taxa R = ½ com 6 iterações e entrelaçador 20 x 1024.

40

Figura 4.11 – Gráfico da simulação do código turbo perfurado de taxa R = ½

Figura 4.11 Gráfico da simulação do código turbo perfurado de taxa R = ½ com 4 iterações e entrelaçador 100 x 1024.

de taxa R = ½ com 4 iterações e entrelaçador 100 x 1024. Figura 4.12 –

Figura 4.12 Gráfico da simulação do código turbo perfurado de taxa R = ½ com 6 iterações e entrelaçador 100 x 1024.

41

CAPÍTULO 5

Conclusão

Este trabalho teve como objetivo descrever de forma minuciosa o código turbo com suas principais características. Através de simulações realizadas com o software Matlab foi possível verificar seu desempenho bem como sua fundamental importância como código detector e corretor de erro para o avanço de uma transmissão digital robusta e confiável. Podemos analisar que no atual estágio tecnológico das transmissões digitais, muitas vezes para um mínimo ganho é necessário um aumento considerável de complexidade dos sistemas, este aumento se torna aceitável principalmente por se tratar de sistemas que podem chegar perto do limite teórico de Shannon. Alguns sistemas de TV digital que ainda não utilizam os sistemas com códigos turbo podem ainda ser aperfeiçoados através de técnicas de correção de erro com realimentação de informação. Pesquisadores já detectaram que o uso de configurações com codificadores turbo nesses sistemas de tem um melhor desempenho, alem de uma proposta inovadora de concatenação de codificadores para sistemas de TV digital. Por se tratar de um sistema eficiente do ponto de vista computacional e que pode ser utilizado com diversas formas de modulações e variado comprimentos de entrelaçadores, várias pesquisas já estão sendo realizadas para que o sistema turbo trabalhe juntos com outras técnicas para tornar a transmissão ainda mais robusta e confiável, como exemplo o uso de codificadores turbo com transmissão em múltiplas antenas, técnica conhecida como MIMO (multiple input, multiple output), e o desenvolvimento dos códigos RS-Turbo para equipamentos móveis confirmando a tendência de migração dos futuros padrões para o uso dos algoritmos com decodificação iterativa.

42

REFERÊNCIAS

[1] M. A. da Câmara e A. O. Souza, “Códigos Corretores de Erros Lineares”, Minas Gerais:

FAMAT em Revista, n. 6, mai, 2006.

[2] M. S. Alencar, “Televisão Digital”, 1 a ed. São Paulo: Editora Érica, 2007.

[3] C. P. Milies, “Breve introdução à teoria dos códigos corretores de erros”, Mato Grosso do Sul: Departamento de Matemática, UFMS, 2009.

[4] C. Berrou and A. Glavieux, Near optimun error correcting coding and decoding: Turbo- code”, Estados Unidos: IEEE Transactions on Communiations, vol. 44, n. 10, out, 1996.

[5] M. S. de Souza, “Codificação de imagens utilizando turbo quantização codificada por treliças”, Rio de Janeiro: UFRJ, 2005.

[6] C. Berrou and A. Glavieux, Reflections on the Prize paper: "Near optimum error correcting coding and decoding: Turbo codes", “IEEE IT Society Newsletter”, Vol. 48, N° 2, June 1998.

[7]

C.

E.

Sahnnon

and

W.

Weaver,

The

Mathematical

Theory

of

Communication”,

Illinois: Illini Books, 1949. 117 p. Library of Congress Catalog Card nº 49-11922.

[8] F. L. Garcia, “Implementação de um Codificador LDCP para um sistema de TV Digital usando ferramentas de prototipagem rápida”, São Paulo: Dissertação (mestrado). Universidade Estadual de Campinas. UNICAMP, 2006.

[9] D. J. C. Junior e S. Lin, “Error control coding: Fundamentals and applications”, 2. ed. New Jersey: Pearson Prentice Hall, 2003.

[10] D. G. Caetano, “Análise de Desempemho de Sistemas de TV Digital Móvel DVB-H e ISDB-T utilizando Concatenação de Códigos BCH e Turbo Codificadores”, Campinas:

Dissertação (mestrado). Universidade Estadual de Campinas. UNICAMP, 2007

[11] S. Haykin, Sistemas de comunicação: analógicos e digitais”, 4. ed. Porto Alegre:

Bookman, 2004.

[12] S. Haykin e M. Moher Introdução aos sistemas de comunicação”, 2. ed. Porto Alegre:

Bookman, 2008.

[13] P. Elias, “Coding for Noisy Channels”, IRE Conv. Rec., vol. 3, parte 4, pp.37-46, Março de 1955.

[14] J. M. Wozencraft e B. Reiffen, Sequential Decoding, MIT Press, 1961.

43

[15] A. J. Viterbi, “Convolutional Codes and Their Performance in Communication Systems”, IEEE Transactions on Communications Technology, vol. COM-19, nº 5, pp. 751-772, Outubro de 1971.

[16] G. D. Forney Jr., “Maximum-Likelihood Sequence Estimation of Digital Sequences in the Presence of Intersymbol Interference”, IEEE Transactions on Information Theory, vol. IT-18, pp. 363-378, Maio de 1972.

[17]

G.

D.

Forney

Jr.,

“Convolutional

Codes

II:

Maximum-Likelihood

Decoding”,

Information and Control, vol. 25, pp. 222-226, Julho de 1974.

[18] D. G. Caetano, Y. Iano e R. Arthur, ”Performance Comparison of Convolutional and Turbo Convolutional Codes for ISDB-T in AWG and Brazilian Channels”, Fortaleza:

ITS2006 International Telecommunications Symposium, 2006.

[19] T. S. Rappaport, “Comunicações sem fio. Princípios e práticas”, 2. ed. São Paulo:

Editora Pretence Hall, 2002.

[20] L. R. Bahl, J. Cocke, F. Jelinek e J. Raviv, “Optimal decoding of linear codes for minimizing symbol error rate”, IEEE Transactions on Information Theory, vol. IT-20, pp. 284-287, Março de 1974.

[21] A. S. Abrantes, “Do algoritmo BCJR à decodificação turbo.”, FEUP, Abril 2004.

[22] R. W. Hamming, “Error Detecting and Error Correcting Codes”, Bell System Technical Journal, vol. 29, pp.147-160, Abril de 1950.

[23] T. J. P. Martins, Turbo decodificadores de baixa potencia para comunicação digital sem fio, Tese de Mestrado, USP, 2004.

[24] C. Berrou, A. Glavieux e P. Thitimajshima, “Near Shannon Limit Error-Correcting Coding and Decoding: Turbo Codes”, IEEE International Conference on Communications (ICC ’93), pp. 1064-1070, Genebra, Suíça, Maio de 1993.

44