• Nenhum resultado encontrado

Código Turbo

N/A
N/A
Protected

Academic year: 2021

Share "Código Turbo"

Copied!
55
0
0

Texto

(1)

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

(2)

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: Luiz Guedes Caldeira

(3)

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: ____ / _____ / 2012

BANCA EXAMINADORA

Professor Luiz Guedes Caldeira, Dr. Orientador

Professor Erick Silva, MSc. Membro da Banca

Professora Késia Santos, MSc. Membro da Banca

(4)

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.

(5)

i

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.

(6)

ii

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.

(7)

iii

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

(8)

iv

LISTA DE FIGURAS

Figura 2.1 - Etapas do processo da transmissão de um sinal digital. ... 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 ... 13

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

Figura 3.3 - Treliça terminada ... 16

Figura 3.4 - Ilustração de spectral thinning ... 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 decodificador. ... 23

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

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

Figura 4.2 – Modelo do simulador do código turbo ... 36

Figura 4.3 – Modelo do codificador turbo não perfurado. ... 36

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. ... 37

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 = 1/3 com 4 iterações e entrelaçador 100 x 1024. ... 38

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

Figura 4.8 – Modelo do codificador turbo não perfurado. ... 39

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. ... 40

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

(9)

v

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. ... 41 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

(10)

vi

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

(11)

vii

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

(12)

1

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

(13)

2

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

(14)

3

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.

(15)

4

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.

(16)

5

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

(17)

6

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 = ½.

A sequência binária de dados x = (x0, x1, x2...) é 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) = (y0(0), y1(0), y2(0),...) e y(1) = (y0(1), y1(1),

(18)

7

y2(1),...). Essas sequências de saídas são multiplexadas para criar uma única sequência de saída

y = (y0(0) y0(1), y1(0) y1(1), y2(0) y2(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 que assumem coletivamente um entre oito possíveis estados designados por {S0, S1, S2, ..., S7}

e associados com o conteúdo dos elementos de memória como podemos ver a seguir.

S0 → (000) S2 → (010) S4 → (001) S6 → (011)

S1 → (100) S3 → (110) S5 → (101) S7 → (111)

(19)

8

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.

(20)

9

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.

(21)

10

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,

(22)

11

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. Designemos essa sequência por x = x1x2...xN, onde xt representa o símbolo produzido pelo

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

= y1y2...yN. É esta sequência que o decodificador recebe e a partir dela o algoritmo BCJR vai

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.

(23)

12

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 - 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 = [u0, u1, ..., uk-1]. O esquema básico consiste de dois

codificadores de taxa ½ com 22 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) = [V0(2), V1(2),..., Vk-1(2)].

Observe que os dois codificadores operam com versões diferentes da sequência de 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 = [V0(0), V0(1),

(24)

13

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 = [V0(0), V0(1), V1(0), V0(2), V2(0), V1(1),

V3(0), V1(2)...]. Dessa maneira utilizamos o mesmo esquema da Figura 3.1 com o

(25)

14

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 (“u” deve 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

(26)

15

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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1 0 0 0 0 0 11 12 23 38 61 126 200 332 425 502 545 520 491 346 212 132 68 38 11 2 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1 0 0 0 0 1 4 8 16 30 73 144 210 308 404 496 571 558 478 352 222 123 64 24 4 4 1 0 0 0 0 0 0

(27)

16

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).

(28)

17

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 = u0, u’1 = u8, u’2 = u15, u’3 = u9, ...., u’15 = u2

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].

(29)

18

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].

(30)

19

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 uk na saída Vk(0) denotada por rk(0) e outras

duas saídas associadas aos bits de paridade Vk(1) e Vk(2), denotado por rk(1) e rk(2). Três

sequências recebidas são formadas:

r(0) = (r0(0), r1(0), ...., rk-1(0))

r(1) = (r0(1), r1(1), ...., rk-1(1))

r(2) = (r0(2), r1(2), ...., rk-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(uk = i|r) para formar a razão de log-probabilidade denotado por :

(31)

20

(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 rk(0) é proporcional à rk(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(u0), Ʌa(u1), ...., Ʌa(uk-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)(uk):

Ʌ(1)

(uk) = Ʌa(1)(uk) + Ʌr(uk) + Ʌe(1)(uk) , k = 0, 1, .... K-1 (3.4)

O segundo decodificador calcula Ʌ(2)

(uk) 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 uk

calculada pelo primeiro decodificador, Ʌ(1)(uk). O segundo decodificador pode considerá-la

como a razão a priori Ʌa(2)(uk). (devidamente entrelaçada). O segundo decodificador calcula:

Ʌ(2)

(uk) = Ʌ(1)(uk) + Ʌr(uk) + Ʌe(2)(uk)

Ʌ(2)

(uk) = Ʌa(1)(uk) + Ʌr(uk) + Ʌe(1)(uk) + Ʌr(uk) + Ʌe(2)(uk)

(3.5)

A Equação 3.5 revela que ao passar Ʌa(1)(uk) para o segundo decodificador, a estimativa

(32)

21

decodificador continuar a iterar a razão Ʌr(uk) será acumulada e a contribuição de rk(1) será

enfatizada. Portanto, apenas a informação extrínseca Ʌe(1)(uk) = Ʌ(1)(uk) + Ʌa(1)(uk) + Ʌr(uk)

(devidamente entrelaçado) é passada para o segundo decodificador. Esta subtração remove o efeito de rk(0) (sequência recebida sistemática de Ʌ(1)(uk), deixando apenas o efeito dos

símbolos de paridade recebida produzir uma estimativa independente de Ʌa(2)(uk)). 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)(uk). a contribuição devida a

rk(0) deve ser retirada de Ʌ(1)(uk) para eliminar a correlação.

A saída do segundo decodificador contém 2 termos:

1 – Ʌ(2)(uk) = Ʌe(1)(uk) + Ʌr(uk) + Ʌe(2)(uk)

2 – A informação extrínseca Ʌa(2)(uk) = Ʌ(2)(uk) - Ʌe(1)(uk) - Ʌr(uk) produzida pelo

segundo decodificador, após desentrelaçar, é passada para o decodificador 1 como a razão de log-probabilidade a priori Ʌa(1)(uk).

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):

(33)

22

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:

(3.8) (3.9)

(34)

23

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)(uk) passada pelos decodificadores durante a primeira

iteração é independente de uk , 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)(uk), k = 0, 1, ..., K-1 com o limiar 0 (zero).

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 = 216 = 65.536 bits. O desempenho melhora até 18 iterações.

(35)

24

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 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 1 1 1 0 3 3 4 3 4 4 3 4 3 3 4 3 4 4 7

(36)

25

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

(3.10)

Onde Ad é 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) = 7x3 + 7x4 + x7 (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)

Aw(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:

(37)

26

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

A(w,z) = wA1(z) + w2A2(z) + w3A3(z) + w4A4(z) (3.14) Onde: A1(z) = 3z2 + z3 (3.15) A2(z) = 3z + 3z2 (3.16) A3(z) = 1 + 3z (3.17) A4(z) = z3 (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 CWEFi , com i=1,2, de cada codificador em separado (que em geral são idênticos).

Para compor a CWEFTC do esquema turbo, multiplica-se as WEF’s dos codificadores e divide-se pelo efeito médio do entrelaçador o que leva a CWEFTC

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.

(38)

27

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.

(39)

28

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 2k palavras código distintas. A sequência de sinal transmitido para a sequência toda zero em um canal AWGN normalizado com modulação BPSK (binary phase shift keying) é dada por v0 = (-1, -1, .., -1). A sequência recebida para n-1 codificadores constituintes é: r = (r0(0)... r0(n-1), r1(0) ... r1(n-1), ..., rk-1(0) ... rk-1(n-1)) é composto de

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

. Para facilitar a

notação adotaremos r = (r0 ... rnk-1).

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 v0 dado que v0 foi transmitida.

Se vk é a k-ésima palavra código, a probabilidade que uma palavra código seja codificada erroneamente é limitada por:

(4.1) (4.2)

Onde Ad é 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 v0 é dada por:

(40)

29

(4.3)

Defina a variável aleatória como:

Xj = 1, se P(µj ≠ j) (4.4) Yj = 0, se P(µj = j) (4.5) Então: (4.6)

Onde Mb é uma variável aleatória que descreve o número de bits em que b0... bk-1 e

diferem. Dado que v0 foi transmitido:

(4.7) (4.8) (4.9)

Onde wi é o peso da i-ésima sequência de informação e o di o peso da i palavra código.

Combinando (x) com (y) gera:

(41)

30

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

(4.11)

Onde Aw,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)

(42)

31

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)

(43)

32

De forma análoga:

(4.25)

Esses limitantes diferem do anterior por um fator de escala , 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 é dfree = 7 (deve se dfree = 10 para vários entrelaçadores. Mas

devemos usar a menor possível para avaliar o limitante).

Os limitantes Pw e Pb 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.

(44)

33

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

(45)

34

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

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

Pb 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 (Ad´s crescem

linearmente com K). No PCCC o entrelaçador não permite este efeito. Para Pb = 10-5, o PCCC

com K = 10.000 tem ganho de codificação de 3,8dB mesmo com dfree = 12.

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

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.

(46)

35 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)')

(47)

36

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.

Figura 4.2 – Modelo do simulador do código turbo

(48)

37

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.

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.

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.

(49)

38

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.

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.

(50)

39

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.

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.

(51)

40

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.

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.

(52)

41

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.

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.

(53)

42

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.

(54)

43

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”, 1a

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.

(55)

44

[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

Referências

Documentos relacionados