Sie sind auf Seite 1von 68

UNIVERSIDADE FEDERAL DO AMAZONAS FACULDADE DE TECNOLOGIA ESPECIALIZAO EM TELEVISO DIGITAL

PROJETO DE UM CODEC TURBO EM MATLAB

JOS MARIA AMORAS PESSOA

MANAUS 2011

UNIVERSIDADE FEDERAL DO AMAZONAS FACULDADE DE TECNOLOGIA ESPECIALIZAO EM TELEVISO DIGITAL

JOS MARIA AMORAS PESSOA

PROJETO DE UM CODEC TURBO EM MATLAB

Monografia apresentada como parte do critrio de avaliao e como requisito parcial para obteno do grau de especialista em televiso digital.

Orientador: D. Sc. Eddie Batista de Lima Filho

MANAUS 2011

UNIVERSIDADE FEDERAL DO AMAZONAS FACULDADE DE TECNOLOGIA ESPECIALIZAO EM TELEVISO DIGITAL

MONOGRAFIA FINAL DE CURSO

CURSO DE PS-GRADUAO: Especializao em Televiso Digital

TITULO DE TRABALHO: Projeto de um Codec Turbo em Matlab_________________________

ALUNO: Jos Maria Amoras Pessoa_

PROF ORIENTADOR: D.Sc. Eddie Batista de Lima Filho____________

Manaus AM, Junho de 2011

MANAUS JUNHO 2011

AGRADECIMENTOS

Agradecimentos especiais a minha esposa Elisangela e aos meus filhos Ricardo, Eduardo, Beatriz e Leonardo, pelo grande apoio que me permitiu concluir com xito este curso de especializao. Sou eternamente grato aos meus pais por todo apoio, confiana, amor, incentivo e pelos esforos realizados para minha formao pessoal e profissional. Meus sinceros agradecimentos ao D. Sc. Eddie Lima pelo apoio e orientaes na elaborao deste trabalho.

RESUMO
Os Cdigos Turbo tem sido objeto de muita pesquisa nos ltimos anos, produzindo resultados muito prximos ao limite terico definido por Shannon. A razo para esse excelente desempenho baseia-se principalmente no uso de codificadores recursivos sistemticos e em um procedimento de decodificao iterativa. Este trabalho descreve o projeto e a implementao de um Codec Turbo desenvolvido em Matlab e baseado na decodificao MAP, proporcionando uma ferramenta para a simulao e o desenvolvimento de sistemas baseados em cdigos turbo. O desempenho do Codec avaliado atravs de simulaes de transmisso de dados atravs de um canal AWGN. Alguns fatores que influenciam o seu desempenho so analisados, como o tipo de entrelaador, o seu tamanho e o nmero de iteraes do algoritmo de decodificao. Os resultados obtidos mostram que uma combinao adequada dessas caractersticas pode produzir ganhos significativos. Assim, possvel estabelecer um modelo de Cdigo Turbo com alto desempenho.

PALAVRAS-CHAVE: Cdigos Turbo, Cdigos Corretores de Erros, Decodificao Iterativa.

ABSTRACT
Turbo codes have been an important research topic in recent years, producing results which are very close to the theoretical limit set by Shannon. The reason for this excellent performance is mainly based on the use of recursive systematic encoders and an iterative decoding procedure. This paper describes the design and implementation of a Turbo Codec in Matlab, with a decoding procedure based on MAP probabilities, providing a tool for simulation and system developing. The performance evaluation of this codec is carried through simulations of data over an AWGN channel. Features that influence system performance are evaluated, like interleaver type, its size and number of iterations of the decoding algorithm, and the results show that a suitable combination of these features can produce significant improvements. Thus, it is possible to establish a reference turbo Codec with high performance.

KEY-WORDS: Turbo Codes, Error Correcting Coding, Iterative Decoding.

LISTA DE FIGURAS
Figura 2.1 - Sistema de Comunicao .................................................................................. 14 Figura 2.2 Sistema de Comunicao com adio de rudo (AWGN)................................ 17 Figura 3.1 - Modelo de canal discreto sem memria ........................................................... 20 Figura 3.2 - Capacidade de um canal binrio discreto sem memria em funo da probabilidade de transio .............................................................. 21 Figura 4.1 - Codificador Turbo genrico .............................................................................. 24 Figura 4.2 - Codificador convolucional recursivo (RSC) tpico .......................................... 26 Figura 4.3 - Decodificador Turbo iterativo .......................................................................... 30 Figura 6.1 - Curva de desempenho (BER) para o codificador turbo com entrelaador s-randmico, taxa 1/2, 20 iteraes, N=1.000 (vermelho), N=5.000 (verde) e N=10.000 (azul) .......................................... 44 Figura 6.2 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 para um entrelaador s-randmico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto) ............................................. 46 Figura 6.3 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 Para um entrelaador randmico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto) .............................................. 47 Figura 6.4 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 Para um entrelaador cclico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto) ............................................. 48 Figura 6.5 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 e entrelaadores cclico (azul), randmico (verde) e s-randmico (vermelho) .................................................................................. 50

LISTA DE SIGLAS

ARQ AWGN BCJR BER BPSK BSC CODEC DMC Eb/N0 FEC LLR MAP RSC SISO SNR

Automatic Request Repeat Additive White Gaussian Noise L. Bahl, J. Cocke, F. Jelinek, J. Raviv Bit Error Rate Binary Phase Shift Keying Binary Simmetric Channel Codificador/decodificador Discrete Memoryless Channel Razo entre a energia de bit e a energia de rudo Forward Error Correction Log-Likelihood Ratio Maximum A posteriori Probability Recursive Systematic Convolutional Soft-In Soft-Out Signal-Noise Ratio

SUMRIO
1 2 INTRODUO .......................................................................................................... 11 SISTEMA DE COMUNICAO ............................................................................. 14 2.1 Modelo do Sistema de Comunicao ...................................................................... 14 2.2 Codificador/Decodificador de Canal ...................................................................... 15 2.3 Codificador/Decodificador de Canal ...................................................................... 16 2.3.1 O canal AWGN ................................................................................................ 17

CODIFICAO CONTRA ERROS EM SISTEMAS DE COMUNICAO .... 19 3.1 3.2 3.3 3.4 Introduo ............................................................................................................... 19 Canais Discretos sem Memria .............................................................................. 19 Capacidade de Canal ............................................................................................... 21 Teorema da Codificao de Canal .......................................................................... 22

CDIGOS TURBO .................................................................................................... 24 4.1 4.2 4.3 4.4 O Codificador Turbo ............................................................................................... 24 O Codificador Convolucional Recursivo ................................................................ 25 O Entrelaador ........................................................................................................ 27 O Decodificador Turbo ........................................................................................... 29

DESCRIO E IMPLEMENTAO..................................................................... 31 5.1 Implementao do Algoritmo BCJR ....................................................................... 31 5.2 Pseudo-cdigo para a Codificao Turbo ............................................................... 33 5.3 Pseudo-cdigo para a Decodificao Turbo ........................................................... 34 5.4 Descrio do programa ........................................................................................... 35 5.4.1 Dados ............................................................................................................... 36 5.4.2 Entrelaador ..................................................................................................... 36 5.4.3 Codificador....................................................................................................... 37 5.4.4 Canal AWGN ................................................................................................... 38 5.4.5 Avaliao dos Erros na entrada do Decodificador ........................................... 38 5.4.6 Decodificador ................................................................................................... 39 5.4.7 Descrio do Programa .................................................................................... 40

RESULTADO DAS SIMULAES ........................................................................ 42 6.1 O Efeito do tamanho do entrelaador ..................................................................... 43

6.2 6.3 6.4

O Efeito do nmero de iteraes no desempenho do Cdigo Turbo ...................... 45 O Efeito do tipo de entrelaador adotado ............................................................... 49 Anlise dos Resultados ........................................................................................... 51

CONCLUSO............................................................................................................. 53

REFERNCIAS BIBLIOGRFICAS ............................................................................. 55 APNDICE ......................................................................................................................... 57

Universidade

Federal

do Amazonas

UFAM

P g i n a | 11

INTRODUO
Ao longo dos anos, houve um enorme crescimento nos servios de

telecomunicaes, especialmente nas reas de telefonia mvel, comunicaes via satlite e televiso digital. Tal avano conseqncia de importantes descobertas em comunicaes, aliadas ao surgimento de novas tecnologias, que possibilitam a criao de dispositivos eletrnicos cada vez mais baratos e eficientes. O advento de novos servios e aplicaes em comunicaes tende a aumentar a demanda por maiores taxas de dados e capacidade de comunicao em geral. A tarefa fundamental de um sistema de comunicao transmitir e receber informao. Em teoria, um sistema de comunicao exige que as informaes sejam enviadas do transmissor ao receptor, de tal forma que a informao recebida seja semelhante informao transmitida. Na prtica, a presena de perturbaes nem sempre permite que isto seja possvel, especialmente em comunicaes sem fio. Como um sistema de comunicao deve possuir meios de se proteger contra essas perturbaes, o projetista de sistemas de comunicaes faz uso da codificao de canal para realizar tal tarefa. Em 1948, Shannon introduziu o conceito de capacidade do canal [1], descrevendo o limite para a quantidade de dados que pode ser transmitida atravs de um canal. Esse resultado provou que possvel implementar um cdigo de controle de erro capaz de garantir alta confiabilidade informao recebida, desde que a taxa de transmisso seja menor que a capacidade do canal. Desde ento, atingir essa mxima capacidade terica tem sido o objetivo de muitos pesquisadores da rea de comunicaes.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 12

Nas ltimas dcadas, inmeros algoritmos foram propostos, na tentativa de aproximar o limite de Shannon. Em 1974, Bahl, Cocke, Jelinek e Raviv publicaram um algoritmo de decodificao baseado em probabilidades a posteriori [2]. Mais tarde, esse algoritmo foi denominado BCJR, em homenagem aos autores, e tambm maximum a posteriori (MAP). Devido sua implementao, que era muito complexa, o mesmo permaneceu cerca de duas dcadas sem utilizao prtica. Entretanto, a situao foi alterada quando, em 1993, Berrou, Glavieux e Thithimajshima publicaram um artigo intitulado Near Shannon Limit Error Coding and Decoding: Turbo Codes [3], introduzindo a Codificao Turbo, cujo decodificador usava uma verso modificada do algoritmo BCJR. Surgia, ento, um modelo com chances de finalmente atingir o limite de Shannon. O objetivo do presente trabalho apresentar a implementao de um Codec Turbo, em Matlab, proporcionando uma ferramenta para a simulao e o desenvolvimento de sistemas baseados em cdigos turbo. Vale ressaltar que, apesar da simplicidade e da praticidade da linguagem, raro encontrar esse tipo de implementao em Matlab. Um dos motivos o fato deste utilizar uma linguagem interpretada, o que torna as simulaes mais lentas quando comparadas a opes compiladas como, por exemplo, C. Entretanto, neste trabalho ser apresentado um Codec com bom desempenho, que utiliza a preciso e a complexidade do algoritmo MAP, combinadas a uma implementao simples. Alm disso, sero exploradas trs caractersticas importantes, que influenciam o desempenho de um Codec Turbo: o tipo de entrelaador, o seu tamanho e o nmero de iteraes do algoritmo de decodificao. Assim, ser possvel avaliar o desempenho do Codec para cada uma dessas caractersticas. As simulaes realizadas tm o objetivo de avaliar se a implementao proposta apresenta os mesmos resultados demonstrados na

Universidade

Federal

do Amazonas

UFAM

P g i n a | 13

literatura e tambm permitiro estabelecer um modelo de cdigo com as melhores configuraes. O presente trabalho est organizado como segue. O captulo 2 apresenta uma introduo sobre sistemas de comunicao. O captulo 3, por sua vez, aborda a codificao contra erros aplicada a sistemas de comunicao. Os cdigos turbo so avaliados no captulo 4 e a sua implementao em Matlab introduzida no captulo 5. Finalmente, o captulo 6 apresenta os resultados de simulaes e as concluses do trabalho so discutidas no captulo 7.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 14

2
2.1

SISTEMAS DE COMUNICAO
Modelo do Sistema de Comunicao

O diagrama de blocos mostrado na Figura 2.1 ilustra o fluxo de sinal e os blocos de


processamento tpicos para um sistema de comunicao digital. A parte superior (fonte de informao, codificador de fonte, codificador de canal e modulador digital) mostra a transformao do sinal desde a fonte at o transmissor; o bloco inferior mostra a transformao do sinal desde o receptor at o destino, realizando o processo inverso [4].

fonte de Informao

Codificador de Fonte

Codificador de Canal

Modulador Digital

Canal de Transmisso

Destinatrio

Decodificador de Fonte

Decodificador de Canal

Demodulador Digital

Figura 2.1 Sistema de Comunicao.

A fonte gera as informaes a serem transmitidas, que podem ser analgicas ou discretas. As fontes discretas possuem um alfabeto de fonte e uma distribuio de probabilidade de cada smbolo, o que facilita a obteno de um modelo probabilstico. Em geral, as fontes de informao so no-uniformes, ou seja, as mensagens produzidas por ela possuem redundncia [5].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 15

O bloco codificador de fonte recebe a seqncia de smbolos da fonte de informao e tem como objetivo melhorar a eficincia de transmisso da informao. Para isso, as informaes so tratadas de modo a eliminar a parcela redundante, diminuindo a largura de banda necessria transmisso da informao. Idealmente, o codificador de fonte remove toda a redundncia da seqncia de entrada e converte a informao em uma seqncia digital binria, alm de tambm poder realizar compresso. No receptor, o decodificador de fonte far a operao inversa, ou seja, a recuperao da seqncia de smbolos, entregando-a ao destinatrio [6]. O bloco modulador digital gera um sinal adequado ao canal de comunicao e melhora a utilizao da largura de banda, servindo como interface com o canal de comunicao. O seu principal objetivo mapear a seqncia digital proveniente do codificador de canal em um conjunto de M valores distintos de um sinal eltrico. Assim, por exemplo, se M = 2 diz-se que a modulao binria. No Receptor, o demodulador faz o trabalho inverso, ou seja, a partir da informao recebida do canal de comunicao, gera a seqncia digital a ser entregue ao decodificador de canal.

2.2

Codificador/Decodificador de Canal

O bloco codificador de canal tem a funo de introduzir redundncia, de forma controlada, na seqncia digital binria, de modo a tornar a transmisso mais confivel. O decodificador de canal do receptor tem a misso de recuperar a seqncia digital binria original, que foi afetada pelas interferncias presentes no canal. Logo, a redundncia permite aumentar a confiabilidade na informao recebida pelo receptor. Em outras palavras, considerando-se um dado valor de relao sinal-rudo (SNR), possvel reduzir a

Universidade

Federal

do Amazonas

UFAM

P g i n a | 16

probabilidade de erro de bits na recepo, utilizando-se a codificao de canal, de modo a maximizar a qualidade da transmisso [6]. Devido adio de redundncia, a codificao de canal tem como conseqncia a expanso da largura de banda. A tcnica de codificao adotada definir, ento, a maneira como o codificador e o decodificador atuaro. possvel dividir as tcnicas de correo de erro em dois tipos [4]: Forward Error Correction (FEC) e Automatic Reapeat reQuest (ARQ). No FEC, o receptor utiliza cdigos corretores para recuperar os dados, enquanto que no ARC um cdigo detector de erros, no receptor, emite um pedido de retransmisso ao identificar erros na mensagem. No FEC, bits extras so adicionados aos bits de informao originais, antes da transmisso, para se criar uma nova estrutura de cdigo, que mais resistente a erros. O decodificador de controle de erro, ento, interpreta os sinais recebidos para obter uma estimativa da informao original. Os cdigos corretores de erro so classicamente divididos em dois grandes grupos: cdigos de bloco e cdigos convolucionais [7].

2.3

O canal de Comunicao

O canal de comunicao qualquer meio fsico atravs do qual a informao pode ser transmitida ao receptor. Seja qual for o canal de comunicao utilizado, o sinal normalmente corrompido de forma imprevisvel por diversas fontes, como rudo trmico, por exemplo. Sendo assim, o canal pode ser considerado o maior fator limitante do desempenho dos sistemas de comunicao [5]. Muitos fatores, como a atenuao, no-linearidades e rudos fazem com que um sinal na sada de um canal seja diferente do sinal introduzido em sua entrada. Todos esses fatores contribuem para que haja, em um canal de comunicao, uma relao de entrada-

Universidade

Federal

do Amazonas

UFAM

P g i n a | 17

sada normalmente complexa [7]. Existem muitos modelos matemticos de canais de comunicao, que descrevem como os sinais so afetados pelo ambiente. O modelo de canal adotado neste trabalho ser o de rudo branco gaussiano aditivo (Additive White Gaussian Noise - AWGN).

2.4

O canal AWGN

O canal AWGN um dos padres de rudo mais utilizados em simulaes, pois apresenta resultados muito prximos soluo exata [4] e caracteriza-se por ser um canal discreto sem memria (DMC). Em sua sada, adicionado um rudo gaussiano de banda larga. O canal AWGN pode ser representado pela equao: y = x + no, onde no uma varivel aleatria gaussiana com mdia zero e varincia 2 , x o sinal na sada do transmissor e y o sinal corrompido pelo rudo, que chega entrada do receptor. A Figura 2.2 ilustra o modelo de canal AWGN.

+
no

Figura 2.2 Sistema de Comunicao com adio de rudo (AWGN).

Assim, a funo densidade de probabilidade da varivel y, condicionada entrada xi, pode ser escrita como:

p ( y | xi ) =

( y x i )2 . exp 2 2 2 1

Universidade

Federal

do Amazonas

UFAM

P g i n a | 18

Este rudo caracterizado, principalmente, pelo rudo trmico presente em circuitos de receptores eletrnicos. O canal AWGN til na representao de um canal de comunicao via satlite ou com o, sem seletividade em freqncia [7].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 19

CODIFICAO CONTRA COMUNICAO


Introduo

ERROS

EM

SISTEMAS

DE

3.1

A presena de rudo, em um sistema de comunicao digital, inevitvel e, consequentemente, este rudo provoca erros. Para a obteno de altos nveis de desempenho, faz-se necessrio o uso de tcnicas de codificao de canal. O objetivo destas aumentar a robustez de um sistema de comunicao digital, na presena de rudo. Basicamente, este processo consiste da insero de redundncias na seqncia binria, por um codificador de canal, antes da transmisso. Na recepo, um decodificador de canal verifica a seqncia recebida e, com o auxlio da redundncia introduzida, corrige automaticamente alguns padres de erro [7].

3.2

Canais Discretos sem Memria

Um canal discreto sem memria (DMC) um modelo estatstico, com uma entrada X e uma sada Y, que uma verso ruidosa de X, conforme demonstrado na Figura 3.1. Tanto os smbolos que entram (X) quanto os que saem (Y) so variveis aleatrias. Em outras palavras, um canal que, em cada unidade de tempo, aceita um smbolo de entrada

xj, pertencente a um alfabeto X, e, em resposta, emite na sada um smbolo yk, de um


alfabeto Y. O termo discreto significa que os dois alfabetos possuem tamanhos finitos e o termo sem memria significa que o smbolo corrente presente na sada depende apenas do smbolo corrente presente na entrada e de nenhum outro anterior.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 20

X { x0, x1,..., xJ-1 }

p( yk|xj )

Y { y0, y1,..., yk-1 }

Figura 3.1 Modelo de canal discreto sem memria.

Um caso particular de canal discreto sem memria canal binrio simtrico (BSC). O alfabeto de entrada do canal possui dois smbolos (x0 = 0, x1 = 1) e o de sada tambm (y0 = 0, y1 = 1). O canal simtrico porque a probabilidade de se receber um 1 quando um 0 transmitido a mesma de se receber um 0 quando um 1 transmitido. Neste caso, tem-se que p10 = P (y=1| x=0), p01 = P ( y=0| x=1) e p01 = p10 = p. A entropia condicional de X, representada pela notao H( X|Y ), identifica a quantidade de incerteza restante sobre a entrada do canal, depois da sada ter sido observada. H(X) representa a incerteza sobre a entrada do canal antes da observao da sada. Conseqentemente, a diferena H(X) - H(X|Y) representa a incerteza sobre a entrada do canal, que resolvida pela observao da sua sada. Essa diferena chamada de informao mtua do canal, representada por I(X; Y). A informao mtua mede a transferncia de informao por amostra de y, no destino. Portanto, depende no somente do canal, mas tambm da maneira como este usado [7].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 21

3.3

Capacidade de canal

A Capacidade de um canal discreto sem memria C a informao mtua mxima I(X; Y), em qualquer uso particular do canal. Assim, a transferncia mxima de informao por amostra de y obtida maximizando-se I(X; Y). A capacidade de canal C medida em bits por uso do canal e depende apenas das probabilidades de transies p(yk | xj), que definem o canal [7]. A Figura 3.2 mostra o grfico de capacidade de um canal simtrico, binrio e discreto sem memria, em funo da probabilidade de transio. A entropia H(X) maximizada quando os smbolos do alfabeto de entrada so equiprovveis, isto ,

p(xi=0) = p(xi=1) = 1/2.

C Capacidade de canal

0,5

0,5

p Probabilidade de transio

Figura 3.2 Capacidade de um canal binrio discreto sem memria, em funo da probabilidade de transio [7].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 22

3.4

Teorema da Codificao de canal

A fidelidade entre a seqncia decodificada no receptor e a originalmente transmitida influencia a probabilidade de erro final, sendo que este resultado depende do cdigo utilizado e de algumas caractersticas do canal. Como regra geral, quanto maior a capacidade de correo de erros do cdigo, maior deve ser a quantidade de redundncia introduzida e a complexidade de decodificao. A reconstruo precisa da seqncia original, no destino, requer que a probabilidade mdia de erros seja arbitrariamente baixa. Segundo Shannon [1] (segundo teorema de Shannon), existe um esquema de codificao de canal eficiente o suficiente, capaz de tornar essa tarefa possvel [7]. Seja uma fonte discreta e sem memria, com alfabeto S e entropia H(S), que produz um smbolo a cada Ts segundos e o mesmo transmitido em um canal discreto sem memria, de capacidade C, usado a cada Tc segundos. De acordo com o Teorema da Codificao de Canal, se

H (S ) C , TS TC
ento existe um esquema de codificao no qual a sada da fonte pode ser transmitida pelo canal, com uma taxa de erros arbitrariamente baixa. O parmetro C/Tc chamado de taxa crtica. Quando a igualdade obtida, diz-se que o sistema est transmitindo na taxa crtica. Caso contrrio, diz-se que no possvel transmitir, com taxa arbitrariamente baixa, a informao pelo canal. Seja um canal simtrico binrio, onde uma fonte discreta sem memria emite dois smbolos com probabilidades iguais. A entropia da fonte igual a um bit por smbolo, ou

Universidade

Federal

do Amazonas

UFAM

P g i n a | 23

seja, esta emite informao a uma taxa de 1/Ts. Seja tambm um codificador de canal com uma taxa de codificao r, tal que r = k/n, onde k o nmero de bits de informao e n o nmero de bits do bloco codificado. De acordo com o teorema da codificao de canal, se

1 C , TS TC
Ento a probabilidade de erros pode ser arbitrariamente baixa, se um esquema de codificao de canal adequado for utilizado. Como r = Tc/Ts, ento

r C.
Assim, para r C , existe uma tcnica de codificao tal que a sada da fonte pode ser transmitida atravs do canal, com uma taxa de erros arbitrariamente pequena, apesar da presena de rudo. Caso contrrio, se r > C , no possvel a transmisso sem erros. Vale ressaltar que o segundo teorema de Shannon no mostra como construir bons cdigos e deve ser interpretado como uma prova de existncia, isto , desde que a limitao imposta pelo teorema seja satisfeita, ento o cdigo existe. Alm disso, o teorema no apresenta um resultado preciso para a probabilidade de erro aps a decodificao de canal e indica que a mesma tende para zero medida que o comprimento do cdigo aumenta [7].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 24

4 CDIGOS TURBO
4.1 O Codificador Turbo

Um codificador turbo genrico est representado na Figura 4.1 e consiste na concatenao paralela de dois ou mais codificadores convolucionais recursivos sistemticos (RSC) (codificadores constituintes), conectados por um entrelaador. Os codificadores constituintes so definidos pelos seus polinmios geradores. Se os mesmos forem iguais, diz-se que o codificador simtrico; caso contrrio, assimtrico. Como cada um dos codificadores recebe a mesma seqncia de entrada, diz-se que a concatenao paralela [8].

u = xS

x1p
CODIFICADOR 1

ENTRELAADOR

PERFURADOR

x1p x2p

u = xS
CODIFICADOR 2

x2p

Figura 4.1 Codificador Turbo.

O codificador 1 opera diretamente sobre a seqncia de entrada xS (bits sistemticos), enquanto que o codificador 2 opera sobre uma verso entrelaada xS dos

Universidade

Federal

do Amazonas

UFAM

P g i n a | 25

mesmos. O entrelaador permuta a ordem de uma seqncia de smbolos de entrada de maneira inteiramente determinstica, produzindo os mesmos smbolos na sada, mas em ordem diferente. Aps a codificao, trs fluxos de dados so gerados: os bits sistemticos xS e os bits de paridade x1p e x2p. Os bits de paridade x1p e x2p so ento perfurados, antes da transmisso atravs do canal. Assim, taxas de cdigo mais altas, como 1/2, 2/3, 3/4, por exemplo, podem ser obtidas atravs da perfurao do codificador turbo de taxa 1/3. O perfurador, ento, tem o objetivo de excluir certos bits de paridade e adaptar a taxa de cdigo, mas ainda mantendo a mxima distncia entre as palavras-cdigo [9]. Vale ressaltar que o uso do mapa de perfurao no requisito obrigatrio na formao dos Cdigos Turbo. O entrelaador troca as posies dos N bits de entrada, de modo que o cdigo parea aleatrio para o canal, o que melhora o seu desempenho [9]. A introduo do entrelaador pseudo-aleatrio uma das razes do bom desempenho dos cdigos turbo, visto que a teoria assegura que um cdigo escolhido aleatoriamente capaz de se aproximar do limite de Shannon, desde que o tamanho de bloco seja suficientemente grande [10]. Os cdigos turbo so cdigos de bloco, sendo que o tamanho da mensagem determinado pelo entrelaador. Como os codificadores constituintes so lineares, diz-se que os cdigos turbo so cdigos de bloco lineares [7].

4.2

O codificador Convolucional Recursivo

A Figura 4.2 mostra um codificador convolucional recursivo (RSC) tpico, utilizado em Codificadores Turbo. Com base na Figura 4.2, fcil notar que g0 = 1+D+D

Universidade

Federal

do Amazonas

UFAM

P g i n a | 26

e g1 = 1+D. Em notao octal, tem-se [7 5]; j em notao binria, os polinmios seriam descritos por [111 , 101]. A matriz geradora de um cdigo convolucional sistemtico dada por
G ( D) = 1 g1 . g0

Se a seqncia de entrada for divisvel por g0(D), o peso de Hamming da seqncia de sada ser finito; caso contrrio, o peso ser infinito [9].

xS
+

u
+
D D

x1p

Figura 4.2 Codificador convolucional recursivo (RSC) tpico.

O objetivo da adoo de codificadores convolucionais recursivos fazer com que o estado interno do registrador de deslocamento dependa das sadas passadas. Isso resulta em um melhor do desempenho de decodificao, porque afeta o comportamento do padro de erro, haja vista que um nico erro no bit sistemtico resulta em infinitos erros de paridade [11]. Palavras cdigo com peso alto so desejveis, pois isso significa que as mesmas so mais distintas entre si e, com conseqncias, a probabilidade do decodificador diferenci-las aumenta. Assim, um codificador recursivo uma boa alternativa como

Universidade

Federal

do Amazonas

UFAM

P g i n a | 27

codificador constituinte, pois permite que uma seqncia de entrada com peso baixo resulte em uma seqncia de paridade com peso alto [12].

4.3

O Entrelaador

O entrelaador, ao trocar as posies dos bits de entrada, faz com que o cdigo parea aleatrio para o canal, o que melhora o seu desempenho [10]. O entrelaamento dos bits entregues ao segundo codificador componente garante a gerao de palavras-cdigo de alto peso. Supondo-se que uma seqncia de entrada produza palavras-cdigo de baixo peso na sada do primeiro codificador componente, ento esta mesma seqncia ser permutada pelo entrelaador e entregue ao segundo codificador componente, garantindo a gerao de palavras-cdigo de alto peso. Essa melhora no peso mdio das palavras-cdigo chamada de ganho do entrelaador [10]. O entrelaador influencia diretamente o desempenho dos cdigos turbo, pois projetado para tirar vantagem das propriedades de distncia dos mesmos. Ao se evitar palavras-cdigo de baixo peso, a taxa de erro de bits de um cdigo turbo pode melhorar significativamente. Outro objetivo do entrelaador tornar aleatria a posio dos erros inseridos durante a transmisso, combatendo a ocorrncia de erros em rajada [13]. O projeto do entrelaador um fator determinante para o bom desempenho do cdigo turbo. Assim, muitas pesquisas tm sido feitas e diversos tipos de entrelaadores foram desenvolvidos. Neste trabalho, sero abordados apenas trs deles: o randmico, o cclico e o s-randmico. Em um entrelaador cclico, a seqncia de informao escrita em uma matriz com m linhas e n colunas, tal que m > n. Em seguida, as seqncias de m colunas, de

Universidade

Federal

do Amazonas

UFAM

P g i n a | 28

tamanho n, so aplicadas a um banco de m registradores. O i-simo registrador desloca a isima seqncia de colunas na matriz, ciclicamente e para a esquerda, por (i1)B, onde B o menor inteiro tal que B n m . As seqncias deslocadas formam uma nova matriz e os dados so lidos da matriz coluna. O desentrelaador executa uma operao similar, sendo que a i-sima seqncia de colunas na matriz ciclicamente deslocada para a direita, por

(i1)B [16].
O entrelaador randmico usa uma permutao aleatria fixa e mapeia uma seqncia de entrada de acordo com a ordem da permutao. Porm, uma vez definida, esta ordem se mantm para toda a seqncia em sua entrada [13]. Nas simulaes realizadas neste trabalho, a funo rand do Matlab foi usada para se gerar uma matriz de nmeros aleatrios com distribuio uniforme. A partir dessa matriz, gerou-se um entrelaador randmico. O entrelaador s-randmico, proposto em [14], difere do entrelaador randmico por exigir que haja uma distncia S (spread factor) entre os inteiros selecionados. Esse entrelaador construdo como segue. Cada nmero inteiro, escolhido randomicamente, comparado aos S inteiros precedentes; se o valor absoluto da diferena entre a seleo atual e qualquer um dos S inteiros for menor que S, ento esta ser rejeitada. Tal processo repetido at que todos os N inteiros distintos sejam selecionados. Esse algoritmo no garante a convergncia para uma soluo completa, porm, utilizando-se o critrio

N 2 , possvel obter um entrelaador em tempo razovel [14].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 29

4.4

O Decodificador Turbo

O decodificador turbo, mostrado na Figura 4.3, consiste em dois decodificadores operando paralelamente e cooperativamente, atravs de um algoritmo conhecido como BCJR [Bahl]. Esse algoritmo , na verdade, um decodificador MAP, pois minimiza os erros de bits atravs da estimao das probabilidades a posteriori dos bits individuais, em uma palavra-cdigo; para se reconstruir a seqncia de dados original, as sadas do algoritmo BCJR so ento limitadas [7]. No BCJR, as informaes sobre a confiabilidade dos bits de um dos decodificadores alimentam a entrada do outro decodificador, aumentando assim a confiabilidade na estimativa para cada bit. O decodificador componente 1, na Figura 4.3, tem como entrada yS (verso ruidosa de xS ) e a paridade y1p (verso ruidosa de x1p ). Esse decodificador ento produz uma sada
e L12 , chamada de probabilidade extrnseca, a qual permutada pelo entrelaador e usada

para melhorar a estimativa da probabilidade a priori para o segundo decodificador. O decodificador componente 2 recebe outras duas entradas: a seqncia

yS

permutada e a paridade y2p (verso ruidosa de x2p ). Esse decodificador tambm produz uma sada suave, a probabilidade extrnseca

Le , a qual passa pelo desentrelaador e usada 21

para melhorar a estimativa da probabilidade a priori para o primeiro decodificador. Tal processo de decodificao iterativa continua at que um determinado nmero de iteraes seja alcanado; quando isso acontece, o processo interrompido e o decodificador toma uma deciso para cada bit [12].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 30

Le 21
DESENTRELAADOR

y1 p yS

DECODIFICADOR COMPONENTE 1

e L12

ENTRELAADOR

DECODIFICADOR COMPONENTE 2

DESENTRELAADOR

ENTRELAADOR

y2 p
LIMITADOR RGIDO

x
Figura 4.3 Decodificador Turbo iterativo.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 31

5 DESCRIO E IMPLEMENTAO
5.1 Implementao do algoritmo BCJR

No algoritmo BCJR, o decodificador toma a deciso sobre o dado transmitido com base no clculo da probabilidade a posteriori logartmica (LLR), definida como

P (u k = + 1 | y ) L(u k ) = ln P (u = 1 | y ) , k
onde uk o sinal de entrada do codificador modulado em BPSK. O sinal, positivo ou negativo, de L(uk ) indicar que o bit enviado foi +1 ou -1,

respectivamente, e o seu valor absoluto traduzir uma maior ou menor confiana nesta suposio. Assim, quanto mais afastado L(uk ) estiver do limiar de deciso nulo, mais confiana haver na estimativa do bit [19]. Como os codificadores so convolucionais, possvel expressar a LLR por trelias [17]:

p ( s k 1 = s ' , s k = s, y ) / p ( y ) p ( s k 1 = s ' , s k = s, y ) + S+ L(u k ) = S = p ( s = s ' , s = s, y ) p ( s k 1 = s ' , s k = s, y ) / p ( y ) k 1 k S S


No numerador, S + significa que o somatrio se estende s transies entre estados
s ' e s , provocadas por um bit de mensagem u k = + 1 . Da mesma maneira, S no

denominador designa os outros ramos da trelia, que so originados por um bit de mensagem u k = 1 [19]. Com o uso da regra de Bayes, obtm-se

Universidade

Federal

do Amazonas

UFAM

P g i n a | 32

p ( s ' , s , y ) = p ( s k 1 = s ' , s k = s, y ) = k ( s ) . k ( s ' , s ) . k 1 ( s ' ) .

Esta probabilidade conjunta, p ( s ' , s , y ) , pode ser calculada como o produto das
trs probabilidades , e . Vale ressaltar que, no instante k, as probabilidades , e

esto associadas ao passado, ao presente e ao futuro da seqncia y,

respectivamente [19].

k (s ) obtido com uma recurso para frente, k 1 ( s ' ) com uma recurso para
trs e k ( s ' , s ) depende do canal [17]. Na trelia, os valores de e esto associados
aos estados do codificador e k ( s ' , s ) aos ramos ou transies entre estados [19]. Os valores iniciais de 0 ( s ) e N (s ) necessitam que o percurso na trelia comece e termine no estado nulo (trelia terminada). Para isso, necessrio acrescentar, ao fim da mensagem, alguns bits de terminao, que obriguem a mquina de codificao a regressar ao estado nulo inicial [19].

k (s ) , k 1 ( s ' ) e k ( s ' , s ) so calculados da seguinte maneira:

( s ' , s ) = p ( s k = s, y k | s k 1 = s ' ) = p ( y k | u k ) P (u k ) P (u k ) ,
k ( s ) = p ( s k = s, y1k ) =
e

(s' ) (s' , s) (s' ) (s' , s)


S' k 1 k S S' k 1 k

k 1 ( s ' ) = p ( y kN | s k 1 = s ' ) =

S'

(s) k (s' , s)

(s' ) k (s' , s) S ' k 1

Finalmente, a LLR a posteriori dada pela expresso

Universidade

Federal

do Amazonas

UFAM

P g i n a | 33

k ( s ) . k ( s ' , s ) . k 1 ( s ' ) + L(u k ) = ln S k ( s ) . k ( s ' , s ) . k 1 ( s ' ) S

Supondo-se que a modulao utilizada seja BPSK, a caracterstica do canal Lc definida como

Lc =

4 r Eb , N0 Eb a energia

Onde N 0 / 2 a densidade espectral de potncia bilateral do rudo, transmitida por bit de mensagem e r a taxa de cdigo. Como resultado final, tem-se

L(u k ) = Lc y ks + La (u k ) + Le (u k ) .
Lc yks o valor do canal, composto por quantidades relativas ao canal de
comunicao, La (u k ) a informao a priori, isto , a informao extrnseca enviada pelo decodificador complementar e Le (u k ) a informao extrnseca a ser calculada, que posteriormente ser enviada ao outro decodificador [18].

5.2

Pseudo-cdigo para a Codificao Turbo

Incio for k = 1 : N
S Entrar com u = x (bits sistemticos).
1p 2p Calcular x (bits de paridade do codificador 1) e x (bits de paridade do

codificador 2).

Universidade

Federal

do Amazonas

UFAM

P g i n a | 34

1p 2p Perfurar fluxos x e x .

S 1p 2p Multiplexar x , x e x .

end end

5.3
Incio

Pseudo-cdigo para a Decodificao Turbo

s 1p 2p 1. Obter y k (bits sistemticos), y k (bits de paridade do codificador 1) e y k (bits de

paridade do codificador 2). for k = 1 : iterao

DECODIFICADOR 1:
1. Estabelecer a informao a priori La (u k ) = Le (u k ) . Condio inicial: La (u k ) = 0
' 2. Calcular y k ( s , s ) .

1 para s = 0 3. Calcular k (s ) . Condio inicial: 0 (s ) = 0 para s 0 1 para s = 0 . 4. Calcular k (s ) . Condio inicial: 0 (s ) = 0 para s 0

k (s) . k (s' , s) . k (s) S+ 5. Calcular L(u k ) = ln k (s) . k (s' , s) . k (s) S

s 6. Calcular Le (u k ) = L(u k ) Lc y k La (u k ) (informao extrnseca).

DECODIFICADOR 2:
s 1. Entrelaar Le (u k ) e y k .

Universidade

Federal

do Amazonas

UFAM

P g i n a | 35

2. Estabelecer a informao a priori La (u k ) = Le (u k ) .


' 3. Calcular y k ( s , s ) .

4. Calcular k (s ) 5. Calcular k (s ) estabelecendo como condio inicial: 0 (s ) = k ( s ) .

k (s) . k (s' , s) . k (s) S+ 6. Calcular L (u k ) = ln k (s) . k (s' , s) . k (s) S


s 7. Calcular Le (u k ) = L(u k ) Lc y k La (u k )

end

ESTIMATIVA FINAL:
s 1. Calcular L (u k ) = Lc y k + La (u k ) + Le (u k )
^

2. Aplicar o Limitador rgido a L (u k ) para obter u end

5.4

Descrio do programa

O cdigo fonte, presente no Apndice, composto pelas seguintes partes: dados, entrelaador, codificador, canal AWGN, avaliao dos erros na entrada, decodificador, limitador e sada de dados. A opo por um programa composto por um mdulo nico teve o objetivo de tornar a execuo mais rpida, principalmente quando do uso de blocos grandes (superiores a 1.000 bits); apenas duas funes externas foram desenvolvidas: o entreleador s-randmico e o cclico. As sees seguintes apresentaro uma descrio do funcionamento de cada uma dessas partes.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 36

5.4.1 Dados

O cdigo inicia com a entrada dos dados de configurao, necessrios ao funcionamento do programa, tais como:

bloco Define o tamanho do bloco; num_blocos Define o nmero de blocos (tamanho do entrelaador); iteracao Define o nmero de iteraes; SNR Define a intensidade do rudo (SNR em dB);
taxa_codigo Define a taxa de cdigo;

polinomio Define o polinmio gerador a ser adotado.

5.4.2 Entrelaador

Esta parte do cdigo cria o entrelaador. O entrelaador Randmico obtido atravs da funo rand, nativa do Matlab e responsvel pela gerao de uma matriz de nmeros aleatrios com distribuio uniforme, mdia zero e desvio padro dependente da intensidade de rudo. Ento, cria-se o vetor P, cujo comprimento igual ao tamanho do bloco.

Exemplo 1: Considerando-se uma mensagem de bloco = 20, o programa apresentar o


seguinte resultado: P = [16 5 1 9 11 13 15 7 20 18 6 17 19 14 8 12 3 2 10 4].

O entrelaador Cclico formado a partir da funo ciclico1, descrita no apndice B. O produto entre linha e coluna deve corresponder ao tamanho do bloco. Dessa forma, os seguintes dados devem ser fornecidos:

deslocamento Define o deslocamento dentro da matriz;

Universidade

Federal

do Amazonas

UFAM

P g i n a | 37

linha Define o nmero de linhas da matriz; coluna Define o nmero de colunas da matriz.

Exemplo 2: Considerando-se uma mensagem de bloco = 20, com deslocamento = 3, linha


= 2 e coluna = 10, o programa apresentar o seguinte resultado: P = [1 16 3 18 5 20 7 2 9 4 11 6 13 8 15 10 17 12 19 14]. O entrelaador S-randmico formado a partir da funo s_randomico, descrita no apndice C. Nesse caso, definido-se o tamanho do bloco, a funo fornecer o entrelaador desejado.

Exemplo 3: Considerando-se uma mensagem de bloco = 20 e S = 3, o programa


apresentar o seguinte resultado: P = [2 13 9 3 20 15 10 16 18 4 6 8 11 14 7 5 12 17 1 19].

5.4.3 Codificador
O codificador composto pelo Codificador Componente 1, o Codificador Componente 2 e o Perfurador. A varivel Dados, gerada a partir da funo rand do Matlab, corresponde mensagem transmitida na forma binria. Parte deste codificador foi obtida a partir do cdigo fonte apresentado em [7]. O codificador gera a seqncia TX = {Y, P1, Y, P2, Y, P1, Y, P2, ...}, onde Y o bit sistemtico, P1 o bit de paridade do codificador componente 1 e P2 o bit de paridade do codificador componente 2. O sinal TX, modulado em BPSK, transmitido atravs de um canal AWGN.

Exemplo 4: Supe-se uma mensagem transmitida com 20 bits, sendo 18 bits de dados e 2
bits de terminao, conforme mostrado abaixo.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 38

Dados = [1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0]. Entrelaador S-randmico: P = [2 13 9 3 20 15 10 16 18 4 6 8 11 14 7 5 12 17 1 19]. Polinmio gerador: polinmio = [111;101]. Taxa de cdigo: taxa_codigo = 1/2. Ento, o programa apresentar o seguinte resultado: P1y = [ 1 1 0 1 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 0 ] (Bits de paridade 1 antes da perfurao). P2y = [ 0 1 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 ] (Bits de paridade 2 antes da perfurao). TX= [1 1-1 1 1-1-1-1 1 1 1 1 1-1-1-1-1 1 1-1 1-1-1 1 1 1-1 1 1 1 1 1-1-1 1 1 1 1-1 1].

5.4.4 Canal AWGN


O rudo gaussiano gerado pala funo randn, do Matlab a partir das informaes de SNR e taxa de cdigo.

Exemplo 5: Para bloco = 20, snr = 1 dB e taxa_codigo = 1/2, obtm-se


ruido = [0.2847 0.6880 -0.7578 0.6170 -0.0410 0.2308 1.2412 0.0195 0.9610 ... -0.3589 -1.3393 0.0076 -0.1831 1.6637 1.2029 0.3638 -0.2888 -1.3296 -1.3077 ... 0.3597 1.3321 -0.6514 -0.4060 0.5192 -0.9428 -0.1679 0.8000 -0.3992 -1.5881 ... 0.5473 0.3658 1.1439 -1.2523 0.4083 0.1205 -0.3154 1.2239 -0.4187 -0.4867 0.8298].

5.4.5 Avaliao dos Erros na entrada do Decodificador


Nessa parte do cdigo, avalia-se a quantidade de erros de bits recebida pelo decodificador, atravs da varivel rec. Os dois ltimos bits de terminao da mensagem no so considerados.

Exemplo 6: Considerando-se os mesmos dados usados nos exemplos 4 e 5, o canal ruidoso


causar o surgimento de 5 bits errados, conforma mostrado abaixo.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 39

Dados

[1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1]

Dados_rec = [1 0 1 1 1 0 1 1 0 0 1 0 1 0 0 1 0 1] Rec = 5 erros.

5.4.6 Decodificador

Os vetores ENT e SAI so obtidos a partir da trelia resultante do codificador convolucional, cujo polinmio gerador [111;101]. O vetor ENT est associado aos bits sistemticos, enquanto SAI est associado aos bits de paridade. As oito transies de estado possveis geram os seguintes vetores: ENT = [-1 1 1 -1 1 -1 -1 1] e SAI = [-1 1 -1 1 1 -1 1 -1]. Nesta etapa, calculam-se os seguintes itens:

La LLR a priori; Le Informaes extrnseca; gama Probabilidade k ( s ' , s ) ; alfa Probabilidade k (s ) ; beta Probabilidade bk 1 ( s ) ; LLR Sada do Limitador.

Exemplo 7: Supe-se os mesmos dados usados nos exemplos 4, 5 e 6, para se calcular a


LLR, adotando-se tambm duas iteraes. Os resultados so apresentados abaixo e demonstram que o decodificador realmente capaz de corrigir os 5 erros, ao final da segunda iterao.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 40

Dados =

[1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1]

Dados_rec = [1 0 1 1 1 0 1 1 0 0 1 0 1 0 0 1 0 1] LLR LLR = = [1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1] Primeira iterao: Rec = 3 erros. [1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 1] Segunda iterao: Rec = 0 erros.

5.4.7 Descrio do programa

O cdigo fonte descrito no Apndice composto por trs partes, Codificador, Canal AWGN e Decodificador. O cdigo inicia com a entrada dos dados necessrios para o funcionamento do programa, tais como: tamanho do bloco, nmero de blocos, nmero de iteraes do decodificador, SNR, taxa de cdigo e o polinmio gerador. Em seguida, escolhe-se o tipo de entrelaador usado. Foram implementados trs tipos de entrelaadores: - Randmico, obtido atravs da funo rand, nativa do Matlab, e responsvel pela gerao de uma matriz de nmeros aleatrios com distribuio uniforme; - Cclico, formado a partir da funo ciclico1, descrito no apndice B; - S-randmico; formado a partir da funo s_randomico, tambm descrito no apndice C; O Codificador composto pelo Codificador Componente 1, Codificador Componente 2 e o Perfurador. Na sada do Codificador gerada a seqncia TX = {Y, P1, Y, P2, Y, P1, Y, P2, ...}, onde Y o bit sistemtico, P1 o bit de paridade do codificador componente 1 e P2 o bit de paridade do codificador componente 2. Parte deste codificador foi obtida do cdigo fonte apresentado em [7]. O sinal TX modulado em BPSK transmitido atravs de um canal AWGN. Em seguida, feita uma avaliao dos erros obtidos na entrada do decodificador.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 41

O Decodificador composto pelo Decodificador 1, Decodificador 2 e o Limitador Rgido. Cada decodificador composto pelas probabilidades gama, alfa e beta. Gama calculado primeiro e em seguida so calculados alfa e beta. No clculo de alfa percorre-se a trelia do incio par o fim, enquanto o beta percorre o sentido contrrio. Alfa e beta esto associados aos estados do codificador, enquanto gama est associado s transies entre estados. Depois de atingido o nmero pr-determinado de iteraes a LLR na sada do segundo decodificador desentrelaada e o limitador rgido estima o bit de informao de acordo com o sinal.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 42

RESULTADOS DAS SIMULAES


As simulaes apresentadas neste captulo foram obtidas atravs da

implementao do Cdigo Turbo em Matlab, com execuo em ambiente Windows. A avaliao de desempenho do Cdigo Turbo foi realizada a partir da medida da taxa de erro de bits (BER), assumindo-se que existe uma perfeita sincronizao entre transmissor e receptor. Os parmetros utilizados nas simulaes foram:

Fonte binria de dados; Canal AWGN; Modulao BPSK (+1 / -1); Algoritmo BCJR para decodificao MAP; Taxa de cdigo R=1/2 obtida atravs de perfurao; Polinmios geradores go = (7) e g1 = (5); Faixa de variao de Eb/No de 0 dB a 2 dB.

Foram avaliadas trs caractersticas importantes, que geralmente influenciam o desempenho do Cdigo Turbo:

O tamanho do entrelaador; O nmero de iteraes do algoritmo de decodificao; O tipo de entrelaador adotado.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 43

6.1

O Efeito do tamanho do entrelaador

Para se analisar o efeito do tamanho do entrelaador, no desempenho do cdigo turbo, realizaram-se simulaes com os seguintes parmetros:

Entrelaador s-randmico de tamanhos N = 1.000, 5.000 e 10.000; Taxa de cdigo de 1/2, obtida atravs de perfurao; Polinmios geradores g0 = (7) e g1 = (5); Nmero de iteraes igual a 20; Canal AWGN; Algoritmo MAP. Os resultados das simulaes esto mostrados na Figura 6.1. A curva em azul

corresponde a N = 10.000, a curva em verde a N = 5.000 e a curva em vermelho a N=1.000. Aps uma breve anlise, verificar-se que: i) O desempenho do Cdigo Turbo melhora medida que o tamanho do entrelaador aumenta. ii) O efeito do aumento do tamanho do entrelaador muito significativo tanto nas mdias SNRs (de 0,5 a 1,5 dB), quanto nas altas SNRs (de 1,5 a 2,0 dB).

Universidade

Federal

do Amazonas

UFAM

P g i n a | 44

10

10

-1

10

-2

10 BER 10

-3

-4

10

-5

10

-6

10

-7

0.2

0.4

0.6

0.8 1 1.2 Eb/No (dB)

1.4

1.6

1.8

Figura 6.1 - Curva de desempenho (BER) para o codificador turbo com entrelaador s-randmico, taxa 1/2, 20 iteraes, N=1.000 (vermelho), N=5.000 (verde) e N=10.000 (azul).

Entretanto, as conseqncias devidas ao aumento do tamanho do entrelaador no so uma completa surpresa. Shannon, eu seu desenvolvimento matemtico sobre canais de comunicao, j havia chegado concluso de que blocos muito grandes resultariam na reduo da taxa de erros [15].

Universidade

Federal

do Amazonas

UFAM

P g i n a | 45

O aumento do tamanho do entrelaador tem o efeito de acrescentar mais aleatoriedade seqncia de dados na entrada do segundo decodificador.

Conseqentemente, as entradas dos dois decodificadores componentes tornam-se menos correlacionadas em relao ao rudo, melhorando o desempenho da decodificao [10].

6.2

O Efeito do Nmero de Iteraes no Desempenho do Cdigo Turbo

Para se analisar o efeito do nmero de iteraes no desempenho do cdigo, turbo foram feitas simulaes adotando-se os seguintes parmetros:

Entrelaadores s-randmico, randmico e cclico; Taxa de cdigo de 1/2, obtida atravs de perfurao; Polinmios geradores go = (7) e g1 = (5); Nmero de iteraes I = 1, 4, 7, 11, 14, 18 e 20; Canal AWGN; Algoritmo MAP.

As Figuras 6.2, 6.3 e 6.4 mostram os resultados das simulaes. Aps uma breve anlise, verificar-se que: i) Para os trs entrelaadores, o aumento do nmero de iteraes corresponde a uma melhora considervel no desempenho do cdigo. Entretanto, tal melhora tende a diminuir para nmeros de iteraes maiores. ii) Para o entrelaador s-randmico (Figura 6.2), de uma a onze iteraes h uma crescente e significativa melhora no desempenho do cdigo. Entretanto, de quatorze a vinte iteraes, a melhora no to significativa.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 46

iii) Para o entrelaador s-randmico a partir de dezoito iteraes no h melhora significativa no desempenho. Assim, para se manter uma complexidade computacional aceitvel e ainda obter bons resultados, pode-se fixar o nmero de iteraes em dezoito.

10

10

-1

10

-2

10 BER 10

-3

-4

10

-5

10

-6

10

-7

0.2

0.4

0.6

0.8 1 1.2 Eb/No (dB)

1.4

1.6

1.8

Figura 6.2 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 para um entrelaador s-randmico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto).

iv) Para o entrelaador randmico (Figura 6.3), de uma a sete iteraes h uma crescente e significativa melhora no desempenho do cdigo. Entretanto, de onze a vinte iteraes, a melhora no to significativa.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 47

v) Para o entrelaador randmico a partir de onze iteraes no h melhora significativa no desempenho. Assim, para se manter uma complexidade computacional aceitvel e inda obter bons resultados, pode-se fixar o nmero de iteraes em onze.

10

10

-1

10

-2

10 BER 10

-3

-4

10

-5

10

-6

10

-7

0.2

0.4

0.6

0.8 1 1.2 Eb/No (dB)

1.4

1.6

1.8

Figura 6.3 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 para um entrelaador randmico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto).

vi) Para o entrelaador cclico (Figura 6.4), de uma a onze iteraes h uma crescente e significativa melhora no desempenho do cdigo. Entretanto, de quatorze a vinte iteraes, a melhora no to significativa.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 48

vii) Para o entrelaador cclico, a partir de quatorze iteraes no h melhora significativa no desempenho. Assim, para se manter uma complexidade computacional aceitvel e ainda obter bons resultados, pode-se fixar o nmero de iteraes em quatorze.

10

10

-1

10

-2

10 BER 10

-3

-4

10

-5

10

-6

10

-7

0.2

0.4

0.6

0.8 1 1.2 Eb/No (dB)

1.4

1.6

1.8

Figura 6.4 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 para um entrelaador cclico com tamanho N = 1.000, nmero de iteraes I = 1 (azul), I = 4 (verde), I = 7 (vermelho), I = 11 (amarelo), I = 14 (ciano), I = 18 (magenta) e I = 20 (preto).

O desempenho do decodificador turbo, em geral, melhora com o nmero de iteraes do algoritmo de decodificao, pois aps a informao inicial ser compartilhada entre os decodificadores, os mesmos tero mais informao sobre os bits de entrada, o que

Universidade

Federal

do Amazonas

UFAM

P g i n a | 49

torna a deciso mais acurada. Isso ocorre porque a informao extrnseca da sada do decodificador 1 alimenta a entrada do decodificador 2 e proporciona um conhecimento novo sobre as estatsticas dos dados que, por sua vez, so aliados informao da paridade do decodificador 2. Em seguida, a informao extrnseca da sada do decodificador 2 entregue ao decodificador 1, permitindo que o processo de decodificao iterativa prossiga naturalmente [7].

6.3

O Efeito do Tipo de Entrelaador adotado

Para se analisar o efeito do tipo de entrelaador no desempenho do cdigo turbo, foram realizadas simulaes adotando-se os seguintes parmetros:

Entrelaadores s-randmico, randmico e cclico; Taxa de cdigo de 1/2, obtida com perfurao; Polinmios geradores go = (7) e g1 = (5); Nmero de iteraes I = 18; Tamanho do entrelaador N = 1.000; Canal AWGN; Algoritmo MAP.

O resultado das simulaes mostrado na Figura 6.5. Os pontos vermelhos pertencem curva do entrelaador s-randmico, os pontos verdes correspondem ao randmico e os pontos azuis ao cclico. Como resultado de uma anlise simples, a figura 6.5 mostra que: i) Nas regies de baixas SNRs (de 0 a 0,5 dB), no houve diferena no desempenho dos trs entrelaadores.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 50

ii) Nas regies de mdias SNRs (de 0,5 a 1,5 dB), o entrelaador s-randmico apresentou desempenho superior ao randmico e ao cclico. O entrelaador randmico, por sua vez, apresentou desempenho superior ao cclico. iii) Nas regies de altas SNRs (de 1,5 a 2,0 dB), o entrelaador s-randmico apresentou desempenho significativamente superior ao randmico e ao cclico. randmico, por sua vez, apresentou desempenho superior ao cclico. O entrelaador

10

10

-1

10

-2

10 BER 10

-3

-4

10

-5

10

-6

10

-7

0.2

0.4

0.6

0.8 1 1.2 Eb/No (dB)

1.4

1.6

1.8

Figura 6.5 - Curva de desempenho (BER) para o codificador turbo com taxa 1/2 e entrelaadores cclico (azul), randmico (verde) e s-randmico (vermelho).

Universidade

Federal

do Amazonas

UFAM

P g i n a | 51

O comportamento observado com relao aos entrelaadores reside no fato de que, quanto mais aleatrio os cdigo parecem para o canal de comunicao, melhor o desempenho do sistema como um todo, o que tambm j havia sido observado por Shannon [15]. O entrelaador s-randmico, alm de introduzir aleatoriedade, ainda garante uma distncia mnima entre os dados originais na seqncia embaralhada. Essa tcnica evita ciclos curtos no cdigo, que acabam por reduzir o desempenho da decodificao iterativa [15].

6.4

Anlise dos Resultados

As simulaes realizadas demonstraram que uma implementao com alto desempenho empregando Cdigos Turbo deve incluir um entrelaador s-randmico com tamanho igual a 10.000 e adotar 18 iteraes no decodificador. A opo pelo entrelaador s-randmico deve-se ao seu superior desempenho nas regies de mdias e altas SNRs (acima de 0,5 dB). Este excelente desempenho deve-se sua capacidade de quebrar padres de entrada de baixo peso e consequentemente originar seqncias de paridade de alto peso. O estabelecimento do tamanho do entrelaador em 10.000 um compromisso entre manter um bom desempenho em termos de probabilidade de erro de bits (ganho do entrelaador) e no aumentar muito a complexidade computacional. A escolha do nmero de iteraes do decodificador deu-se em funo dos resultados das simulaes realizadas para o entrelaador s-randmico. Para esse tipo de entrelaador obtm-se um timo desempenho adotando-se as 18 iteraes. Vale a pena

Universidade

Federal

do Amazonas

UFAM

P g i n a | 52

ressaltar que aumentar ainda mais o nmero de iteraes, alm de no trazer resultados significativos, resultaria em desperdcio de recursos computacionais.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 53

CONCLUSO
Foi desenvolvido um Codec Turbo, em Matlab, visando proporcionar uma

ferramenta para a simulao e o desenvolvimento de sistemas baseados em cdigos turbo. O uso da linguagem do Matlab permitiu a criao de um cdigo simples, graas a sua praticidade e a existncia de uma vasta biblioteca de funes. Entretanto, por tratar-se de uma linguagem interpretada, as simulaes ocorreram de forma mais lenta, quando comparadas a outras linguagens compiladas. Neste trabalho, foram apresentadas simulaes para tamanhos de entrelaador variando entre 1.000 e 10.000 bits. Constatou-se que, medida que se aumenta o tamanho do entrelaador, obtm-se um desempenho significativamente melhor. Entretanto, a escolha do tamanho do entrelaador deve se baseada em um compromisso: maximizar o ganho do entrelaador enquanto se minimiza a complexidade computacional. Portanto, uma boa relao custo-benefcio obtida para um tamanho de entrelaador de 10.000 bits. Os resultados de simulaes apontaram o entrelaador s-randmico como a opo de melhor desempenho. Essa superioridade ocorre nas regies de mdias e altas SNRs (acima de 0,5 dB), devido a sua capacidade de quebrar padres de entrada de baixo peso e consequentemente originar seqncias de paridade de alto peso. No que diz respeito ao ponto de convergncia dos decodificadores, em relao ao nmero de iteraes, verificou-se que, para cada tipo de entrelaador, houve um comportamento diferente; o entrelaador s-randmico convergiu na 18 iterao, o randmico na 11 e o cclico na 14. Portanto, utilizar um processo de decodificao com nmero de iteraes fixo e nico no eficiente. Dessa forma, necessrio fazer com que o

Universidade

Federal

do Amazonas

UFAM

P g i n a | 54

critrio de parada seja uma funo do entrelaador adotado ou devem ser criados critrios de parada eficientes, para que atrasos na decodificao sejam evitados, como a entropia cruzada e o CRC propostos em [10]. Os objetivos pretendidos com a realizao deste trabalho foram alcanados, pois foi obtido um Codec Turbo, em Matlab, com bom desempenho e capaz de realizar simulaes. Entretanto, outras melhorias podem ser realizadas em trabalhos futuros, tais como:

Implementar decodificadores com outros algoritmos, tais como o Log-MAP, o MaxLog-MAP e o SOVA;

Inserir mais esquemas de modulao; Realizar anlises em outros tipos de canais (no Gaussianos); Implementar outros tipos de entrelaadores; Implementar outros esquemas de perfurao; Deixar a incorporao de polinmios geradores mais flexvel.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 55

REFERNCIAS BIBLIOGRFICAS
[1] SHANNON, C. E., A Mathematical Theory of Communication, Bell Syst. Tech. Journal, Vol. 27, pp. 379-423, 1948. [2] BAHL L., COCKE J., JELINEK F., & RAVIV J., Optimal decoding of linear codes for inimizing symbol error rate, IEEE Transactions on Information Theory, v. 20, p. 284 287, Maro 1974.Journal, Vol. 27, pp. 379-423, 1948. [3] BERROU, C.; GLAVIEUX, A. ; THITIMAJSHIMA, P., Near optimun error correcting coding and decoding: Turbocodes, IEEE Transactions on Information Theory, p. 1261 1271, Outubro 1996. [4] SKLAR, B., Digital Communication - Fundamentals and Applications, 2 ed. Prentice Hall 1998. [5] B. P. LATHI, Modern Digital and Analog Communication Systems, 2 ed. Oxford University Press, Maro 1998. [6] PROAKIS, J. G., Digital Communication, 2 ed., Mc Graw-Hill, 1989. [7] HAYKIN, S., Communication Systems, 2 ed., John Wiley, 2001. [8] MORELOS, R. H., The Art of Error Correcting Coding, 2 ed., John Wiley, 2006. [9] FILHO, E. B. L., Aplicaes em Codificao de Sinais: O casamento aproximado de padres multiescalas e a codificao distribuda de eletrocardiograma, Tese de Doutorado, COPPE/UFRJ, Rio de Janeiro, 2008. [10] VUCETIC, B., Turbo Codes: Principles and Applications, 2 ed., Springer, Junho 2000. [11] WICKER, S. B., Error Control Systems for Digital Communicatios and Storage, Prentice Hall, 1995. [12] MOREIRA, J. C., Essentials of Error-Control Coding, John Wiley, 2006. [13] MOON, T. K., Error Correction Coding Mathematical Methods and Algorithms John Wiley, 2005. [14] DOLINAR, S. & DIVSALAR, D.,Weight distributions for turbo codes using random and nonrandom permutations, JPL TDA Progress Report, v. 42, p. 56 65, agosto 1995.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 56

[15] H. R. SADJADPOUR, H. R., SLOANE, N. J. A., SALEHI, M., NEBE G., Interleaver Design for Turbo Codes, JSAC Journal on Selected Areas in Communications, vol. 19, pp. 831 - 837, 2000. [16] VUCETIC, B.,YUAN, J., TAN, M., Cyclic Shift Interleavers for Turbo Codes. 2nd international Symposium on Turbo Codes pp. 547- 550, 2000. [17] RYAN, W. E., A Turbo Code Tutorial, New Mxico State University. Disponvel em: http://vada.skku.ac.kr/ClassInfo/digital-com2000/slides/turbo2c.pdf. Acesso em: junho de 2011. [18] SILVA, E.A.B., FILHO, E.B.L. MENDONA, G. V., Cdigos de Controle de Erros, COPPE/UFRJ - UFAM, 2009. [19] ABRANTES A. S., Do algoritmo BCJR descodificao turbo, FEUP - 2004. Disponvel em: http://repositorio-aberto.up.pt/bitstream/10216/19744/2/12018.pdf. Acesso em: junho de 2011.

Universidade

Federal

do Amazonas

UFAM

P g i n a | 57

APENDICE A
Neste apndice, so mostrados os cdigos fonte do Codec Turbo implementado em Matlab.

%%%%%%%% %%%%%%%% %%%%%%%%

CODEC TURBO MAP MODULAO BPSK

%% %%%%%%%%%%%%% %%%%%%%%%%%%% %% %%%%%%%%%

JOS MARIA PESSOA - 23/04/2011

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc; clear;

%%%%

DADOS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

bloco = 1000; % TAMANHO DO BLOCO num_blocos = 10; %NMERO DE BLOCOS iteracao = 20; %NMERO DE ITERAES SNR = 1; % SNR EM dB taxa_codigo = 1/2; %TAXA DE CDIGO polinomio = [ 1 1 1; 1 0 1]; %POLINMIO GERADOR

%%%% ENTRELAADOR %%%%%%%%%%%%%%%%%%%%%%%%%%


[D, P] = sort(rand(1,bloco));%ENTRELAADOR (RANDMICO)

%%% Para adotar o entrelaador S-RANDMICO substitua a linha acima pela %%% linha: P = s_randomico(bloco); %%% Para adotar o entrelaador CCLICO substitua a linha acima pela %%% linha: P = ciclico1; %%%%%%%%%% CODIFICADOR %%%%%%%%%%%%%%%%%%%%%%
[n,K]=size(polinomio); m = K - 1; total_erros=0; total_erros_ite = zeros(1,iteracao); rec=0; for h=1:num_blocos

Universidade

Federal

do Amazonas

UFAM

P g i n a | 58

Dados = round(rand(1, bloco - m));

%%% CODIFICADOR COMPONENTE 1 %%%%%%%%%%%%%%%%%%%%


Dad = length(Dados); Y = zeros(1,Dad + m); P1y = zeros(1,Dad + m); estado = zeros(m,1); for i = 1: Dad + m if i <= Dad d = Dados(1,i); elseif i > Dad d = rem( polinomio(1,2:K) * estado, 2 ); end a = rem( polinomio(1,:) * [d ;estado], 2 ); v = polinomio(2,1)*a; for j = 2:K v = xor(v, polinomio(2,j) * estado(j-1)); end; estado = [a ; estado(1:m-1)]; Y(i) = d; P1y(i) = v; % BITS DE PARIDADE DO CODIFICADOR 1 end

%%% CODIFICADOR COMPONENTE 2 %%%%%%%%%%%%%%%%%%%%


P2y = zeros(1,Dad + m); Yp = Y(P); estado = zeros(m,1); for i = 1: Dad + m d = Yp(1,i); a = rem( polinomio(1,:)*[d ;estado], 2 ); v = polinomio(2,1)*a; for j = 2:K v = xor(v, polinomio(2,j)*estado(j-1));

Universidade

Federal

do Amazonas

UFAM

P g i n a | 59

end; estado = [a; estado(1:m-1)]; P2y(i) = v; % BITS DE PARIDADE DO CODIFICADOR 2 end

%%% PERFURADOR %%%%%%%% %%%%%%%%%%%%%%%%%%%%


for i=1: bloco TX(2*i-1) = 2*Y(i)-1; if rem(i,2) TX(2*i) = 2*P1y(i)-1; else TX(2*i) = 2*P2y(i)-1; end end

%%%% CANAL AWGN %%%%%%%%%%%%%%%%%%%%%%%%%%


snr = 10^(SNR/10); Lc = 4 * snr * taxa_codigo; ruido = sqrt( 1/(2 * taxa_codigo * snr)) * randn(1,bloco*2); RX = TX + ruido; bits_errados(1,1:iteracao) = zeros(1, iteracao); comp = fix(length(RX)/2); P1 = zeros(1,comp); P2 = zeros(1,comp); for i = 1: comp X(i) = RX(2*i-1); if rem(i,2)>0 P1(i) = RX(2*i); end if rem(i,2)<1 P2(i) = RX(2*i); end end

Universidade

Federal

do Amazonas

UFAM

P g i n a | 60

%%% AVALIAO DOS ERROS NA ENTRADA DO DECODIFICADOR %%%


Dados_rec = (sign(X)+1)/2; Dados_rec = Dados_rec(1:bloco - m); Erros_rec = length(find(Dados_rec ~= Dados)); rec= Erros_rec+rec;

%%%%%%% DECODIFICADOR % %%%%%%%%%%%%%%%%%%%%%%%


Le=zeros(1,bloco); ENT = [-1 1 1 -1 1 -1 -1 1]; SAI = [-1 1 -1 1 1 -1 1 -1]; for ite=1:iteracao

%%%%% DECODIFICADOR 1 %%%%%%%%%%%%%%%%%%%%%%%%%


La(P)=Le; XP= X(P); gama = zeros(8,bloco); for n=1:bloco for r=1: 8 gama(r,n)= exp(ENT(r)*(0.5*La(n)+0.5*Lc*X(n))+ SAI(r)*0.5*Lc*P1(n)); end end alfa = zeros(4,bloco); alfa(1,1)=1; for n=1:bloco alfa(1,n+1)= alfa(1,n)*gama(1,n) + gama(5,n)*alfa(3,n); alfa(2,n+1)= alfa(1,n)*gama(2,n) + gama(6,n)*alfa(3,n); alfa(3,n+1)= alfa(2,n)*gama(3,n) + gama(7,n)*alfa(4,n); alfa(4,n+1)= alfa(2,n)*gama(4,n) + gama(8,n)*alfa(4,n); soma=sum(alfa(1:4,n+1)); alfa(1,n+1)= alfa(1,n+1)/soma; alfa(2,n+1)= alfa(2,n+1)/soma; alfa(3,n+1)= alfa(3,n+1)/soma;

Universidade

Federal

do Amazonas

UFAM

P g i n a | 61

alfa(4,n+1)= alfa(4,n+1)/soma; end beta = zeros(4,bloco+1); beta(1,bloco+1)=1; for n=bloco:-1:1 beta(1,n)= beta(1,n+1)*gama(1,n) + gama(2,n)*beta(2,n+1); beta(2,n)= beta(3,n+1)*gama(3,n) + gama(4,n)*beta(4,n+1); beta(3,n)= beta(1,n+1)*gama(5,n) + gama(6,n)*beta(2,n+1); beta(4,n)= beta(3,n+1)*gama(7,n) + gama(8,n)*beta(4,n+1); soma=sum(beta(1:4,n)); beta(1,n)= beta(1,n)/soma; beta(2,n)= beta(2,n)/soma; beta(3,n)= beta(3,n)/soma; beta(4,n)= beta(4,n)/soma; end for n=1:bloco R1(1,n) = alfa(1,n)*beta(2,n+1)*gama(2,n); R1(2,n) = alfa(2,n)*beta(3,n+1)*gama(3,n); R1(3,n) = alfa(3,n)*beta(1,n+1)*gama(5,n); R1(4,n) = alfa(4,n)*beta(4,n+1)*gama(8,n); soma1=sum(R1(1:4,n)); R0(1,n) = alfa(1,n)*beta(1,n+1)*gama(1,n); R0(2,n) = alfa(2,n)*beta(4,n+1)*gama(4,n); R0(3,n) = alfa(3,n)*beta(2,n+1)*gama(6,n); R0(4,n) = alfa(4,n)*beta(3,n+1)*gama(7,n); soma2 = sum(R0(1:4,n)); L(n) = log(soma1/soma2); Le(n) = L(n) - La(n) - Lc*X(n) ; end

%%%%% DECODIFICADOR 2 %%%%%%%%%%%%%%%%%%%%%%%%%


La=Le(P);

Universidade

Federal

do Amazonas

UFAM

P g i n a | 62

for n=1:bloco for r=1: 8 gama(r,n)= exp(ENT(r)*(0.5*La(n)+0.5*Lc*XP(n))+SAI(r) *0.5*Lc*P2(n)); end end for n=1:bloco alfa(1,n+1)= alfa(1,n)*gama(1,n) + gama(5,n)*alfa(3,n); alfa(2,n+1)= alfa(1,n)*gama(2,n) + gama(6,n)*alfa(3,n); alfa(3,n+1)= alfa(2,n)*gama(3,n) + gama(7,n)*alfa(4,n); alfa(4,n+1)= alfa(2,n)*gama(4,n) + gama(8,n)*alfa(4,n); soma=sum(alfa(1:4,n+1)); alfa(1,n+1)= alfa(1,n+1)/soma; alfa(2,n+1)= alfa(2,n+1)/soma; alfa(3,n+1)= alfa(3,n+1)/soma; alfa(4,n+1)= alfa(4,n+1)/soma; end beta = zeros(4,bloco+1); beta(1,bloco+1)=alfa(1,n+1); beta(2,bloco+1)=alfa(2,n+1); beta(3,bloco+1)=alfa(3,n+1); beta(4,bloco+1)=alfa(4,n+1); for n=bloco:-1:1 beta(1,n)= beta(1,n+1)*gama(1,n) + gama(2,n)*beta(2,n+1); beta(2,n)= beta(3,n+1)*gama(3,n) + gama(4,n)*beta(4,n+1); beta(3,n)= beta(1,n+1)*gama(5,n) + gama(6,n)*beta(2,n+1); beta(4,n)= beta(3,n+1)*gama(7,n) + gama(8,n)*beta(4,n+1); soma=sum(beta(1:4,n)); beta(1,n)= beta(1,n)/soma; beta(2,n)= beta(2,n)/soma; beta(3,n)= beta(3,n)/soma; beta(4,n)= beta(4,n)/soma;

Universidade

Federal

do Amazonas

UFAM

P g i n a | 63

end for n=1:bloco R1(1,n) = alfa(1,n)*beta(2,n+1)*gama(2,n); R1(2,n) = alfa(2,n)*beta(3,n+1)*gama(3,n); R1(3,n) = alfa(3,n)*beta(1,n+1)*gama(5,n); R1(4,n) = alfa(4,n)*beta(4,n+1)*gama(8,n); soma1=sum(R1(1:4,n)); R0(1,n) = alfa(1,n)*beta(1,n+1)*gama(1,n); R0(2,n) = alfa(2,n)*beta(4,n+1)*gama(4,n); R0(3,n) = alfa(3,n)*beta(2,n+1)*gama(6,n); R0(4,n) = alfa(4,n)*beta(3,n+1)*gama(7,n); soma2 = sum(R0(1:4,n)); L(n) = log(soma1/soma2); Le(n) = L(n) - La(n) - Lc*XP(n) ; end

%%% LIMITADOR RGIDO %%%%%%%%%%%%%%%%%%%%%%%


LLR(P) = (sign(L)+1)/2; LLR = LLR(1:bloco - m); bits_errados(ite) = length(find(LLR ~= Dados)); end

%%% SADA DE DADOS %%%%%%%%%%%%%%%%%%%%%%%%%%


total_erros_ite = total_erros_ite + bits_errados; total_erros = total_erros + bits_errados(iteracao); BER = total_erros/ (bloco * h); BER_ite = total_erros_ite/ (bloco * h); fprintf('Bloco = '); disp(h);fprintf('\b'); fprintf('Erros recebidos no bloco = '); disp(Erros_rec);fprintf('\b'); fprintf('Erros recebidos acumulados = '); disp(rec);fprintf('\b'); fprintf('Bits no corrigidos em cada iterao = '); disp(bits_errados);fprintf('\b'); fprintf('Total de bits no corrigidos ='); disp(total_erros);fprintf('\b');

Universidade

Federal

do Amazonas

UFAM

P g i n a | 64

fprintf('Total de bits transmitidos ='); disp(bloco * h);fprintf('\b'); fprintf('BER ='); disp(BER);fprintf('\b'); fprintf('BER_ite ='); disp(BER_ite);fprintf('\b'); end

Universidade

Federal

do Amazonas

UFAM

P g i n a | 65

APENDICE B
Este cdigo fonte gera um entrelaador s-randmico.

%%%% ENTRELAADOR S_RANDMICO %%%%%%%%%%%%%%%%%%%


function P = s_randomico(bloco) bloco_s = bloco; count_max = 10000; i = 1; count = 0; A(i) = randint(1,1,bloco_s)+1; s = fix (sqrt(bloco_s/2)); i=i+1; flag_count = 0; h=1; while i <= bloco_s && count <= (count_max + 1) ref_entrada = length (A); A(i) = randint(1,1,bloco_s) + 1; flag = 0; final = length (A); inicio = final - s; if inicio <= 0 inicio = 1; end

%%%%%% TESTA SE NUMERO REPETIDO %%%%%%%%%%%%%%%%


D = length (A) - 1; while ( D > 0 ) && (flag == 0) if ( A(i) ~= A(D) ) D = D - 1; flag = 0; % NMERO NO REPETIDO

Universidade

Federal

do Amazonas

UFAM

P g i n a | 66

else flag = 1; % NMERO REPETIDO end end

%%%%%% TESTA SE O NMERO MAIOR QUE s % %%%%%%%%


while (final > inicio) && (flag == 0) if abs( A(i) - A(final - 1) ) > s final = final - 1; flag = 0; % NUMERO APROVADO else flag = 1; % NUMERO REPROVADO end end

%%%%%%%%% DESCARTA NMERO REPROVADO %%%%%%%%%


if flag == 1 i = i - 1; end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
i = i + 1;

% IDENTIFICA REDUNDNCIAS
ref_saida = length (A); if ref_saida - ref_entrada == 0 count = count + 1; else count = 0; end

%%%% CONDIO DE PARADA OU REDUO DE s %%%%%%%%%%


if count >= count_max && i < (bloco_s*0.99) A=[ ]; i = 1; count = 0;

Universidade

Federal

do Amazonas

UFAM

P g i n a | 67

A(i) = randint(1,1,bloco_s)+1; s = fix (sqrt(bloco_s/2)/2); i=i+1; flag_count = 0; end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end if count >= count_max A=A(1,1: i-1); end B = [1:1:bloco_s]; C = [ ]; k = 1; for n = 1 : length(B) flag = 1; m = 1; while B(n) ~= A(m) && flag == 1 m = m + 1; if m > length(A) C(k) = B(n); flag = 0; m = 1; k = k + 1; end end end

Universidade

Federal

do Amazonas

UFAM

P g i n a | 68

APENDICE C
Este cdigo fonte gera um entrelaador cclico.

%%%% ENTRELAADOR CCLICO %%%%%%%%%%%%%%%%%%%%%


function Alpha= ciclico1() x=1; deslocamento=2; % ESCOLHA DO DESLOCAMENTO linha=20; % ESCOLHA DO NMERO DE LINHAS coluna=50; % ESCOLHA DO NMERO DE COLUNAS for n=1:coluna for m=1:linha A(m,n)=x; x = x + 1; end end for P=2:linha A(P,:)=[A(P,(coluna-(P-1)*deslocamento+1):coluna) ... A(P,1:(coluna-(P-1)*deslocamento))]; end x=1; for n=1:coluna for m=1:linha Alpha(x)=A(m,n); x = x + 1; end end

Das könnte Ihnen auch gefallen