• Nenhum resultado encontrado

Projeto de entrelaçadores para códigos turbo

N/A
N/A
Protected

Academic year: 2021

Share "Projeto de entrelaçadores para códigos turbo"

Copied!
88
0
0

Texto

(1)U NIVERSIDADE F EDERAL DE P ERNAMBUCO C ENTRO DE T ECNOLOGIA E G EOCIÊNCIAS P ROGRAMA DE P ÓS - GRADUAÇÃO EM E NGENHARIA E LÉTRICA. M ARCEL JAR E S ILVA. P ROJETO DE E NTRELAÇADORES PARA. C ÓDIGOS T URBO. R ECIFE , D EZEMBRO DE 2006..

(2) M ARCEL JAR E S ILVA. P ROJETO DE E NTRELAÇADORES PARA. C ÓDIGOS T URBO. Dissertação submetida ao Programa de PósGraduação em Engenharia Elétrica da Universidade Federal de Pernambuco como parte dos requisitos para obtenção do grau de Mestre em. Engenharia Elétrica. O RIENTADOR : P ROF. C ECILIO J OSÉ L INS P IMENTEL , P H .D.. Recife, Dezembro de 2006.. c Marcel Jar e Silva, 2006.

(3)

(4)

(5) À minha esposa, Fernanda.

(6) AGRADECIMENTOS No decorrer destes quase dois anos que permaneci no programa de mestrado muitas foram as pessoas que de uma forma ou outra me ajudaram na elaboração desta dissertação. Dessa forma gostaria de expressar aqui o meu mais profundo agradecimento: À Fernanda que me faz a cada dia querer ser alguém melhor e a minha família, em especial a minhã mãe, um exemplo para mim, e aos meus irmãos pelo apoio e incentivos constantes. Ao meu orientador, Cecílio J. Lins Pimentel, pela constante presença em todas etapas do mestrado, seu incentivo, sua amizade e dedicação constantes. Aos professores do Departamento de Eletrônica e Sistemas, em especial a Ricardo Campello, Márcia Mahon, Hélio Magalhães e Valdemar Rocha que durante todo este meu percurso na UFPE foram fontes de inspiração constante em disciplinas e conversas dentro e fora das salas de aulas. Aos amigos e colegas do laboratório de telecomunicações e da sala 402, pelas conversas tão agradáveis e produtivas e pela disposição em ajudar sempre que possível. À Leandro Rocha, Humberto Neto e Dyanna Gomes, três irmãos que eu ganhei durante esses anos, com os quais passei os bons (muitos) e maus (poucos) momentos nestes últimos anos e que estarão sempre comigo, não importa onde estiverem. Ao Conselho Nacional de Desenvolvimento Científico e Tecnológico (CNPq) e ao Programa de Pós-Graduação em Engenharia Elétrica, especialmente na figura do professor Joaquim Martins, pelo apoio financeiro e a estrutura. Por fim, ao professor Fernando Campello, cuja paixão com a qual trabalha é um exemplo a todos ao seu redor e à Tania Campello, uma segunda mãe pra mim.. M ARCEL JAR E S ILVA. Universidade Federal de Pernambuco 12 de Dezembro de 2006.

(7) Il faut savoir s’instruire dans la gaieté. Le savoir triste est un savoir mort. L’intelligence est joie. — Voltaire.

(8) Resumo da Dissertação apresentada à UFPE como parte dos requisitos necessários para a obtenção do grau de Mestre em Engenharia Elétrica. P ROJETO DE E NTRELAÇADORES. PARA. C ÓDIGOS. T URBO Marcel Jar e Silva Dezembro/2006. Orientador: Prof. Cecilio José Lins Pimentel, Ph.D. Área de Concentração: Comunicações Palavras-chaves: códigos turbo, decodificação iterativa, entrelaçadores Número de páginas: 86 Os entrelaçadores possuem um papel crucial para que os códigos turbo atinjam desempenho próximo da capacidade do canal. Apesar de terem sido introduzidos primeiramente como simples permutações aleatórias, atualmente existem várias classes de entrelaçadores, tais como, S-aleatórios, DRP, polinomiais e quasi-cíclicos, que produzem melhor desempenho para códigos turbo em um canal AWGN e/ou são mais simples de serem armazenados. Este trabalho tem dois objetivos principais. O primeiro é fazer estudos comparativos entre classes de entrelaçadores que apresentam a propriedade da economia de memória em relação aos entrelaçadores aleatórios. Este estudo visa suprir uma lacuna na literatura, que normalmente compara novas classes de entrelaçadores com a classe dos entrelaçadores S-aleatórios. O segundo objetivo é o desenvolvimento de uma nova classe de entrelaçadores que também apresenta a característica da economia de memória, além de garantir altos fatores de espalhamento. Os entrelaçadores pertencentes a esta classe são batizados como entrelaçadores quasi-retangulares..

(9) Abstract of Dissertation presented to UFPE as a partial fulfillment of the requirements for the degree of Master in Electrical Engineering. I NTERLEAVERS D ESIGN FOR T URBO -C ODES Marcel Jar e Silva December/2006. Supervisor: Prof. Cecilio José Lins Pimentel, Ph.D. Area of Concentration: Communications Keywords: turbo codes, iterative decoding, interleavers Number of pages: 86 Interleavers perform a central role in the near channel capacity performance of turbo codes. Besides been introduced as simple random permutations, nowadays there are several classes of interleavers like s-random, DRP, polynomial, and quasi-cyclic that provide a better performance for turbo codes in an AWGN channel and/or are simpler to store. This work has two main goals. The first one is to perform comparisons between interleaver classes which have the property of memory economy for their allocation, this study aim to fill a lack in the literature, which normally only compares interleavers of new classes with s-random interleavers. The second goal is to develop a new class of interleavers which also have the property of memory economy, besides the fact that it guarantees high spread factors. Interleavers that belong to this class are called quasi-block interleavers..

(10) L ISTA DE F IGURAS 1.1. Sistema de comunicações digitais. . . . . . . . . . . . . . . . . . . . . . . . . . . .. 14. 2.1 2.2 2.3. Codificador turbo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Decodificador turbo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Patamar de erro na curva de desempenho de um código turbo. . . . . . . . . . . . .. 19 22 32. 3.1. Curvas de desempenho para entrelaçadores pseudo-aleatórios, N = 256, 512 e 1024 (R = 1/2). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curvas de desempenho para entrelaçadores pseudo-aleatório e S-aleatório, N = 1024. Padrão de mapeamento de índices para um entrelaçador aleatório, N = 256. . . . . . Padrão de mapeamento de índices para um entrelaçador retangular, N = 256 (16 × 16). Padrão de mapeamento de índices para um entrelaçador polinomial, N = 256 (a = 15, b = 32). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Padrão de mapeamento de índices para um entrelaçador S-aleatório, N = 256 (S = 8). Padrão de mapeamento de índices para um entrelaçador quasi-cíclico, N = 256. . . . Operações realizadas no entrelaçador DRP. . . . . . . . . . . . . . . . . . . . . . . Entrelaçador DRP, N = 256. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.1 4.2 4.3 4.4 5.1 5.2 5.3 5.4. Curvas de desempenho para vários entrelaçadores. N = 256, C1 = C2 = [7 5], 16 iterações, R = 1/2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curvas de desempenho para vários entrelaçadores. N = 256, C1 = C2 = [13 15], 16 iterações, R = 1/2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curvas de desempenho para vários entrelaçadores. N = 1024, C1 = C2 = [13 15], 16 iterações, R = 1/2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FER versus número de iterações. N = 256, C1 = C2 = [13 15], Eb /N0 = 3dB. . . . Entrelaçador quasi-retangular, N = 256, M1 = M2 = 4. . . . . . . . . . . . . . . . Curva de desempenho de um entrelaçador quasi-retangular. N = 256, C1 = C2 = [7 5]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curva de desempenho de um entrelaçador quasi-retangular. N = 256, C1 = C2 = [13 15]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curva de desempenho de um entrelaçador quasi-retangular. N = 1024, C1 = C2 = [13 15]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35 37 38 40 42 43 45 46 47. 55 56 57 59 63 66 67 68.

(11) A.1 A.2 A.3 A.4. Módulo de obtenção de curvas de desempenho. . . . . . . . Módulo de obtenção de estatísticas de destribuição de erros. Módulo de criação de entrelaçadores. . . . . . . . . . . . . Módulo de análise de entrelaçadores. . . . . . . . . . . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. 81 81 82 82.

(12) L ISTA DE TABELAS 2.1. Espectro de distâncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 32. 3.1. Seqüência permutada para ela mesma. . . . . . . . . . . . . . . . . . . . . . . . . .. 40. 4.1 4.2 4.3 4.4. Entrelaçadores DRP com N = 256, R = 1/2. . . . . . . Entrelaçadores DRP com N = 1024, R = 1/2. . . . . . Entrelaçadores Quasi-Cíclicos com N = 256, R = 1/2. Entrelaçadores Quasi-Cíclicos com N = 1024, R = 1/2.. 51 52 52 53. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . .. . . . ..

(13) S UMÁRIO. 1. I NTRODUÇÃO 1.1 Sistemas de Comunicações Digitais . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Códigos Corretores de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Organização da Dissertação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 13 14 15 16. 2. C ÓDIGOS T URBO 2.1 O Codificador Turbo . . . . . . . . . . . . . . . 2.1.1 O Processo de Codificação . . . . . . . . 2.2 Decodificação Turbo . . . . . . . . . . . . . . . . 2.2.1 Algoritmo BCJR . . . . . . . . . . . . . . 2.2.2 Algoritmo BCJR Modificado . . . . . . . 2.3 Regras para Construção de Bons Códigos Turbo 2.4 Análise de Desempenho dos Códigos Turbo . . .. . . . . . . .. 18 18 19 21 22 26 29 29. . . . . . .. 34 34 35 36 37 39 41. . . . .. 48 49 49 50 54. E NTRELAÇADORES Q UASI -R ETANGULARES 5.1 Método de Construção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Análise do Fator de Espalhamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 60 60 64 64. 3. 4. 5. E NTRELAÇADORES 3.1 O Efeito do Comprimento do Entrelaçador . . 3.2 O Efeito da Estrutura do Entrelaçador . . . . 3.3 Tipos de Entrelaçadores . . . . . . . . . . . . 3.3.1 Entrelaçadores Pseudo-Aleatórios . . . . 3.3.2 Entrelaçadores Determinísticos . . . . . 3.3.3 Entrelaçadores Aleatórios com Estrutura. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. . . . . . . .. . . . . . .. C OMPARAÇÕES DE D ESEMPENHO ENTRE C LASSES DE E NTRELAÇADORES 4.1 Plataforma de Simulação . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Escolha dos Parâmetros de Simulação . . . . . . . . . . . . . . . . . . . . 4.3 Escolha dos Entrelaçadores . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . . . .. . . . .. . . . . . . .. . . . . . .. . . . .. . . . . . . .. . . . . . .. . . . .. . . . . . . .. . . . . . .. . . . ..

(14) 6. C ONCLUSÕES , C OMENTÁRIOS E S UGESTÕES 6.1 Conclusões Finais e Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Sugestões para Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . .. 69 69 70. R EFERÊNCIAS. 71. Apêndice A I MPLEMENTAÇÃO C OMPUTACIONAL A.1 Implementação em MATLAB . . . . . . . . . . . . A.1.1 Funções de Conversão . . . . . . . . . . . . . . A.1.2 Funções para Codificação Convolucional . . . . A.1.3 Funções para Codificação e Decodificação Turbo A.2 Implementação em C++ . . . . . . . . . . . . . . . . . A.2.1 Canal Aditivo Gaussiano . . . . . . . . . . . . A.2.2 Alocação Dinâmica de Memória . . . . . . . . A.2.3 Funções para Criação de Entrelaçadores . . . . A.2.4 Interface Gráfica . . . . . . . . . . . . . . . . .. 75 75 76 76 76 77 78 78 78 78. Apêndice B E STABILIDADE N UMÉRICA. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 83.

(15) CAPÍTULO. I NTRODUÇÃO Information is the resolution of uncertainty. — Claude E. Shannon. O. S. últimos 20 anos testemunharam o aparecimento de novos serviços de telecomunicações,. entre os quais destacamos a telefonia celular, a world wide web, o comércio eletrônico e. a televisão digital, dentre outros. Este progresso extraordinário é fruto de importantes descobertas teóricas em telecomunicações, além do aparecimento de novas tecnologias que permitem a criação de dispositivos para telecomunicações cada vez melhores e mais baratos. Um dos principais objetivos de um sistema de telecomunicações é a transmissão (ou armazenamento) de dados, sejam estes voz, vídeo, imagens. Estes dados são produzidos por uma fonte de informação e são recebidos por um destinatário através de um meio de transmissão denominado de canal de comunicações, que pode ser um cabo coaxial, uma fibra ótica, o ar, etc. Devido a diversos fatores tais como interferência eletromagnética, dissipação de calor, dentre outras (fatores normalmente chamados de ruídos), o canal distorce o sinal que trafega por ele. Em sistemas de transmissão analógicos, existem pelo menos duas formas de minimizar os efeitos do ruído:  Aumentando-se a potência de transmissão, o que demanda mais custos de transmissão;  Aumentando-se a banda do canal [1] (em sistemas de modulação em fase), o que não é possível na maioria dos casos; A dificuldade de se contornar os efeitos do ruído do canal em transmissões analógicas, aliada ao aparecimento de circuitos lógicos rápidos com alta escala de integração fazem com que cada vez mais sistemas de telecomunicações analógicos migrem para sistemas digitais. Sistemas digitais.

(16) também são preferíveis aos analógicos por possibilitarem o uso de códigos corretores de erros, o uso de algoritmos de cifragem de dados, o tratamento de dados através de técnicas de processamento digital, além de possuírem esquemas de multiplexação que resultam num melhor aproveitamento da banda passante (CDMA, TDMA), dentre outras vantagens [2]. Por outro lado, a necessidade de sincronização e de protocolos sofisticados são algumas das desvantagens dos sistemas digitais.. 1.1 Sistemas de Comunicações Digitais Um sistema de comunicação digital é caracterizado pelo fato do alfabeto de informação a ser transmitido é finito, ao contrário dos sistemas analógicos. Em 1948, Shannon [3] mostrou que é possível, com a utilização de sistemas de comunicações digitais, codificar os dados de forma a reduzir os erros induzidos pelo canal para qualquer nível desejado. Para tanto necessita-se que a taxa de codificação não ultrapasse a capacidade do canal. Desta forma, torna-se necessário a codificação dos dados que se deseje enviar e a posterior decodificação do mesmo ao recebe-lo. Um dispositivo que realiza esta codificação é denominado de codificador de canal, enquanto o dispositivo de decodificação é denominado de decodificador de canal. Um diagrama em blocos de parte de um sistema de comunicações digitais é mostrado na Figura 1.1. Fonte de. Codificador. Codificador. Informação. de Fonte. de Canal. Ruído. Canal. Destinatário. Decodificador. Decodificador. Informação. de Fonte. de Canal. Figura 1.1: Sistema de comunicações digitais.. Note que este sistema possui, além do codificador e decodificador de canal, um codificador de fonte e o seu respectivo decodificador. Este codificador de fonte é usado para fins de compressão e controle das estatísticas do sinal que será enviado para o codificador de canal. A forma como este codificador funciona, entretanto, foge ao escopo deste trabalho.. 14.

(17) 1.2 Códigos Corretores de Erros Com a publicação do artigo A Mathematical Theory of Communications [3], Shannon lançou as bases para duas novas áreas do conhecimento, a teoria da informação e a teoria de códigos corretores de erros. Segundo este trabalho, uma das formas de se atingir a capacidade do canal é através do mapeamento aleatório de grupos de bits de comprimento k → ∞ para palavras-código de comprimento n → ∞, o que é computacionalmente inviável. Desta forma se iniciou uma busca por códigos computacionalmente viáveis com taxas que se aproximem da capacidade do canal. Vários códigos corretores de erros viáveis foram encontrados no decorrer das décadas seguintes. Estes códigos podem ser separados basicamente em dois grupos, os códigos de bloco, cuja origem remonta ao trabalho de Hamming [4] em 1950 e os códigos convolucionais, criados por Elias [5] em 1955. Existem também códigos formados pela concatenação de dois ou mais códigos [6]. Porém, os melhores códigos encontrados até o começo dos anos 90 necessitavam de aproximadamente 3, 5 dB a mais de potência, em canais do tipo aditivo gaussiano branco (AWGN, do inglês, additive white gaussian noise) para proverem a mesma proteção contra erros que um código que atingisse a capacidade do canal [7]. Isto significa que é necessário se prover o dobro da potência teoricamente necessária para se enviar um sinal através de um canal AWGN, de forma que a proteção contra erros seja igual à de códigos que atinjam a capacidade do canal. Em 1993, Berrou, Glavieux e Thitimajshima [8] introduziram uma nova classe de códigos, os códigos turbo, que podiam alcançar desempenhos apenas 0, 5 dB inferiores em relação à capacidade do canal. É interessante mencionar que dado os excelentes desempenhos destes códigos, muitos pesquisadores receberam os resultados de Berrou et al com descrédito. Assim, só após a reprodução dos resultados por parte de outros pesquisadores a comunidade científica passou a prestar o devido reconhecimento aos autores desta classe de códigos. Esta nova classe se apoia em três princípios fundamentais [9]: 1. Códigos longos com características aleatórias. As pesquisas na área de códigos corretores de erros, nos anos seguintes à publicação pioneira de Shannon, concentraram-se na construção de códigos com bastante estrutura, de forma a garantir boas propriedades de distância mínima e algoritmos de decodificação eficientes. Entretanto, muita estrutura nem sempre resulta nas melhores propriedades de distância, e códigos muito estruturados normalmente atingem desempenhos muito abaixo dos prometidos por Shannon. Desta forma códigos com característi-. 15.

(18) cas pseudo-aleatórias, mas com alguma propriedade que possibilite sua decodificação através de algoritmos eficientes, podem ter capacidade de correção maior. Nos códigos turbo um dispositivo denominado entrelaçador, que realiza uma permutação na seqüência de entrada, é o responsável pelas características pseudo-aleatórias do mesmo; 2. Concatenação. Este conceito, usado primeiramente por Forney [6], consiste na utilização de dois ou mais códigos, concatenados em série ou em paralelo, para realizar a codificação. Nos códigos turbo clássicos são utilizados codificadores convolucionais concatenados em paralelo; 3. Realimentação. O conceito de realimentação é utilizado há mais de cinqüenta anos nas áreas de eletrônica e sistemas de controle, dentre outras. Entretanto, somente com o aparecimento dos códigos turbo este conceito foi aplicado na decodificação de códigos corretores de erros. Nestes códigos, a decodificação é feita iterativamente, de forma a se reaproveitar informações passadas para se obter uma medida de confiabilidade sobre os dados a serem decodificados. Métodos para realizar a decodificação de forma rápida e eficiente de códigos turbo [10] [11] [12], assim como para melhorar o seu desempenho, são temas de vários artigos publicados na literatura [13] [14]. Entre os métodos propostos, a criação de classes de entrelaçadores com certas propriedades tem mostrado ótimos resultados [15] [16] [17]. Este trabalho tem dois objetivos principais. O primeiro é a realização de testes para comparações de desempenho de códigos turbo utilizando diferentes esquemas de entrelaçamento já propostos na literatura. O segundo objetivo é a proposição de uma nova classe de entrelaçadores para serem usados em códigos turbo, a classe de entrelaçadores quasi-retangulares.. 1.3 Organização da Dissertação Esta dissertação é dividida em 6 capítulos. Neste primeiro capítulo é dada uma visão geral dos sistemas de comunicações e códigos corretores de erros, além de se apresentar o objetivo do presente trabalho. O segundo capítulo apresenta os códigos turbo, seus algoritmos de codificação e decodificação, além de certas propriedades e regras para obtenção de bons códigos. O terceiro capítulo aborda os entrelaçadores usados em códigos turbo, apresentando diversas classes de entrelaçadores já propostas na literatura. No Capítulo 4, descreve-se o método utilizado para a realização de comparações de desempenhos de códigos turbo utilizando diferentes entrelaçadores, além de resultados destas comparações. O Capítulo 5 trata da descrição de uma nova classe de entrelaçadores para códigos turbo, denominados entrelaçadores quasi-retangulares. Também apresenta-se neste capítulo. 16.

(19) algumas propriedades destes entrelaçadores, além de curvas de desempenho. O Capítulo 6 apresenta as conclusões deste trabalho, além de alguns comentários e sugestões para trabalhos futuros.. 17.

(20) CAPÍTULO. C ÓDIGOS T URBO Divide et Impera. — Máxima Romana.. E. STE capítulo descreve os processos de codificação e decodificação dos códigos turbo.. Também. apresentam-se algumas regras para a construção de bons códigos turbo e justificativas para o. excelente desempenho obtido por estes códigos.. 2.1 O Codificador Turbo A Figura 2.1 mostra a estrutura do codificador turbo utilizado por Berrou, Glavieux e Thitimajshima em seu trabalho pioneiro sobre o assunto [8]. O codificador turbo é formado pela concatenação em paralelo de dois ou mais codificadores convolucionais sistemáticos realimentados (doravante chamados de codificadores constituintes), que podem ou não serem iguais, e um entrelaçador. No caso de mais de dois codificadores constituintes cada novo codificador terá um entrelaçador distinto em sua entrada. A concatenação é dita ser em paralelo pois os codificadores operam sobre os mesmos blocos de informação de entrada, ao contrário da concatenação em série, onde o segundo codificador recebe como entrada a saída do primeiro codificador [18]. Neste trabalho serão analisados somente os códigos turbo com dois codificadores constituintes realimentados, sistemáticos utilizando um esquema de concatenação em paralelo. O esquema de modulação digital empregado é o BPSK (do inglês binary-phase shift keying). O papel do entrelaçador é o de fazer uma permutação de cada bloco de bits de entrada. Estas versões permutadas dos blocos de entrada atuam como entradas para o segundo codificador, de forma que os dois codificadores operem sobre versões entrelaçadas de um mesmo bloco de informação..

(21) v(0). +. u. +. +. v(1). +. +. +. +. Codificador 1. +. Π. +. +. v(2). +. Entrelaçador +. +. +. Codificador 2 Figura 2.1: Codificador turbo.. 2.1.1. O Processo de Codificação. Os códigos turbo operam com blocos de informação que possuem exatamente o mesmo tamanho do entrelaçador. Isto se deve ao fato de que um entrelaçador de comprimento N só pode realizar a permutação após receber todos os N bits de informação. Como a codificação é realizada de forma sistemática, a seqüência de informação u é a seqüência de paridade v (0) , logo:   (0) (0) (0) (0) u = v(0) = v0 , v1 , v2 , . . . , vN .. (2.1). O primeiro codificador gera a seqüência de paridade:   (1) (1) (1) (1) v(1) = v0 , v1 , v2 , . . . , vN .. (2.2). O entrelaçador reordena os N bits do bloco de informação de forma que o segundo codificador recebe uma seqüência de informação u diferente de u. A seqüência de paridade gerada pelo segundo codificador é:   (2) (2) (2) (2) v(2) = v0 , v1 , v2 , . . . , vN .. A palavra código transmitida é portanto:. 19. (2.3).

(22)   (0) (1) (2) (0) (1) (2) (0) (1) (2) v = v0 , v0 , v0 , v1 , v1 , v1 , . . . , vN , vN , vN , .. (2.4). A taxa deste código turbo é R = 1/3, como pode-se ver na Figura 2.1, porém esta pode ser aumentada através de puncionamento (perfuramento). Uma técnica muito comum é o puncionamento (1). (2). de forma que a seqüência de bits de informação u =   (0) (1) (0) (2) (0) (1) (0) (2) (u0 , u1 , u2 , . . . , uN ) gera a palavra código v = v0 , v0 , v1 , v1 , . . . , vN −1 , vN −1 , vN , vN , ,. alternado dos bits de paridade vl. e vl. obtendo-se assim uma taxa R = 1/2. Normalmente o primeiro codificador constituinte é terminado, isto é, forçado para o estado zero ao fim da codificação de um bloco. É importante salientar que codificadores convolucionais realimentados não necessariamente retornam ao estado zero após uma seqüência de zeros. É necessário determinar em que estado o codificador está no final da transmissão de um bloco e enviar uma seqüência específica para cada estado (estes bits de terminação são normalmente chamados de tail bits). Devido à presença do entrelaçador, há uma grande probabilidade do segundo codificador não ser terminado. Apesar de alguns autores terem proposto técnicas para eliminar este problema [19] e [20], simulações mostram que esta não terminação resulta em uma degradação imperceptível do desempenho para entrelaçadores longos. A razão para a terminação do primeiro codificador constituinte é o fato de que, sem esta terminação, a seqüência contendo N − 1 zeros seguidos de um 1 seria uma entrada válida. Esta seqüência é permutada para ela mesma em alguns permutadores e portanto a distância mínima de um código turbo puncionado seria de apenas 2 [18]. Outra razão para esta terminação é garantir que o próximo bloco de informação encontre o codificador inicialmente no estado zero [21]. É importante salientar que esta necessidade de terminação afeta muito pouco a taxa de codificação, pois normalmente o comprimento do entrelaçador é grande e são necessários, no máximo, apenas ν − 1 bits para a terminação do codificador.. Exemplo Para o codificador da Figura 2.1, atuando em blocos de comprimento 16, com entrelaçador:. Π = (4 5 6 14 8 13 2 9 10 15 16 12 11 7 3 1), a entrada:. 20.

(23) u = (1 0 0 1 1 1 1 0 01 0 1 1 0 1 1), gera, para um esquema de codificação não-puncionado, a palavra-código:. v = (1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 1 0 1 1 0). No caso de um esquema de codificação puncionado, onde os bits de paridade pares correspondem aos bits de paridade do primeiro codificador constituinte, e os bits de paridade ímpar aos do segundo, a palavra código formado pela mesma entrada seria:. v = (1 1 0 0 0 1 1 0 1 0 1 1 1 0 0 0 0 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1).. 2.2 Decodificação Turbo A decodificação turbo usando um algoritmo de máxima verossimilhança, ignorando a estrutura dos codificadores constituintes, precisaria comparar as 2N seqüências possíveis com a seqüência recebida, o que é claramente inviável computacionalmente [22]. A decodificação turbo é portanto realizada através da decodificação iterativa dos códigos constituintes, dividindo-se, assim o processo de decodificação total em processos de decodificação mais simples. Evidências empíricas mostram que este esquema de decodificação, apesar de sub-ótimo, quase sempre converge para uma solução ótima [18]. O diagrama esquemático de um decodificador turbo pode ser visto na Figura 2.2. No diagrama, r(0) , r(1) e r(2) são as componentes do vetor recebido correspondentes à componente sistemática do sinal, v(0) , e as componentes de paridade dos codificadores constituintes, v(1) e   (1) (1) (1) (1) v(2) , respectivamente. u ˆ representa o vetor decodificado. Le = Le (u0 ), Le (u1 ), . . . , Le (uN )   (2) (2) (2) (2) e Le = Le (u0 ), Le (u1 ), . . . , Le (uN ) são os vetores contendo as informações extrínsecas passadas de um decodificador para o outro durante o processo iterativo de decodificação. Na iter(2). ação inicial do decodificador 1, os valores Le (ul ) são iguais às razões de verossimilhança (LLR, do inglês log-likelihood ratio) a priori:. La (ul ) = log. P (ul = +1) , l = 0, . . . , N − 1 P (ul = −1). que, no caso de símbolos de informação equiprováveis, são todas nulas.. 21. (2.5).

(24) r(1). π. (2). Le. −1. Desentrelaçador. DEC 1. −. DEC 2 −. r(0). +. (1). +. Le. π.  u. Entrelaçador. r(2). π. r(0). Entrelaçador Figura 2.2: Decodificador turbo.. O melhor desempenho possível para os decodificadores constituintes (DEC1 e DEC2 na Figura 2.2) é obtido através da utilização de um algoritmo de máxima probabilidade a posteriori (MAP, do inglês maximun a posteriori probability) [23]. Outros decodificadores SISO (do inglês soft-in softoutput) mais simples, como o SOVA (do inglês, soft-output Viterbi algorithm), ou Max-log-MAP podem ser utilizados, porém possuem um desempenho inferior [24], [25] e [26]. O decodificador SISO escolhido para este trabalho é idêntico ao utilizado por Berrou et al [8]. Este é baseado no algoritmo BCJR, criado por Bahl et al [27] em 1974. Na seção seguinte o algoritmo BCJR é apresentado. Em seguida são apresentadas as modificações necessárias propostas por Berrou et al para o algoritmo levar em consideração o caráter recursivo dos códigos turbo.. 2.2.1. Algoritmo BCJR. O algoritmo BCJR busca a minimização da taxa de bits errados, (BER do inglês bit error rate), l = ul |r). Para isto o algoritmo calcula as razões de verossimilhança de isto é, a probabilidade P (u. probabilidade a posteriori (APP LLR’s, do inglês a posteriori probability log-likelihood ratios): .  P (ul = +1|r) L(ul ) = log , l = 0, . . . , N − 1. P (ul = −1|r). (2.6). De forma que cada bit de informação decodificado é obtido através da seguinte regra de decisão:. l = u. ⎧ ⎪ ⎨0,. caso L(ul ) < 0;. ⎪ ⎩1,. caso L(ul ) ≥ 0.. 22. l = 0, 1, ..., N − 1.. (2.7).

(25) Para iniciar o desenvolvimento do algoritmo, utiliza-se a regra de Bayes para se obter: P (ul = +1, r) . P (r). P (ul = +1|r) =. (2.8). Porém, temos que:. P (ul = +1) =. P (u),. (2.9). u∈Ul+. isto é, a probabilidade de ul ser igual a +1 é igual a soma das probabilidades de todos os vetores u tais que a l-ésima componente seja igual a +1 (o espaço destes vetores é representado por Ul+ ). Usando o resultado de (2.9) em (2.8) obtém-se:

(26). u∈Ul+. P (ul = +1|r) =. P (u, r). . P (r)

(27) Usando novamente a regra de Bayes e lembrando que B P (A, B) = P (A), temos:

(28). P (ul = +1|r) =. P (r|u)P (u). u∈Ul+.

(29). u. P (r, u).

(30). =. u∈Ul+.

(31). u. P (r|u)P (u). P (r|u)P (u). .. (2.10). (2.11). Finalmente, lembrando que há uma relação determinística entre u e v, ficamos com:

(32). u∈Ul+.

(33). P (ul = +1|r) =. u. P (r|v)P (u). P (r|v)P (u). ,. (2.12). o que, substituído em (2.6) fornece:

(34). u∈Ul+. P (r|v)P (u). u∈Ul−. P (r|v)P (u). L(ul ) = log

(35). . .. (2.13). O cálculo de L(ul ) através de (2.13) se torna inviável quando o comprimento dos vetores de entrada (N ) é grande, devido ao fato de ser necessário a realização de 2N −1 cálculos de somas e multiplicações de probabilidades. Por isto, o algoritmo BCJR se utiliza da estrutura em treliça dos códigos para diminuir a complexidade computacional do processo de decodificação. Usando-se a estrutura em treliça do código, pode-se reformular (2.8) para se obter:

(36). P (ul = +1|r) =. (s ,s)∈Sl+. P (sl = s , sl+1 = s, r) P (r). ,. (2.14). onde (s , s) ∈ Sl+ representa o espaço de todas as transições de estados sl = s e sl+1 = s que produzem o bit de saída ul = +1. Obtém-se assim:. 23.

(37)

(38). L(ul ) = log

(39). (s ,s)∈Sl+. (s ,s)∈Sl−. P (s , s, r). . P (s , s, r). .. (2.15). Embora seja equivalente à (2.13), a equação (2.15) apresenta a necessidade de se realizar apenas 2v somas de probabilidades (uma para cada par de estados), o que a torna uma alternativa muito atraente quando o valor de N é elevado. A expressão (2.15) pode ser calculada recursivamente. Para isto, note que: P (s , s, r) = P (s , s, rt<l , rl , rt>l ),. (2.16). onde, rt<l representa a porção da seqüência recebida até o instante l, rl representa a porção da seqüência recebida no instante l e rt>l representa a porção da seqüência recebida após o instante l. Aplicando a regra de Bayes, temos:. P (s , s, rt<l , rl , rt>l ) = P (rt>l |s , s, rt<l , rl )P (s , s, rt<l , rl ) = P (rt>l |s , s, rt<l , rl )P (s, rl |s , rt<l )P (s , rt<l ).. (2.17). Como a probabilidade rt>l só depende do estado e da entrada no tempo l, pode-se reescrever (2.17) como: P (s , s, rt<l , rl , rt>l ) = P (rt>l |s)P (s, rl |s )P (s , rt<l ).. (2.18). Os três termos do produto do lado direito de (2.18) são renomeados:. αl (s )  P (s , rt<l );. (2.19a). βl+1 (s)  P (rt>l |s);. (2.19b). γl (s , s)  P (s, rl |s ).. (2.19c). É importante perceber que cada um destes três termos tem um significado próprio: αl (s) : Probabilidade que a seqüência recebida até o tempo l seja rt<l , e o codificador esteja no estado s em l; βl+1 (s) : Probabilidade que a seqüência recebida após o tempo l seja rt>l , e o codificador esteja no estado s em l + 1; γl (s, rl |s ) : Probabilidade de transição para o estado s em l + 1 com seqüência recebida rl , dado que o codificador está no estado s em l. 24.

(40) Desta forma, pode-se reescrever (2.18) da seguinte forma: P (s , s, r) = αl (s )βl+1 (s)γl (s , s),. (2.20). o que, substituindo em (2.15) fornece:

(41). L(ul ) = log

(42). (s ,s)∈Sl+. (s ,s)∈Sl−. αl (s )βl+1 (s)γl (s , s) αl (s )βl+1 (s)γl (s , s). . .. (2.21). Pode-se calcular os valores de αl (s) recursivamente da seguinte forma:. αl+1 (s) = P (s, rt<l+1 ; ). P (s , s, rt<l+1 ); = s ∈σl. =. P (s, rl |s , rt<l )P (s , rt<l );. s ∈σl. =. (2.22). P (s, rl |s )P (s , rt<l );. s ∈σl. =. γl (s , s)αl (s ),. s ∈σl. onde σl é o conjunto de todos os estados no tempo l. As condições de contorno (para um codificador iniciando no estado zero) são:. . α0 (s ) =. ⎧ ⎪ ⎨1,. caso s = 0;. ⎪ ⎩0,. caso s = 0.. (2.23). Pode-se calcular os valores de βl (s ) recursivamente fazendo-se:. βl (s ) = P (rt>l−1 |s ); = P (rl , rt>l |s );. P (s, rl , rt>l |s ); = s∈σl+1. =. P (rt>l |s, s , rl )P (s, rl |s );. s∈σl+1. =. P (rt>l |s)P (s, rl |s );. s∈σl+1. =. βl+1 (s)γl (s , s),. s∈σl+1. 25. (2.24).

(43) onde σl+1 é o conjunto de todos os estados no tempo l + 1. As condições de contorno para um codificador terminado são:. βN (s) =. ⎧ ⎪ ⎨1, ⎪ ⎩0,. caso s = 0;. (2.25). caso s = 0.. No caso de um codificador não terminado, assume-se que o codificador pode estar, ao final do processo, em qualquer um dos 2ν estados com probabilidade igual. As condições de contorno, neste caso, são portanto:. βN (s) =. 1 , ∀s. 2ν. (2.26). Pode-se reescrever (2.19c) como:. γl (s , s) = P (s, rl |s ); P (s, rl , s ) ; P (s )    P (s , s) P (s, rl , s ) ; = P (s ) P (s , s). =. (2.27). = P (s|s )P (rl |s , s). Como a transição de s para s determina a porção da palavra código para esta transição, temos: γl (s , s) = P (s|s )P (rl |vl ).. (2.28). Finalmente, dado um certo estado, a sua transição para outro estado é completamente determinada pela entrada, portanto, caso seja possível a transição de s para s, temos: γl (s , s) = P (ul )P (rl |vl ).. (2.29). O algoritmo BCJR possui problemas de estabilidade numérica. Desta forma, várias alternativas para se contornar estes problemas foram propostas. O Apêndice B apresentam algumas destas alternativas.. 2.2.2. Algoritmo BCJR Modificado. Para a decodificação iterativa, faz-se necessário extrair a informação extrínseca contida em (2.21). Usando-se a LLR em (2.5): 26.

(44) . La (ul )  log. P (ul = +1) P (ul = −1). . .. (2.30). e as identidades (2.31) e (2.32):    P (ul = −1) /P (ul = +1)  P (ul = +1) /P (ul = −1) = P (ul = +1) , 1 + P (ul = −1) /P (ul = +1). e.    P (ul = −1) /P (ul = +1)  P (ul = −1) /P (ul = +1) = P (ul = −1) , 1 + P (ul = −1) /P (ul = +1). (2.31). (2.32). é possível reescrever P (ul ) como: . P (ul ) =. e−La (ul )/2 1 + e−La (ul )/2. . eul La (ul )/2 .. (2.33). Como o termo entre parênteses de (2.33) é independente do valor de ul , esta equação é simplificada para: P (ul ) = Al eul La (ul )/2 .. (2.34). De posse de (2.34), é necessária, para o cálculo de (2.29), uma expressão para a obtenção dos valores de P (rl |vl ). Cada decodificador da Figura 2.2 recebe duas entradas, r(0) que é a porção do vetor recebido correspondente aos bits sistemáticos, e r(1) , no caso do decodificador 1 ou r(2) , no caso do decodificador 2, que são as porções do vetor recebido correspontentes aos bits de paridade dos dois codificadores constituintes. Para simplificar a notação, define-se rs  r(0) , vs  v(0) = u, rp  r(1) e vp  v(1) para o codificador/decodificador 1, e rp  r(2) e vp  v(2) para o codificador/decodificador 2. A cada bit a ser decodificado, o decodificador (independente de qual) recebe um vetor rl = (rls , rlp ), correspondente à versão corrompida pelo canal do vetor vl = (vls , vlp ) = (ul , vlp ). Desta forma, para um canal AWGN com variância σ 2 :. 2. 2 (rp − v p ) (rs − ul ) P (rl |vl ) ∝ exp − l 2 − l 2l 2σ 2σ. . ,. (2.35). ou . (rs )2 + (ul )2 + (rlp )2 + (vlp )2 P (rl |vl ) ∝ exp − l 2σ 2 27. . .  ul rls + vlp rlp exp . σ2. (2.36).

(45) Como o primeiro termo de (2.36) independe do valor de ul , a equação pode ser reescrita da seguinte forma: . P (rl |vl ) ∝ Bl exp.  ul rls + vlp rlp . σ2. (2.37). Desta forma, observando-se (2.29), (2.34) e (2.37), temos: γl (s , s) ∝ Al Bl exp [ul La (ul ) /2] exp. .  ul rls + vlp rlp , σ2. (2.38). onde σ 2 = N0 /2REb . Em (2.21) os valores de γl (s , s) sempre aparecem simultaneamente no numerador e no denominador. Logo, pode-se fazer:  s  ul rl + vlp rlp γl (s , s) = exp [ul La (ul ) /2] exp ; σ2   1 1 p p s = exp ul (La (ul ) + Lc rl ) + Lc vl rl ; 2 2     1 1 p p s = exp ul (La (ul ) + Lc rl ) exp Lc vl rl ; 2 2   1 = exp ul (La (ul ) + Lc rls ) γle (s , s), 2. (2.39) (2.40) (2.41) (2.42). onde. Lc . 4REb , N0. (2.43). e γle (s , s)  exp. .  1 Lc rlp vlp . 2. (2.44). Finalmente, pode-se reescrever (2.21) como:

(46). L(ul ) = log

(47). (s ,s)∈Sl+. (s ,s)∈Sl−.

(48). = log

(49). (s ,s)∈Sl+. (s ,s)∈Sl−. αl (s )βl+1 (s)γl (s , s) αl (s )βl+1 (s)γl (s , s) αl (s )βl+1 (s) exp. . ;. 1. (2.45) . s e  2 ul (La (ul ) + Lc rl ) γl (s , s) 1  αl (s )βl+1 (s) exp 2 ul (La (ul ) + Lc rls ) γle (s , s).

(50). = Lc rls + La (ul ) + log

(51). (s ,s)∈Sl+. (s ,s)∈Sl−. 28. αl (s )βl+1 (s)γle (s , s) αl (s )βl+1 (s)γle (s , s). . ;. (2.46). . .. (2.47).

(52) O primeiro termo de (2.47) é chamado de valor do canal, o segundo termo representa a informação a priori e o terceiro termo é a informação extrínseca que é enviada como informação a priori para o outro decodificador. Na última iteração, os valores L(ul ) são utilizados na regra de decisão (2.7) para a obtenção do vetor decodificado.. 2.3 Regras para Construção de Bons Códigos Turbo A construção de bons códigos turbo ainda é um tema em constante desenvolvimento. Entretanto, existem algumas regras simples, já sedimentadas na literatura acerca do tema, para a construção dos mesmos:  Escolhem-se codificadores constituintes realimentados: Em codificadores não realimentados, seqüências longas de zeros fazem o codificador retornar ao estado inicial e geram palavras código com baixo peso de Hamming. No caso dos codificadores realimentados, seqüências de zeros fazem os mesmos percorrerem um ciclo de estados o que gera palavras códigos com alto peso de Hamming;  Escolhem-se polinômios primitivos para a realimentação: Esta regra é baseada na observação de que o peso de Hamming do ciclo mínimo possui maior probabilidade de ser maior em ciclos longos. É sabido da teoria dos registradores de deslocamento lineares realimentados que a escolha de um polinômio primitivo de grau ν como polinômio de realimentação resulta em um ciclo máximo. O comprimento deste ciclo é 2ν − 1.  Escolhem-se entrelaçadores com fatores de dispersão apropriados: Esta regra trás em si um dilema. Entrelaçadores com padrões muito regulares podem apresentar fatores de espalhamento altos (isto é, mapeiam bits que originalmente se encontravam em posições próximas para posições afastadas), entretanto, não possuem bom desempenho devido às multiplicidades altas do seu espectro de distâncias. Entrelaçadores puramente aleatórios, por sua vez, resultam em códigos com baixas distâncias mínimas (df ree ). É necessário se fazer então um compromisso entre estrutura e aleatoriedade na criação de entrelaçadores, como será visto no próximo capítulo.. 2.4 Análise de Desempenho dos Códigos Turbo Em [28] a análise de desempenho dos códigos turbo é feita através de limitantes da probabilidade de erro que levam em conta o espectro de distâncias do mesmo. Para isto os autores analisaram 29.

(53) primeiramente o desempenho de códigos convolucionais para traçar um paralelo com os códigos turbo. Os passos principais desta análise estão descritos a seguir. A BER de um código convolucional, utilizando-se um algoritmo de máximo-verossimilhança (ML, do inglês, maximun-likelihood), em um canal AWGN, é limitada superiormente por: . N. Pb ≤. 2. wi. N. i=1. 2REb di N0. Q. . ,. (2.48). [28] onde, wi corresponde ao peso de Hamming da i-ésima seqüência de informação e di ao peso de Hamming da i-ésima palavra-código. Pode-se definir o peso médio de informação por palavra-código como:. w ˜d =. Wd , Nd. (2.49). onde Wd é a soma dos pesos de Hamming de informação de todas as palavras-código de peso d, e Nd é o número total de palavras-código de peso d. Desta forma, (2.48) pode ser reescrita como: 2(ν+N ). Pb ≤. d=df ree. Nd w ˜d Q N. . 2REb d N0. . .. (2.50). Para N suficientemente grande, se um código convolucional possui Nd0 palavras-código de peso d devido a seqüências de informação x cujo primeiro 1 ocorre no tempo 0, então ele também possui Nd0 palavras-código de peso d devido a seqüências Dx, onde D representa um atraso, e assim sucessivamente. Desta forma:. lim. N →∞. Nd = Nd0 , N. (2.51). e Wd W0 = d0  w ˜d0 , N →∞ Nd Nd. lim w ˜d = lim. N →∞. (2.52). onde Wd0 é a soma dos pesos de Hamming de todas as palavras-código de peso d obtidas através de seqüências de informação cujo primeiro 1 ocorre no tempo 0. Desta forma, podemos reescrever (2.50) como: . 2(ν+N ). Pb ≤. d=df ree. Nd0 w ˜d Q. 2REb d N0. . 30. . 2(ν+N ). =. d=df ree. Wd0 Q. 2REb d N0. . ,. (2.53).

(54) que é o limitante da união para decodificação de máxima verossimilhança. É devido a este resultado que a busca de bons códigos convolucionais é tradicionalmente feita através da procura de códigos que maximizem a distância mínima (df ree ). O desempenho de códigos turbo empregando um esquema de decodificação ML também pode ser limitado através de (2.50). Entretanto, devido ao entrelaçador, o código é variante no tempo e, portanto, uma seqüência Dx possui baixa probabilidade de ser mapeada para Dx , onde x é a ˜d é muito palavra-código gerada pela seqüência x. Desta forma, para entrelaçadores aleatórios Nd w menor do que N para palavras-código de baixo peso. Isto se deve ao entrelaçador que mapeia, com alta probabilidade, seqüências que geram palavras-código de baixo peso no primeiro codificador constituinte para palavras código de alto peso no segundo codificador constituinte. Desta forma, em um código turbo, as primeiras componentes do espectro de distâncias são menos densas, em relação às primeiras componentes de códigos convolucionais. Este fenômeno foi denominado em [28] de spectral thinning. Em [23] é feita uma comparação entre os espectros de distâncias de códigos turbo e convolucionais com taxas iguais, mostrando claramente a vantagem do primeiro sobre o segundo. Os primeiros termos do espectro de distâncias de um código convolucional terminado (com seqüência de entrada de comprimento 32, sendo os quatro últimos bits de terminação) e um código turbo com mesmo comprimento, codificadores constituintes iguais e um entrelaçador pseudo-aleatório, são mostrados na Tabela 2.1. Como ambos os códigos da Tabela 2.1 possuem o mesmo número de palavras código, a menor densidade nos primeiros termos do espectro do código turbo é compensada por uma maior densidade nos termos de maior distância (não mostrados na tabela). O fenômeno de spectral thinning, aliado à decodificação iterativa, é a chave para a obtenção do excelente desempenho dos códigos turbo, sobretudo nas regiões de baixa relação sinal ruído. No caso de relação sinal ruído moderadas e altas, o limitante da união de (2.50) é dominado pelo termo da distância mínima, logo: Nf ree w ˜f ree Pb ∼ Q = N. . 2REb d N0. . (2.54). Como a inclinação da curva de desempenho nestas condições é essencialmente determinada pela distância mínima do código [28], pode-se concluir que o fenômeno do patamar de erro observado nas curvas de desempenho dos códigos turbo deve-se ao fato deste códigos possuírem uma distância mínima relativamente baixa1 . A Figura 2.3 mostra a curva de desempenho para o código turbo 1 No. caso do código da Tabela 2.1, por exemplo, a distância mínima do código turbo é igual à do código convolucional constituinte.. 31.

(55) Tabela 2.1: Espectro de distâncias. Código Convolucional. Código Turbo. Peso. Multiplicidade. Peso. Multiplicidade. 0. 1. 0. 1. 1. 0. 1. 0. 2. 0. 2. 0. 3. 0. 3. 0. 4. 0. 4. 0. 5. 0. 5. 0. 6. 27. 6. 6. 7. 28. 7. 9. 8. 71. 8. 15. 9. 118. 9. 9. 10. 253. 10. 80. 11. 558. 11. 119. 12. 1372. 12. 484. 13. 3028. 13. 1027. 14. 6573. 14. 3007. 15. 14036. 15. 6852. apresentado em [8] após 18 iterações. Note o aparecimento do fenômeno do patamar de erro para Eb /N0 > 0.8. −1. 10. −2. 10. −3. BER. 10. −4. 10. −5. 10. −6. 10. −7. 10. 0.4. 0.6. 0.8. 1. 1.2. E /N b. 1.4. 1.6. 1.8. 2. 0. Figura 2.3: Patamar de erro na curva de desempenho de um código turbo.. A partir destes resultados pode-se dividir a análise da performance de códigos turbo em duas. 32.

(56) regiões: 1. Baixa relação sinal ruído: Nesta região, batizada de waterfall, há uma acentuada queda da BER com o aumento da relação sinal-ruído. Esta queda acentuada é conseqüência da baixa multiplicidade dos primeiros termos do espectro de distâncias; 2. Média e alta relação sinal ruído: Nesta região, batizada de patamar de erro, o decaimento da BER é suave, devido ao fato da distância mínima, que não é alta para códigos turbo, dominar o resultado de (2.50). A busca por códigos turbo bons tem se concentrado na procura de entrelaçadores que aumentem a distância mínima do código, sem perder a propriedade de spectral thinning. O capítulo seguinte apresenta detalhadamente o papel dos entrelaçadores para a codificação e decodificação turbo, além de apresentar vários tipos de entrelaçadores propostos na literatura.. 33.

(57) CAPÍTULO. E NTRELAÇADORES We can think of good codes, and even decode them. — Battail. O. entrelaçador de um codificador turbo realiza uma permutação da seqüência de bits de entrada. A seqüência permutada é a entrada do segundo codificador. Devido ao seu papel cru-. cial na obtenção do excelente desempenho dos códigos turbo faz-se necessário estudá-los de forma detalhada. No decorrer deste capítulo são descritas as técnicas mais importantes de construção de entrelaçadores.. 3.1 O Efeito do Comprimento do Entrelaçador O fenômeno de spectral thinning, definido no capítulo anterior, está intimamente conectado ao comprimento N do entrelaçador. De fato, as multiplicidades dos primeiros termos do espectro de distâncias são reduzidas por um fator de aproximadamente 1/N (no caso dos entrelaçadores aleatórios). Este fator é chamado de ganho do entrelaçador [29]. Como visto no capítulo anterior, o desempenho de um código turbo para baixas relações sinal ruído é fortemente influenciado por estas multiplicidades. O tamanho do entrelaçador é um fator dominante para o desempenho dos códigos turbo nesta região [21]. A Figura 3.1 ilustra esta propriedade. Esta apresenta curvas de desempenho de códigos turbo com codificadores constituintes [1 + D2 + D3 , 1 + D + D3 ]1 , onde o primeiro termo representa a 1. Cuja representação em octal é [13 15], tomando-se os bits mais a esquerda como os mais significativos. Estes codificadores consti-. tuintes são os mesmos usados no padrão 3GPP [30]..

(58) realimentação, e diferentes comprimentos de entrelaçadores obtidas através de simulações.. Figura 3.1: Curvas de desempenho para entrelaçadores pseudo-aleatórios, N = 256, 512 e 1024 (R = 1/2).. 3.2 O Efeito da Estrutura do Entrelaçador Como visto no capítulo anterior, o desempenho dos códigos turbo na região de alta relação sinal ruído é dominada pela distância mínima e pelos primeiros componentes do espectro de distâncias. Estes componentes são produzidos por seqüências de entrada de baixo peso de Hamming. Desta forma, a estrutura de um entrelaçador ideal deve sempre fazer com que as seqüências de entrada que geram as palavras-código de peso baixo sejam mapeadas para seqüências que geram palavras-códigos de peso alto. Uma característica importante dos entrelaçadores é o seu fator de espalhamento, que é uma medida que indica o quão afastadas estão duas posições que antes de serem entrelaçadas estavam próximas. Existem duas definições formais para o fator de espalhamento.. Definição 1: Esta definição é usada quando se deseja criar um entrelaçador através de um algoritmo que tem como argumento um fator de espalhamento mínimo. Foi utilizada pela primeira vez em [15]. Seja J o fator de espalhamento mínimo requerido e sejam ui e uj duas posições distintas. Definimos S  (J, ui , uj ) como:. 35.

(59) S  (J, ui , uj ) = |π(ui ) − π(uj )|, para |ui − uj | < J,. (3.1). a partir de S  (J, ui , uj ) define-se S  (J, ui ) como: S  (J, ui ) = min (S  (J, ui , uj )), j,j=i. (3.2). finalmente, a partir de S  (J, ui ) obtém-se o fator de espalhamento: S(J) = min(S  (J, ui )). i. (3.3). Normalmente S = J, isto é, o fator de espalhamento é igual ao fator de espalhamento mínimo requerido, entretanto J é somente um limitante inferior, portanto é possível se obter fatores de espalhamento maiores do que os requeridos.. Definição 2: Esta definição, criada em [31], é mais flexível que a anterior, pois não necessita da especificação de um parâmetro de espalhamento mínimo e não é ligada a nenhuma classe de entrelaçadores específica.  Sejam ui e uj duas posições distintas. Definimos Snew (J, ui , uj ) como:.  Snew (ui , uj ) = |π(ui ) − π(uj )| + |ui − uj |,. (3.4).  (ui , uj ) define-se S  (ui ) como: a partir de Snew   (ui ) = min (Snew (ui , uj )), Snew j,j=i. (3.5). finalmente, a partir de Snew (ui ) obtem-se o fator de espalhamento: Snew = min(S  (ui )). i. (3.6). A Figura 3.2 mostra as curvas de desempenho de um código turbo com um entrelaçador de comprimento N = 1024 pseudo-aleatório e de outro de mesmo comprimento, porém com um fator de espalhamento S = 8 (segundo a definição 1).. 3.3 Tipos de Entrelaçadores É possível classificar os entrelaçadores propostos na literatura em categorias e descrever algumas classes de entrelaçadores mais importantes. A seguir são descritas diversas classes de entrelaçadores 36.

(60) Figura 3.2: Curvas de desempenho para entrelaçadores pseudo-aleatório e S-aleatório, N = 1024.. pertencentes a cada categoria: entrelaçadores puramente aleatórios, entrelaçadores determinísticos e entrelaçadores aleatórios com estrutura.. 3.3.1. Entrelaçadores Pseudo-Aleatórios. Os códigos turbo originais [8] foram construídos utilizando entrelaçadores que realizam uma permutação aleatória da seqüência de entrada. Estes entrelaçadores apresentam a vantagem de não possuírem padrões de repetição. Desta forma, uma seqüência de entrada que gera uma palavra código de peso baixo, mapeada para outra seqüência que também gera uma palavra-código de peso baixo, possui uma baixa probabilidade de, ao ser deslocada, apresentar o mesmo problema. Suponha que a entrada:. u(D) = (1 + Dt )Dq1 , é permutada para: u (D) = (1 + Dt )Dq2 . Logo, caso o valor de t seja um pequeno múltiplo do período fundamental do polinômio de realimentação do codificador, ambos codificadores geram seqüências com baixo peso de Hamming [21], gerando assim uma palavra-código com baixo peso. Como o entrelaçador não apresenta padrões, a. 37.

(61) probabilidade de: u(D) = (1 + Dt )Dq1 +τ , ser permutada para: u (D) = (1 + Dt )Dq2 +τ , é muito baixa. Veremos mais adiante que alguns entrelaçadores determinísticos mantém certos padrões, de forma que a probabilidade de uma seqüência manter uma permutação ruim após um deslocamento é bem maior que no caso dos entrelaçadores aleatórios. Os codificadores aleatórios apresentam duas desvantagens. A primeira é que estes permitem o mapeamento de índices próximos na entrada para índices próximos na saída, por exemplo, a seqüência (. . . u6 , u7 , u8 , u9 . . .) pode ser mapeada para (. . . u6 , u32 , u86 , u9 . . .). Isto permite o aparecimento de palavras-código de baixo peso de Hamming, fazendo que a distância mínima do código (df ree ) seja baixa. Outra desvantagem é a necessidade de se armazenar todos os N índices do entrelaçador no codificador e todos os N índices do desentrelaçador no decodificador. O padrão de aleatoriedade do entrelaçador é investigado na Figura 3.3. Nesta figura, denominada de padrão de mapeamento de índices, o eixo das abcissas indica a posição dos bits antes do entrelaçamento, enquanto o eixo das cordenadas indica a posição dos mesmos após o entrelaçamento.. Figura 3.3: Padrão de mapeamento de índices para um entrelaçador aleatório, N = 256.. No padrão de mapeamento de índices, pontos que aparecem próximos uns dos outros significam 38.

(62) que a posição inicial (eixo das abcissas) e a posição após o entrelaçamento (eixo das ordenadas) dos mesmos estão próximas. Logo, o fator de espalhamento de um entrelaçador pode ser, grosso modo, determinado visualmente através deste tipo de figura. Na Figura 3.3 é possível observar que existem algumas regiões com vários pontos próximos uns dos outros. Isto mostra que os entrelaçadores aleatórios possuem um baixo fator de espalhamento.. 3.3.2. Entrelaçadores Determinísticos. Entrelaçadores Retangulares. Uma forma simples de evitar o mapeamento de índices próximos na seqüência de entrada para índices próximos na seqüência de saída, além de evitar a necessidade de se armazenar os N elementos do entrelaçador, é através de um entrelaçador retangular. Sejam m e n dois inteiros tal que N = m × n. Monta-se uma matriz com m linhas e n colunas e escreve-se os índices da seqüência de entrada na matriz preenchendo-a linha a linha e faz-se a leitura na saída do entrelaçador lendo-a coluna a coluna. Por exemplo, para o caso N = 15 pode-se usar uma matriz 3 × 5 como abaixo: ⎡. ⎤. 0. ⎢ ⎢ ⎢ 5 ⎣ 10. 1. 2. 3. 6. 7. 8. 11. 12. 13. 4. ⎥ ⎥ 9 ⎥. ⎦ 14. Desta forma a permutação utilizada é, representandado-se a seqüência (u0 , u1 , . . . , u14 ) pelos seus índices:. π(u) = (0, 5, 10, 1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14) Embora estes entrelaçadores sejam eficientes para evitar que seqüências de peso dois, com os dois 1’s próximos sejam mapeadas para outras seqüências com esta mesma propriedade, estes entrelaçadores não apresentam um bom desempenho. Isto é explicado pelo fato que estes entrelaçadores não quebram vários padrões de seqüências de entrada de pesos 4, 6, 9 dentre outros [32]. A Tabela 3.1 mostra um exemplo de uma seqüência de peso 4 que é permutada para ela mesma [18]. Para um entrelaçador retangular N = n × n existirão (n − 5) × (n − 5) seqüências desta forma. Então, a regularidade do entrelaçador faz com que as multiplicidades destas seqüências sejam muito altas prejudicando o desempenho do código (entrelaçadores retangulares apresentam desempenhos piores que os entrelaçadores aleatórios).. 39.

(63) Tabela 3.1: Seqüência permutada para ela mesma. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. A Figura 3.4 mostra o padrão de mapeamento de índices para um entrelaçador retangular. Notase a regularidade na distribuição dos bits, que é responsável tanto pelo alto fator de espalhamento como pelas altas multiplicidades que ocorrem no espectro de distâncias.. Figura 3.4: Padrão de mapeamento de índices para um entrelaçador retangular, N = 256 (16 × 16).. Entrelaçadores Polinomiais. A classe dos entrelaçadores polinomiais foi introduzida por Takeshita e Sun em 2005 [17]. Estes utilizam polinômios de permutação sobre o anel ZN , para a geração de seqüências de permutações a partir dos índices das seqüências de entrada. Por exemplo, para um comprimento N = 8, pode-se fazer uma permutação utilizando-se o polinômio:. 40.

(64) P (x) = 8x2 + 3x (mod 8) . Os índices da seqüência permutada são, portanto:. π(u) = (0, 3, 6, 1, 4, 7, 2, 5). É importante salientar que, para que os polinômios gerem permutações, existem algumas restrições para os coeficientes dos mesmos [17]. Outras restrições são necessárias para que os polinômios possuam inversos [33]. Para simplificar as buscas por polinômios que geram bons entrelaçadores, os autores utilizaram apenas polinômios da forma bx2 + ax. O critério utilizado para se determinar os melhores entrelaçadores foi o de maximizar a distância mínima (df ree ) gerada por seqüências de entrada de peso 2m, onde m é um inteiro pequeno. Os autores mostraram que os códigos turbo utilizando estes entrelaçadores, apresentam desempenhos melhores que os que utilizam entrelaçadores aleatórios e os S-aleatórios, descritos a seguir, para comprimentos pequenos e médios, com a vantagem de armazenar apenas os coeficientes do polinômio (contra toda a seqüência N necessária em entrelaçadores S-aleatórios. A Figura 3.5 mostra o padrão de mapeamento de índices para um entrelaçador polinomial. Notase que este entrelaçador, assim como o entrelaçador retangular da Figura 3.4 também apresenta uma certa regularidade, porém esta regularidade é menos acentuada. O fator de espalhamento pode ser alto ou baixo, dependendo da escolha dos parâmetros a e b (no caso do entrelaçador da figura, o fator de espalhamento é alto).. 3.3.3. Entrelaçadores Aleatórios com Estrutura. Entrelaçadores S-aleatórios. Os entrelaçadores S-aleatórios, propostos em 95 [15], diferem dos entrelaçadores puramente aleatórios por exigir que haja uma distância S (spread factor, em inglês) entre os índices entrelaçados, isto é, índices próximos na seqüência de entrada do entrelaçador tem que ser separados por uma distância mínima na saída do mesmo. Cada inteiro selecionado aleatoriamente como próximo membro da permutação é comparado com os S inteiros previamente alocados. Caso o valor absoluto da diferença entre este número e qualquer um dos S inteiros precedentes seja menor que S, então este é temporariamente descartado e outro é testado. Este processo é repetido até completar-se os N inteiros do entrelaçador.. 41.

(65) Figura 3.5: Padrão de mapeamento de índices para um entrelaçador polinomial, N = 256 (a = 15, b = 32).. O algoritmo para a obtenção de entrelaçadores S-aletórios, descrito acima, não necessariamente converge para uma solução. Há, por exemplo, uma possibilidade que dois inteiros vizinhos sejam exatamente os dois últimos inteiros a serem postos no entrelaçador. Entretanto, utilizando-se valores  de S tais que S < N/2, é possível obter-se um entrelaçador em um tempo razoável [15]. Este esquema de permutação fornece bons entrelaçadores, pois, assim como o entrelaçador retangular, quebra as seqüências de peso dois (considerando-se que a distância entre os 1’s seja menor que S) e ainda apresenta um alto padrão de aleatoriedade. Devido aos bons desempenhos dos mesmos, a maioria das propostas de novos entrelaçadores comparam seus resultados com o destes. A Figura 3.6 mostra o padrão de mapeamento de índices para um entrelaçador S-aleatório. É fácil notar que, devido ao fator de espalhamento ser garantido pelo algoritmo de construção do entrelaçador, não há dois pontos muito próximos, como ocorre no caso do entrelaçador pseudo-aleatório da Figura 3.3. Entrelaçadores Quasi-Cíclicos. Esta classe de entrelaçadores criada por Tanner [34], tenta combinar de maneira equilibrada as características determinísticas e aleatórias presentes no entrelaçador, de forma a se obter um entrelaçador que não necessite de tanta memória quanto os aleatórios e não tenha um desempenho baixo como os entrelaçadores de bloco. A formação dos entrelaçadores quasi-cíclicos é feita em três etapas::. 42.

(66) Figura 3.6: Padrão de mapeamento de índices para um entrelaçador S-aleatório, N = 256 (S = 8).. 1. O vetor de entrada (inteiros de 0 a N − 1) é escrito linha a linha em uma matriz n1 × n2 , onde n1 × n2 = N o comprimento do entrelaçador; 2. Utiliza-se um vetor permutação aleatório σ de comprimento n2 para realizar uma permutação das colunas da matriz; 3. Utiliza-se um vetor aleatório X de comprimento n2 em que cada elemento do mesmo serve para determinar o deslocamento cíclico dos elementos de cada coluna. O deslocamento cíclico dos elementos da j-ésima coluna é realizado através da operação: π(i) = i + Xj. (mod n1 ). (3.7). A seguir tem-se o exemplo de um vetor de comprimento N = 25, n1 = 5, n2 = 5. vetor permutação de colunas é σ = (3, 2, 0, 4, 1) e o vetor aleatório de deslocamento cíclico é dado por X = (0, 3, 4, 2, 1). Considere o vetor de entrada (representado pelos seus índices):. u = (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) Escrevendo-o, linha a linha, numa matriz 5 × 5, obtemos a matriz 3.8:. 43.

Referências

Documentos relacionados

Contudo, sendo um campo de pesquisa e de atuação muito específico e novo no Brasil, ainda existe uma série de dificuldades para a eleição de parâmetros de conservação

A partir dos resultados, conclui-se que a indução hormonal com extrato de hipófise de carpa não causou alterações significativas para os parâmetros qualitativos,

Diante do exposto, este trabalho visa apresentar uma análise do monitoramento dinâmico de um ponto geodésico materializado sobre a estrutura da passarela que liga os campi

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

Isto significa que a norma agora em apreciação é, tão-somente, a que resulta da conjugação do disposto nos n.os 1, alínea b), e 2 do artigo 824.º do Código de Processo Civil,

Também conhecemos muito pouco a teologia do movimento de santidade que influenciou bastante o mundo evangélico brasileiro através dos ministérios avivalistas de George

Neste contexto, a Companhia reconhece a contribuição do setor segurador na gestão de ativos e no financiamento de uma economia mais sustentável e compromete-se a aplicar as normas,

3.3 A não contraprestação dos serviços requisitados, por motivos alheios a vontade do requisitante, desde que enquadrados em regulamentação específica, aprovada