• Nenhum resultado encontrado

Um estudo sobre a construção, desempenho e implementação em VHDL de códigos LDPC binários, irregulares e estruturados para aplicação em comunicações ópticas

N/A
N/A
Protected

Academic year: 2021

Share "Um estudo sobre a construção, desempenho e implementação em VHDL de códigos LDPC binários, irregulares e estruturados para aplicação em comunicações ópticas"

Copied!
131
0
0

Texto

(1)

UNIVERSIDADE ESTADUAL DE CAMPINAS

FACULDADE DE ENGENHARIA ELÉTRICA E DE COMPUTAÇÃO

ANTÔNIO UNIAS DE LUCENA

Um estudo sobre a construção, desempenho e implementação em VHDL de códigos

LDPC binários, irregulares e estruturados para aplicação em comunicações ópticas

CAMPINAS 2015

(2)

ANTÔNIO UNIAS DE LUCENA

Um estudo sobre a construção, desempenho e implementação em VHDL de códigos

LDPC binários, irregulares e estruturados para aplicação em comunicações ópticas

CAMPINAS 2015

Dissertação apresentada à Faculdade de Engenharia Elétrica e Computação da Universidade Estadual de Campinas como parte dos requisitos exigidos para a obtenção do título de mestre em Engenharia Elétrica. Área de concentração: Telecomunicações e Telemática.

Este exemplar corresponde à vesão final da dissertação defendida pelo aluno Antônio Unias de Lucena e orientada pelo Prof. Dr. Renato Baldini Filho.

(3)

Ficha catalográfica

Universidade Estadual de Campinas Biblioteca da Área de Engenharia e Arquitetura

Luciana Pietrosanto Milla - CRB 8/8129

Lucena, Antônio Unias de,

L963e LucUm estudo sobre a construção, desempenho e implementação em VHDL de códigos LDPC binários, irregulares e estruturados para aplicação em comunicações ópticas / Antônio Unias de Lucena. – Campinas, SP : [s.n.], 2015.

LucOrientador: Renato Baldini Filho.

LucDissertação (mestrado) – Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica e de Computação.

Luc1. Comunicações ópticas. 2. Códigos corretores de erro (Teoria da informação). 3. VHDL (Linguagem descritiva de hardware). 4. FPGA. I. Filho, Renato Baldini,1956-. II. Universidade Estadual de Campinas. Faculdade de Engenharia Elétrica e de Computação. III. Título.

Informações para Biblioteca Digital

Título em outro idioma: A study of construction, performance and VHDL implementation of

irregular, structured and binary LDPC codes for optical communications.

Palavras-chave em inglês:

Optical communications

Error-correcting codes (Information theory) VHDL (Hardware descriptive language) FPGA

Área de concentração: Telecomunicações e Telemática Titulação: Mestre em Engenharia Elétrica

Banca examinadora:

Renato Baldini Filho [Orientador] Lucas Heitzmann Gabrielli

Fabbryccio Akkazzha Chaves Machado Cardoso

Data de defesa: 15-10-2015

Programa de Pós-Graduação: Engenharia Elétrica

(4)

COMISSÃO JULGADORA - DISSERTAÇÃO DE MESTRADO

Candidato: Antônio Unias de Lucena RA: 075031

Data da Defesa: 15 de outubro de 2015

Título da Tese: "Um Estudo Sobre a Construção, Desempenho e Implementação em VHDL de Códigos LDPC Binários, Irregulares e Estruturados para Aplicação em Comunicações Ópticas”.

Prof. Dr. Renato Baldini Filho (Presidente, FEEC/Unicamp) Dr. Fabbryccio Akkazzha Chaves Machado Cardoso (CPqD) Prof. Dr. Lucas Heitzmann Gabrielli (FEEC/UNICAMP)

A ata de defesa, com as respectivas assinaturas dos membros da Comissão Julgadora, encontra-se no processo de vida acadêmica do aluno.

(5)

DEDICATÓRIA

(6)

AGRADECIMENTOS

Agradeço à minha família, ao meu orientador, Renato Baldini Filho, pela paciência e apoio durante o mestrado, e aos meus amigos pelas ideias e auxílio nas correções desta dissertação.

(7)

RESUMO

O emprego de códigos LDPC em comunicações ópticas vem recebendo especial atenção nos últimos anos devido à sua elevada capacidade de correção de erros, fato que possibilita enlaces mais longos e com maior capacidade de transmissão. A presente dissertação apresenta um estudo de códigos LDPC binários, irregulares e estruturados (IE-LDPC), bem como, uma comparação do desempenho de dois algoritmos de decodificação comumente utilizados na decodificação de códigos LDPC: o algoritmo soma-produto utilizando razões logarítmicas (log-SP) e o algoritmo soma-mínimo (SM), para um conjunto de códigos IE-LDPC construídos. Além disso, a presente dissertação apresenta uma implementação em VHDL de um codificador e de um decodificador para códigos IE-LDPC e os resultados da síntese em FPGA desta implementação em VHDL. A comparação do desempenho dos algoritmos de decodificação foi importante para determinar que o algoritmo SM, uma simplificação do algoritmo log-SP, pode ser utilizado no lugar deste último sem perdas significativas de desempenho. Por sua vez, a síntese em FPGA do codificador e do decodificador dos códigos IE-LDPC construídos mostrou-se factível, mas a arquitetura do decodificador implementado do algoritmo SM ainda utiliza grande quantidade de elementos lógicos.

Palavras-chave: comunicações ópticas, códigos corretores de erro, VHDL (linguagem descritiva de

(8)

ABSTRACT

The use of LDPC codes on optical communications has received special attention in recent years due to its error correction capability, permitting longer and higher capacity optical links. This dissertation presents a study of binary irregular structured LDPC codes (IS-LDPC), as well as a performance comparison between two LDPC decoding algorithms: logarithm domain sum-product (log-SP) and minimum-sum (MS) for a set of constructed IS-LDPC codes. Besides, this dissertation presents a VHDL implementation of an encoder and a decoder for IS-LDPC codes and the FPGA synthesis results of this VHDL implementation. The performance comparison has determined that the MS algorithm can be a substitute to the log-SP algorithm with a significant reduction in logical elements in FPGA implementation, without significant loss in decoding performance. The FPGA synthesis results have shown that the encoder and the decoder IS-LDPC implementations are feasible, but the current MS decoder still uses a considerable amount of logical elements.

(9)

LISTA DE FIGURAS

Figura 1.1 – Comparativo entre o desempenho de vários códigos corretores de erros utilizados em

comunicações ópticas [2]. ... 20

Figura 2.1 – Exemplo de um gráfico de Tanner para um código LDPC (8, 4). ... 23

Figura 2.2 – Exemplo de uma matriz H com girth igual a 4 e seu respectivo gráfico de Tanner. ... 24

Figura 2.3 – Matrizes circulantes obtidas a partir da rotação de I8. ... 25

Figura 2.4 – Matriz de verificação de paridade de um código IE-LDPC (32, 16). ... 26

Figura 2.5 – Matriz de verificação de paridade de um código IE-LDPC (24, 16). ... 26

Figura 2.6 – Passo Horizontal da decodificação LDPC. ... 30

Figura 2.7 – Passo Vertical da decodificação LDPC. ... 30

Figura 2.8 – Fluxograma da decodificação LDPC. ... 32

Figura 2.9 – Conjunto de trilhas e portas lógicas de FPGA antiga. ... 36

Figura 2.10 – FPGA e seus componentes internos [10]. ... 37

Figura 2.11 – Célula básica da Virtex-5 [10]. ... 38

Figura 2.12 – Diagrama de um sistema de comunicações ópticas. ... 39

Figura 2.13 – Notação em ponto fixo empregada na presente dissertação. ... 42

Figura 2.14 – Interface óptica-elétrica. ... 42

Figura 2.15 – Visão global do contexto em que o codificador e decodificador LDPC é empregado. ... 43

Figura 3.1 – Componentes da Virtex-5 interligados por trilhas internas [10]. ... 45

Figura 3.2 – Atraso dentro da Virtex-5 devido ao caminho combinacional. ... 46

Figura 3.3 – Codificador LDPC. ... 47

Figura 3.4 – Blocos do decodificador LDPC. ... 48

Figura 3.5 – Matrizes auxiliares obtidas a partir da matriz H. ... 49

Figura 3.6 – Passo Horizontal do decodificador LDPC. ... 51

Figura 3.7 – Passo Vertical do decodificador LDPC. ... 52

Figura 3.8 – Calculador de ( ). ... 54

Figura 3.9 – Calculador de síndrome do decodificador LDPC. ... 55

Figura 3.10 – Propagação dos dados ao longo dos vários blocos do decodificador.. ... 57

Figura 4.1 – Cenário da simulação dos códigos IE-LDPC. ... 59 Figura 4.2 – Curvas de desempenho do código IE-LDPC (2000, 1000) gerado a partir de uma matriz

(10)

identidade de ordem igual a 50. ... 60

Figura 4.3 - Curvas de desempenho do código IE-LDPC (2000, 1000) gerado a partir de uma matriz

identidade de ordem igual a 100. ... 61

Figura 4.4 - Curvas de desempenho do código IE-LDPC (2000, 1000) gerado a partir de uma matriz

identidade de ordem igual a 200. ... 62

Figura 4.5 - Curvas de desempenho do código IE-LDPC (2000, 1000) gerado a partir de uma matriz

identidade de ordem igual a 500. ... 63

Figura 4.6 - Curvas de desempenho para o código IE-LDPC (4000, 2000) gerado a partir de uma

matriz identidade de ordem igual a 50. ... 64

Figura 4.7 - Curvas de desempenho para o código IE-LDPC (4000, 2000) gerado a partir de uma

matriz identidade de ordem igual a 100. ... 65

Figura 4.8 - Curvas de desempenho para o código IE-LDPC (4000, 2000) gerado a partir de uma

matriz identidade de ordem igual a 200. ... 66

Figura 4.9 - Curvas de desempenho para o código IE-LDPC (4000, 2000) gerado a partir de uma

matriz identidade de ordem igual a 500. ... 67

Figura 4.10 - Curvas de desempenho para o código IE-LDPC (4000, 2000) gerado a partir de uma

(11)

LISTA DE TABELAS

Tabela 4.1- Parâmetros do codificador e do decodificador do código IE-LDPC (40, 20) na FGPA ... 69 Tabela 4.2 - Parâmetros do codificador e do decodificador do código IE-LDPC (200, 100) na FGPA 69

(12)

LISTA DE SIGLAS E ABREVIATURAS

ASIC - Application Specific Integrated Circuit AWGN - Additive White Gaussian Noise

BCH - Bose-Chaudhuri-Hocquenghem BER - Bit Error Rate

BI-AWGN - Binary Input Additive White Gaussian Noise CLB - Configurable Logic Blocks

DLL - Delay-locked Loop

FPGA - Field Programmable Gate Array Gbps - Gigabit por segundo

IE-LDPC - Códigos LDPC irregulares e estruturados IS-LDPC - Irregular and structured LDPCcodes ITU-T - International Telecommunication Union LDPC - Low-Density Parity-Check

log-SP - Soma-Produto utilizando razões logarítmicas LUT - Look-up table

MS - Minimum-Sum

OFDM - Orthogonal Frequency-Division Multiplexing PLL - Phase-Locked Loop

PSK - Phase Shift Keying

QAM - Quadrature Amplitude Modulation QC-LDPC - Códigos LDPC quase-cíclicos RAM - Random Access Memory

RS - Reed-Solomon

SP - Soma-Produto

SM - Soma-Mínimo

VHDL - VHSIC Hardware Description Language WDM - Wavelength Division Multiplexing

WIMAX - Worldwide Interoperability for Microwave Access Wi-Fi - Wireless Fidelity

(13)

LISTA DE SÍMBOLOS

- j-ésimo nó de verificação

c(i) - Bit i da palavra transmitida pelo codificador LDPC ̂( ) - Bit i da palavra decodificada pelo código LDPC

c - Palavra codificada pelo código LDPC ̂ - Palavra decodificada pelo código LDPC

Cl,j - Matriz circulante de ordem l e com j colunas rotacionadas à direita

C - Submatriz formada por todas as matrizes circulantes que formam a matriz H - Conjunto dos nós de verificação conectados ao nó de variável

\ - Conjunto de nós de verificação conectados ao nó de variável excetuando o nó de verificação

- Energia por bit

Eb/N0 - Razão entre a energia por bit e a densidade espectral de potência do ruído

( , ) - Elemento da linha j e coluna i da matriz G

G - Matriz geradora do código LDPC

ℎ( , ) - Elemento da linha j e coluna i da matriz H

H - Matriz de verificação de paridade do código LDPC

- Matriz H após a transformação utilizando-se o algoritmo de Gauss-Jordan - Matriz H transposta

- Matriz formada com os números das colunas e das linhas da matriz H em que ℎ( , ) = 1

- Matriz formada com os números das linhas e das colunas da matriz H em que ℎ( , ) = 1

- Matriz identidade de ordem k

( ) - Matriz identidade de ordem (n-k)

k - Número de bits da palavra a ser codificada

! - Fator de normalização para garantir (0) + (1) = 1 ! - Fator de normalização para garantir & (0) + & (1) = 1

(14)

decodificador

(& ) - Logaritmo da razão de verossimilhança da mensagem envidada do nó de variável para o nó de verificação

(' ) - Logaritmo da razão de verossimilhança da mensagem enviada do nó de verificação para o nó de variável

( ) - Logaritmo da razão de verossimilhança da probabilidade a posteriori para cada nó de variável

m - Palavra a ser codificada

n - Número de bits da palavra codificada () - Densidade espectral de potência de ruído

*+ - Conjunto formado pelos números primos naturais

p - Fator de paralelismo da interface óptico-elétrico

P - Matriz de paridade do código LDPC

, - Matriz de paridade transposta do código LDPC

- - Pr ( = 1|1 ), probabilidade a posteriori de que o bit c(i) seja 1, dado que o bit 1 foi recebido

2 - Matriz nula de ordem k

q - Quantidade de bits empregados para quantizar o valor do sinal óptico & - Mensagem do nó de variável para o nó de verificação

- Probabilidade a posteriori para cada nó de variável ' - Mensagem do nó de verificação para o nó de variável

s(j) - Bit j da síndrome da palavra decodificada

s - Síndrome da palavra decodificada

t - instante de tempo t - i-ésimo nó de variável

3 - Conjunto dos nós de variável conectados ao nó de verificação

3\ - Conjunto de nós de variável conectados ao nó de verificação excetuando o nó de variável

45 - Quantidade de 1s por coluna da matriz H 46 - Quantidade de 1s por linha da matriz H

(15)

1 - Bit i da palavra recebida pelo decodificador

y - Palavra recebida pelo decodificador LDPC

7 - sinal de (& ) 8 - magnitude de 9& :

(16)

SUMÁRIO

1 INTRODUÇÃO ... 19

2 FUNDAMENTAÇÃO TEÓRICA ... 22

2.1 Códigos LDPC ... 22

2.1.1 Representação gráfica de códigos LDPC ... 22

2.1.2 Construção de códigos LDPC ... 23

2.1.2.1 Códigos LDPC binários, irregulares e estruturados ... 24

2.1.3 Codificação ... 27

2.1.4 Decodificação ... 28

2.1.4.1 Algoritmo soma-produto (SP) ... 28

2.1.4.2 Algoritmo soma-produto utilizando razões logarítmicas (log-SP) ... 32

2.1.4.3 Algoritmo soma-mínimo (SM) ... 35

2.2 FPGA - Field-Programmable Gate Array... 35

2.3 Códigos corretores de erro para comunicações ópticas ... 38

2.3.1 Interface óptica-elétrica para utilizar códigos LDPC em comunicações ópticas .... 41

3 IMPLEMENTAÇÃO ... 44

3.1 Influências dos componentes da Virtex-5 na implementação do codificador e do decodificador IE-LDPC ... 44

3.1.1 Trilhas internas e frequência máxima de operação ... 45

3.1.2 Memórias internas ... 46

3.2 Implementação do código IE-LDPC ... 46

3.2.1 Codificador... 46

3.2.2 Decodificador ... 47

3.2.2.1 Calculador do Passo Horizontal ... 50

3.2.2.2 Calculador do Passo Vertical ... 52

3.2.2.3 Decisão ... 53

(17)

4 RESULTADOS ... 58

4.1 Comparação do desempenho dos algoritmos de decodificação log-SP e SM para os códigos IE-LDPC construídos ... 58

4.1.1 Resultados da comparação do desempenho dos algoritmos log-SP e SM para os códigos IE-LDPC (2000, 1000) ... 59

4.1.1.1 Resultados para o código IE-LDPC (2000, 1000) gerado a partir de uma matriz identidade de ordem igual a 50 ... 59

4.1.1.2 Resultados para o código IE-LDPC (2000, 1000) gerado a partir de uma matriz identidade de ordem igual a 100 ... 60

4.1.1.3 Resultados para o código IE-LDPC (2000, 1000) gerado a partir de uma matriz identidade de ordem igual a 200 ... 61

4.1.1.4 Resultados para o código IE-LDPC (2000, 1000) gerado a partir de uma matriz identidade de ordem igual a 500 ... 62

4.1.2 Resultados da comparação do desempenho dos algoritmos log-SP e SM para os códigos IE-LDPC (4000, 2000) ... 63

4.1.2.1 Resultados para o código IE-LDPC (4000, 2000) gerado a partir de uma matriz identidade de ordem igual a 50 ... 64

4.1.2.2 Resultados para o código IE-LDPC (4000, 2000) gerado a partir de uma matriz identidade de ordem igual a 100 ... 64

4.1.2.3 Resultados para o código IE-LDPC (4000, 2000) gerado a partir de uma matriz identidade de ordem igual a 200 ... 65

4.1.2.4 Resultados para o código IE-LDPC (4000, 2000) gerado a partir de uma matriz identidade de ordem igual a 500 ... 66

4.1.2.5 Resultados para o código IE-LDPC (4000, 2000) gerado a partir de uma matriz identidade de ordem igual a 1000 ... 67

4.2 Resultados da síntese em FPGA do codificador e do decodificador LDPC ... 68

5 CONCLUSÃO E TRABALHOS FUTUROS ... 71

5.1 Conclusão ... 71

(18)

REFERÊNCIAS BIBLIOGRÁFICAS ... 73 ANEXOS ... 76 ANEXO A – Código-fonte dos arquivos desenvolvidos para realizar a análise do desempenho dos algoritmos log-SP e SM utilizando os códigos IE-LDPC construídos ... 77

ANEXO B - Código-fonte dos arquivos desenvolvidos para a implementação em VHDL do codificador e do decodificador dos códigos IE-LDPC construídos ... 91

ANEXO C – Código-fonte dos arquivos utilizados na validação da simulação dos codificadores e decodificadores implementados em VHDL. ... 121

(19)

1 INTRODUÇÃO

O crescimento da Internet mediante o aumento no número de seus usuários, o surgimento de novos serviços como comunicação em vídeo, televisão de alta definição, computação em nuvem e vídeos de alta definição, bem como, o crescimento do número de usuários em redes de comunicações móveis têm criado a necessidade de aumentar a capacidade de transmissão de dados das redes de comunicações ópticas existentes.

Uma rede de comunicações ópticas é uma de rede de transporte de telecomunicações em que a transmissão de dados é feita no domínio óptico, utilizando como meio de transmissão as fibras ópticas. Os maiores desafios atuais enfrentados por estas redes são: aumento das taxas de transmissão, o número de comprimentos de onda multiplexados numa fibra óptica e a extensão dos enlaces ópticos. Associados a estes desafios estão o desenvolvimento de novos formatos de modulação, de técnicas de detecção coerente e de métodos de controle dos efeitos da atenuação, dispersão e não linearidade nas fibras.

Uma forma de aumentar a capacidade de transmissão de uma rede de comunicações ópticas é utilizando novos formatos de modulação associados a códigos corretores de erro. Os códigos corretores de erro são empregados com a função de permitir o aumento do alcance e da capacidade de transmissão do enlace óptico sem as degradações dos dados transmitidos ocasionadas pelo canal de transmissão óptica através da fibra. Entre estas degradações destacam-se fatores como dispersão cromática, dispersão do modo de polarização, interferência entre símbolos e atenuação devido à fibra em que o dado é transmitido.

Atualmente códigos corretores de erro utilizados em conjunto com a modulação do sinal óptico possibilitam a transmissão de dados a taxas acima de 100 Gbps com detecção coerente.

Os primeiros códigos corretores de erros utilizados em comunicações ópticas foram os códigos

Reed-Solomon (RS) [1], com destaque para o código RS(255,239), especificado pela norma ITU-T

G.709. Objetivando melhor desempenho, novos códigos foram introduzidos, bem como o uso de códigos concatenados [1], conforme determina a norma ITU-T G.975.1, sendo estes considerados a segunda geração de códigos corretores de erros para comunicações ópticas. Os códigos LDPC

(Low-Density Parity-Check) [1], devido ao seu alto desempenho, são considerados a terceira geração de

códigos corretores de erros para comunicações ópticas.

(20)

adicionada aos dados transmitidos. Net coding gain (ganho de codificação) é a medida da diferença em dB da relação sinal-ruído para um sistema óptico com código corretor de erro e do mesmo sistema sem codificação para uma mesma taxa de erro. Redundância é a razão entre a quantidade de bits que é adicionada à mensagem transmitida pela quantidade total de bits transmitidos.

Figura 1.1 – Comparativo entre o desempenho de vários códigos corretores de erros utilizados em comunicações ópticas [2].

O ideal para um sistema óptico de comunicações é um código corretor de erro com alto ganho de codificação e baixa redundância. O código RS(255, 239), por exemplo, possui 5,6 dB de ganho de codificação e 6,67% de redundância. O código BCH(1020, 988) tem a mesma redundância de 6,67% e ganho de codificação em torno de 8 dB. A vantagem deste último código sobre o anterior é que ele proporciona um enlace de alcance maior e robustez a ruídos a um sistema de comunicações ópticas.

Os esforços atuais na área de códigos LDPC para comunicações concentram-se no desenvolvimento de códigos mais eficazes [1], no desenvolvimento de arquiteturas que utilizem menor número de elementos lógicos para seus codificadores e decodificadores [1] e no estudo do uso de códigos LDPC conjuntamente com modulação [1].

Sabendo da importância de códigos LDPC para comunicações ópticas, esta dissertação tem por objetivo a:

(21)

a) Construção de códigos LDPC binários, irregulares e estruturados (IE-LDPC);

b) Comparação do desempenho de dois algoritmos de decodificação de códigos LDPC: o algo-ritmo soma-produto utilizando razões logarítmicas (log-SP) e o algoalgo-ritmo soma-mínimo (SM);

c) Implementação em VHDL (VHSIC Hardware Description Language) de um codificador e de um decodificador baseado no algoritmo SM para códigos IE-LDPC;

d) Síntese em FPGA (Field Programmable Gate Array) do codificador e do decodificador IE-LDPC descritos em VHDL.

A presente dissertação está organizada da seguinte forma. O capítulo 2 fornece a fundamentação teórica da construção de códigos LDPC, uma introdução sobre FPGAs e comunicações ópticas. O capítulo 3 descreve os detalhes da implementação em VHDL da arquitetura do codificador e do decodificador dos códigos IE-LDPC construídos. O capítulo 4, por sua vez, apresenta os resultados da comparação do desempenho dos algoritmos de decodificação log-SP e SM para os códigos IE-LDPC e, também, os resultados da síntese em FPGA de codificadores e decodificadores IE-LDPC. Por fim, o capítulo 5 é a conclusão e a descrição dos trabalhos futuros.

Existe ainda um apêndice com o código-fonte dos arquivos desenvolvidos para realizar a análise do desempenho dos algoritmos log-SP e SM utilizando os códigos IE-LDPC construídos, um apêndice com o código-fonte dos arquivos desenvolvidos para realizar a implementação em VHDL do codificador e do decodificador IE-LDPC e outro apêndice com o código-fonte dos arquivos utilizados na validação da simulação dos codificadores e decodificadores implementados em VHDL.

(22)

2 FUNDAMENTAÇÃO TEÓRICA

Este capítulo tem por objetivo fornecer uma fundamentação teórica sobre códigos LDPC

(Low-Density Parity-Check) e também noções básicas sobre FPGA (Field Programmable Gate Array).

2.1 Códigos LDPC

Os códigos LDPC foram desenvolvidos por Gallager na década de 1960 [3], mas permaneceram esquecidos devido ao fato de sua complexa implementação estar além das capacidades computacionais da época.

Eles foram redescobertos por MacKay na década de 1990 [3], e, atualmente, vêm recebendo muita atenção, por ser o código corretor de erro que mais se aproxima do limite teórico de Shannon [4]. Tal fato levou os códigos LDPC a serem utilizados como o código padrão do WIMAX e da norma Wi-Fi 802.11n e 802.11ac [5].

Os códigos LDPC são códigos lineares de bloco gerados a partir de uma matriz de verificação de paridade H esparsa, ou seja, com baixa quantidade de 1s em relação ao número de 0s. Um código LDPC (n, k) é caracterizado por uma matriz H de n colunas e n-k linhas.

De acordo com a construção desta matriz de verificação de paridade, os códigos LDPC podem ser classificados em regulares, quando a matriz H possui quantidade constante de 1s para suas linhas e colunas, ou irregulares, caso a matriz H não tenha esta característica. Códigos irregulares provaram ter melhor desempenho que códigos regulares, apesar de sua maior complexidade de implementação e decodificação [3].

2.1.1 Representação gráfica de códigos LDPC

Os códigos LDPC são comumente apresentados em sua forma gráfica, conhecida como grafos de Tanner [3], que auxilia na visualização da implementação da decodificação destes códigos.

(23)

de um código de bloco linear. Para um código LDPC de dimensões (n, k), seu grafo de Tanner possui n nós de variável correspondentes às colunas da matriz H, e n-k nós de verificação correspondentes às linhas da matriz H. Haverá conexão entre o nó de verificação e o nó de variável sempre que um elemento ℎ( , ) da matriz de H for igual a 1, sendo j correspondente à linha e i à coluna.

Na Figura 2.1 é apresentada uma matriz de verificação de paridade para um código de bloco (8, 4) e seu grafo de Tanner correspondente.

Figura 2.1 – Exemplo de um gráfico de Tanner para um código LDPC (8, 4).

2.1.2 Construção de códigos LDPC

Quanto à sua construção, os códigos LDPC podem ser classificados em regulares ou irregulares e em estruturados ou aleatórios. Um código é dito regular quando todas as linhas de sua matriz H possuem a mesma quantidade 46 de uns e todas as colunas possuem a mesma quantidade 45 de uns; o código é dito irregular quando isto não é observado. Um código é dito estruturado quando as conexões entre os nós do grafo de Tanner dadas pelos elementos da matriz H seguem determinado padrão geométrico ou algébrico; o código é aleatório quando esta lei definindo conexões entre os nós não existe.

Um dos principais conceitos que deve ser levado em conta na construção da matriz H de um código LDPC é o girth desta matriz. Ele é definido como o menor número de transições necessárias para se sair de um nó e retornar a ele. Matrizes de verificação de paridade com girth pequeno devem ser evitadas, pois códigos LDPC cuja matriz H possui esta característica não possuem bom desempenho [3]. A Figura 2.2 apresenta um exemplo de um código com girth igual a 4.

(24)

Figura 2.2 – Exemplo de uma matriz H com girth igual a 4 e seu respectivo gráfico de Tanner.

Códigos cuja matriz H é construída de forma aleatória alcançam melhor desempenho do que códigos estruturados, porém são mais difíceis de serem implementados e sua decodificação é mais complexa [3]. Assim, devido à facilidade de implementação dos códigos estruturados, a presente dissertação faz uso destes. Na seção 2.1.2.1, uma classe especial de códigos LDPC binários, irregulares e estruturados é discutida.

2.1.2.1 Códigos LDPC binários, irregulares e estruturados

Existem vários métodos de gerar a matriz H de um código LDPC. Na presente dissertação, a matriz de verificação de paridade foi gerada a partir do agrupamento de submatrizes obtidas através do deslocamento cíclico à direita das colunas de uma matriz identidade [6]. As vantagens dos códigos assim gerados são a possibilidade de construir códigos com taxas múltiplas apenas modificando a quantidade de submatrizes agrupadas e a facilidade de criação da matriz H.

A Figura 2.3 mostra como as submatrizes circulantes são geradas através do deslocamento cíclico de uma matriz identidade de ordem 8, =. O índice l da submatriz indica a ordem da matriz identidade da qual ela foi gerada e o índice j, por sua vez, indica quantas colunas foram deslocadas ciclicamente à direita a fim de se obter a submatriz circulante Cl,j. Para valores de j maiores que l, a matriz identidade é rotacionada de j mod l.

(25)

Figura 2.3 – Matrizes circulantes obtidas a partir da rotação de I8.

Os códigos IE-LDPC construídos tiveram sua matriz H construída da seguinte forma. Seja *+ o conjunto formado pelos números primos naturais. Os valores do conjunto *+ foram utilizados para definir as matrizes circulantes obtidas através da rotação da matriz identidade, que serve de elemento-base da matriz H do código IE-LDPC. Valores primos foram utilizados para gerar as matrizes circulantes, pois, desta forma, é mais provável que a matriz de verificação de paridade gerada não tenha ciclos ou girths pequenos [7].

A Figura 2.4 mostra o exemplo de como uma matriz H de um código IE-LDPC (32, 16) é construída por meio do agrupamento de submatrizes circulantes obtidas através da rotação de uma matriz identidade de ordem l = 8. Note que as submatrizes circulantes foram geradas utilizando-se os quatro primeiros elementos do conjunto *+. Note também que a matriz H construída do código IE-LDPC é irregular e também é formada por uma matriz identidade de ordem igual a 16, >?. A matriz H do código IE-LDPC é construída tendo uma matriz identidade com submatriz para simplificar a codificação do código gerado a partir dela.

(26)

Figura 2.4 – Matriz de verificação de paridade de um código IE-LDPC (32, 16).

A Figura 2.5 mostra como a matriz H de um código IE-LDPC (24, 16) também foi construída a partir de uma matriz identidade de ordem l = 8.

(27)

As matrizes de verificação de paridade dos códigos IE-LDPC (32, 16) e IE-LDPC (24, 16) poderiam ter sido construídas tendo como elemento-base uma matriz identidade de ordem diferente,

l = 6, por exemplo. Assim, por causa dessa possibilidade de várias formas de construção da matriz de

verificação de paridade de um código IE-LDPC, só é possível determinar qual matriz H vai gerar um código com melhor desempenho através de simulações.

2.1.3 Codificação

A codificação de códigos LDPC é realizada através de multiplicação de matrizes. A codificação é realizada obtendo-se a matriz geradora, G, de um código LDPC a partir da matriz de verificação de paridade deste código. A palavra codificada, c, é então derivada a partir da palavra m conforme descrito na equação (2.1).

= @A (2.1)

Tradicionalmente, a matriz geradora de um código LDPC é obtida a partir da matriz de verificação H. Utilizando-se o método de eliminação de Gauss-Jordan, uma nova matriz, , é derivada da matriz H de tal forma que ela se apresente sob o formato sistemático descrito na equação (2.2), onde , é a transposta da submatriz de paridade do código LDPC e ( ) é a matriz identidade de ordem

(n-k).

= [ ( ) , ] (2.2)

A partir da matriz P, a matriz geradora G é obtida através da equação

A = [, ]. (2.3)

A matriz de verificação de paridade H do código LDPC é esparsa, mas a matriz geradora G do código LDPC geralmente não tem esta propriedade e, além disso, mesmo a matriz H tendo todas as suas linhas linearmente independentes, isso pode não ocorrer com a matriz G. A consequência disso é que a implementação do codificador do código LDPC utilizando a matriz G obtida a partir do método de eliminação de Gauss-Jordan exige a realização de um número elevado de operações e pode levar a um código de baixo desempenho quando as linhas desta matriz não são linearmente independentes.

Para evitar o processo de se obter a matriz G a partir da matriz H utilizando-se o método de eliminação de Gauss-Jordan, alguns códigos LDPC modernos têm sido construídos conforme descrito na seção 2.1.2.1 [6], onde a matriz de verificação de paridade H é construída de forma a já ser

(28)

constituída por uma matriz identidade de ordem (n-k) e pela submatriz C, como descrito na equação (2.4).

= [ ( ) E] (2.4)

A submatriz C é formada por submatrizes circulantes e é igual à transposta da matriz paridade P, sendo, desta forma, a matriz G obtida com facilidade.

2.1.4 Decodificação

Quando Gallager introduziu os códigos LDPC, ele também apresentou um algoritmo para a decodificação destes códigos denominado algoritmo soma-produto. Diferentemente dos códigos BCH e

Reed-Solomon que possuem soluções algébricas para decodificação, os códigos LDPC são

decodificados a partir da troca de mensagens entres os nós de variável e de verificação do grafo de Tanner deste código LDPC. Os nós de verificação estimam a probabilidade de que uma dada equação de verificação de paridade é satisfeita dadas as estimativas recebidas dos nós de variáveis. Os nós de variáveis, por sua vez, estimam a probabilidade de que um dado bit seja 0 ou 1 na palavra decodificada através das probabilidades recebidas dos nós de verificação.

O algoritmo de decodificação é dividido em cinco etapas: inicialização, passo horizontal, passo vertical, determinação da palavra LDPC decodificada e cálculo da síndrome da palavra decodificada. Geralmente este algoritmo é apresentado no domínio logarítmico para evitar erros de arredondamento nos cálculos das probabilidades, já que as multiplicações são transformadas em somas. A seção 2.1.4.1 apresenta e detalha o funcionamento e etapas do algoritmo soma-produto (SP).

2.1.4.1 Algoritmo soma-produto (SP)

Antes de descrever este algoritmo, as seguintes notações serão introduzidas. 3 = conjunto dos nós de variável conectados ao nó de verificação .

3\ = conjunto de nós de variável conectados ao nó de verificação excetuando o nó de variável .

(29)

\ = conjunto de nós de verificação conectados ao nó de variável excetuando o nó de verificação .

- = Pr ( = 1|1 ) , probabilidade de que o i-ésimo bit recebido seja 1, dado que 1 foi recebido.

& = mensagem de nó de variável para o nó de verificação . ' = mensagem do nó de verificação para o nó de variável .

= Pr (F |1) = Probabilidade a posteriori para cada nó de variável . As etapas do algoritmo soma-produto são descritas logo a seguir.

a) Inicialização

Os valores iniciais de probabilidade são obtidos a partir da palavra y recebida pelo decodificador e da característica do canal, conforme as equações (2.5) e (2.6), onde 1 é o valor do bit da palavra recebida e ;< é o variância do ruído do canal em que o dado foi transmitido.

& (0) = 1 1 + G( <HI⁄ )JK

(2.5)

& (1) =1 + G(<H1 I⁄ )JK

(2.6)

b) Passo Horizontal: Atualização dos nós de verificação

No passo horizontal ocorre a atualização do valor de ' , que é a mensagem enviada do nó de verificação para o nó de variável . A Figura 2.6 mostra como ocorre a troca de mensagens entre os nós de variável e de verificação para o grafo de Tanner de uma matriz de verificação de paridade H. O nó de verificação vai enviar uma mensagem ao nó de variável , baseando-se nas mensagens recebidas de todos os nós de variável conectados a ele, excetuando-se .

(30)

Figura 2.6 – Passo Horizontal da decodificação LDPC.

Os valores de (' ) são atualizados de acordo com as equações (2.7) e (2.8). ' (0) =12 +12 N (1 − &P (1))

P∈RS\I

(2.7)

' (1) = 1 − ' (0) (2.8)

c) Passo vertical: Atualização dos nós de variável

No passo vertical ocorre a atualização do valor de & , que é a mensagem enviada do nó de variável para o nó de verificação . A Figura 2.7 ilustra a troca de mensagens entre os nós de verificação e variável para o grafo de Tanner de uma matriz de verificação de paridade H. O nó de variável envia ao nó de verificação uma mensagem obtida através das mensagens recebidas de todos os nós de verificação conectados a ele, excetuando-se o nó .

Figura 2.7 – Passo Vertical da decodificação LDPC.

(31)

& (0) = ! (1 − - ) N ('P (0)) P∈TI\S (2.9) & (1) = ! - N ('P (1)) P∈TI\S (2.10)

A constante ! é o fator de normalização para garantir que a equação (2.11) seja observada.

& (0) + & (1) = 1 (2.11)

d) Obtenção da palavra decodificada

Nesta etapa acontece a atualização das probabilidades a posteriori (0) e (1), para cada nó de variável . É a partir destas probabilidades que uma palavra LDPC decodificada é obtida. As equações logo abaixo são empregadas nesta etapa. A constante ! é o fator de normalização para garantir que a equação (2.14) seja satisfeita

(0) = ! (1 − - ) N ' (0) ∈TI (2.12) (1) = ! - N ' (1) ∈TI (2.13) (0) + (1) = 1 (2.14)

A palavra LDPC decodificada é obtida através da equação (2.15), onde ̂( ) é o bit i da palavra decodificada.

̂( ) = U1, VG (1) > 0.50, YVZ Z[\'á' Z (2.15)

e) Verificação

Nesta etapa, o decodificador verifica se síndrome da palavra decodificada é nula. Isto é realizado através da equação (2.16), onde ̂ é a palavra decodificada, é a transposta da matriz de verificação de paridade e s é o vetor de dimensão (1 x k) que corresponde à síndrome da palavra decodificada.

^ = ̂ (2.16)

Caso a síndrome não seja nula, o processo de decodificação continua até que determinado número de iterações seja atingido. Várias iterações são utilizadas a fim de possibilitar uma decodificação com menor probabilidade de erro.

(32)

As etapas da decodificação LDPC utilizando-se os algoritmos soma-produto estão descritas na Figura 2.8.

Figura 2.8 – Fluxograma da decodificação LDPC.

O algoritmo soma-produto é bastante preciso, mas tem como ponto negativo o fato de sua implementação possuir muitas multiplicações, tornando onerosa sua implementação em hardware e causando rápida saturação dos valores das probabilidades calculadas.

Por causa disso, versões modificadas deste algoritmo, o algoritmo soma-produto utilizando razões logarítmicas (log-SP) e o algoritmo soma-mínimo (SM), são comumente utilizadas. As seções 2.1.4.2 e 2.1.4.3 descrevem estes algoritmos, respectivamente.

2.1.4.2 Algoritmo soma-produto utilizando razões logarítmicas (log-SP)

(33)

último algoritmo são transformadas em somas, cuja implementação é simples em hardware. Este algoritmo trabalha com o logaritmo da razão de verossimilhança das razões das probabilidades conforme as equações (2.17), (2.18), (2.19) e (2.20).

( ) = ln(-'( = 0 1-'( = 1 1⁄ )⁄ )) (2.17) (& ) = ln(& (0)& (1)) (2.18)

(' ) = ln(' (0)' (1)) (2.19)

( ) = ln( (0)(1)) (2.20)

A variável ( ) é o logaritmo da razão de verossimilhança da informação intrínseca recebida pelo decodificador, (& ) é o logaritmo da razão de verossimilhança da mensagem enviada do nó de variável para o nó de verificação , (' ) é o logaritmo da razão de verossimilhança da mensagem enviada do nó de verificação para o nó de variável e ( ) é o logaritmo da razão de verossimilhança da probabilidade a posteriori para cada nó de variável .

As etapas deste algoritmo são as mesmas do algoritmo soma-produto descritas na Figura 3.8.

a) Inicialização

A inicialização dos valores de ( ) e (& ) para os canais do tipo AWGN (Additive White

Gaussian Noise) é dada pela equação (2.21), onde 1 é o valor do bit do sinal recebido e ;< é o variância do ruído do canal em que o dado foi transmitido.

(& ) = ( ) = 21 ;< (2.21)

b) Passo Horizontal: Atualização dos nós de verificação

Nesta etapa ocorre a atualização de (' ), mensagem enviada dos nós de verificação para os nós de variável. O valor de 9' : é calculado a partir da equação (2.22), sendo a(F), 7 e 8 dados, respectivamente, pelas equações (2.23), (2.24) e (2.25), onde 7 é o sinal do valor de (& ) e 8 , a magnitude de (& ). 9' : = N 7b b∈RS\I . a( c a(8P ) P∈RS\I ) (2.22)

(34)

a(F) = −ln(tanh(F 2⁄ )) = ln(GGgg− 1)+ 1 (2.23)

7 = V [[ (& )] (2.24)

8 =∣ (& ) ∣ (2.25)

c) Passo vertical: Atualização dos nós de variável

Nesta etapa acontece a atualização de (& ), mensagem enviada dos nós de variável para os nós de verificação. O cálculo de (& ) é feito de acordo com a equação (2.26).

(& ) = ( ) + c ('P ) P∈TI\S

(2.26)

d) Obtenção da palavra decodificada

A atualização de ( ), logaritmo da razão de verossimilhança da probabilidade a posteriori para cada nó de variável , é dada pela seguinte equação (2.27) e é através dos valores de ( ) que a decisão da palavra decodificada é realizada. O bit da palavra decodificada, ̂( ), é obtido através da equação (2.28). ( ) = ( ) + c (' ) ∈TI (2.27) ̂( ) = { 1, VG ( ) < 00, YVZ Z[\'á' Z (2.28) e) Verificação

Esta etapa é semelhante à verificação realizada no algoritmo no SP, sendo calculada a síndrome da palavra decodificada.

Outra vantagem do algoritmo log-SP sobre o algoritmo SP é que este algoritmo não necessita calcular as constantes ! e ! , que são utilizadas no algoritmo soma-produto.

(35)

2.1.4.3 Algoritmo soma-mínimo (SM)

O algoritmo soma-mínimo não é nada mais do que uma simplificação do algoritmo log-SP. Esta simplificação ocorre na atualização do valor de (' ), dado pela equação (2.22).

A simplificação acontece devido ao fato de a função a(F) ser mais influenciada pelo menor valor de 8 , como mostrado em (2.29). Por causa disso, a atualização do valor de (' ) passa a ser obtida através da equação (2.30).

a(c a(8P ) P ) ≈ (a(a(minP 8P ))) = minP∈R S\I8P (2.29) (' ) = ( N 7P P∈RS\I ) ⋅ minP∈R S\I8P (2.30)

Outra vantagem do algoritmo soma-mínimo é que, para um canal BI-AWGN (Binary Input

Additive White Gaussian Noise), não é necessário conhecer as características do canal em que o dado

foi transmitido para obter o valor inicial de (& ) [8]. Desta forma, a inicialização de 9& : é mais simples e é dada pela equação (2.31).

9& : = ( ) = 1 (2.31)

As demais etapas do algoritmo soma mínimo são idênticas às etapas do algoritmo log-SP e também seguem o fluxograma descrito na Figura 2.8.

O algoritmo soma-mínimo perde em precisão para os demais algoritmos, mas sua implementação em FPGA é bem mais simples e utiliza menor quantidade de elementos lógicos. Por isto, ele foi escolhido para ser o algoritmo de decodificação LDPC implementado em hardware na presente dissertação.

2.2 FPGA - Field-Programmable Gate Array

As primeiras FPGAs foram criadas na década de 80 [9], e, desde então, seu uso e aplicação em projetos eletrônicos só tem aumentado. A grande vantagem do uso de FPGAs está no fato de ser possível mudar parâmetros de um circuito eletrônico sem ser necessário o desenvolvimento de uma

(36)

nova placa eletrônica. Tal maleabilidade permite um tempo mais curto de projeto para um produto, gerando mais ganhos às empresas que utilizam a tecnologia.

As primeiras FPGAs possuíam apenas portas lógicas simples (AND, OR, XOR, etc) interconectadas por trilhas de ligação. A Figura 2.9 mostra como uma função lógica de um circuito digital era obtida a partir de diferentes conexões entre as trilhas de uma FPGA existente na década de 80.

Figura 2.9 – Conjunto de trilhas e portas lógicas de FPGA antiga.

As FPGAs atuais são constituídas por células lógicas que congregam flip-flops e LUTs (look-up

tables), bem como por blocos de memória, blocos de processamento digital de sinais e PLLs (phase-looked loops). A Figura 2.10 detalha uma FPGA e alguns de seus componentes: trilhas de conexão

(PROGRAMMABLE INTERCONNECT), blocos lógicos (LOGIC BLOCKS) e interfaces de entrada e saída (I/O BLOCKS).

(37)

Figura 2.10 – FPGA e seus componentes internos [10].

Quando as FPGAs começaram a ser utilizadas, as conexões entre suas trilhas eram feitas manualmente. Atualmente, as conexões entre blocos lógicos são feitas via software. Um componente é descrito utilizando-se alguma linguagem de descrição de hardware tal como VHDL ou Verilog e, em seguida, o software que realiza a síntese da lógica na FPGA utiliza os blocos lógicos nela existentes e realiza as interconexões necessárias entre estes blocos lógicos, a fim de implementar o componente eletrônico criado.

No projeto de circuitos utilizando FPGA, três fatores são relevantes: potência elétrica dissipada, área ocupada (número de elementos lógicos utilizados) e frequência máxima de operação. Como a ideia inicial desta dissertação não é desenvolver um produto, mas sim, implementar e comprovar conceitos, tanto a potência dissipada como a área ocupada na FPGA não foram levados em consideração. O fator que mais influenciou a implementação do codificador e do decodificador dos códigos IE-LDPC construídos foi a frequência máxima de operação do projeto, já que isto permite que o circuito opere com menos paralelismo nas operações matemáticas que vai realizar.

Para finalizar, vale ressaltar que o uso de FPGAs também possui algumas desvantagens. Quando em projetos utilizando muitos elementos lógicos, a interconexão entre estes elementos dentro da FPGA pode estar distante, causando atrasos que influenciam negativamente na frequência máxima de operação. Para casos como estes, e estando o projeto já consolidado, costuma-se construir chips específicos, denominados ASIC (Application Specific Integrated Circuit), de tal forma a criar o projeto

(38)

com blocos lógicos próximos entre si, e não com a distância determinada pela FPGA.

A presente dissertação utilizou a FPGA Virtex-5 XC5VLX50T da Xilinx para a implementação de códigos IE-LDPC em hardware. Esta FPGA foi escolhida por possuir interfaces de entrada e saída de alta velocidade, ideais para trabalhar com comunicações digitais em altas taxas. Já o software que realiza a síntese na FPGA do codificador e do decodificador descritos em VHDL é o ISE WebPACK da

Xilinx.

A Figura 2.11 detalha uma célula básica da FPGA utilizada. Esta célula básica possui duas LUTs, dois flip-flops D e interfaces de conexão com outras células básicas.

Figura 2.11 – Célula básica da Virtex-5 [10].

2.3 Códigos corretores de erro para comunicações ópticas

Códigos corretores de erro, como o LDPC, são utilizados com o propósito de atenuar os efeitos das interferências presente em um canal sobre os dados transmitidos. No caso de comunicações ópticas,

(39)

as causas das interferências no canal podem ser: atenuação do sinal óptico, dispersão cromática, dispersão do modo de polarização e distorção do pulso óptico devido a não-linearidades da fibra óptica, que é o canal de comunicação [1].

O uso de códigos corretores de erro em comunicações ópticas associados a um processo de modulação permite o aumento da capacidade de transmissão pelo canal óptico e o aumento do alcance do sinal óptico transmitido, reduzindo-se, dessa forma, o número de repetidores empregados, gerando economia na implementação de laços ópticos. Além disso, esta composição de códigos corretores de erro com modulação possibilita que sistemas de comunicações ópticas operem em taxas acima de 40 Gbps [1], uma vez que a influência da interferência entre símbolos no detector óptico é minimizada.

A Figura 2.12 descreve um sistema de comunicações ópticas em que códigos corretores de erro associado a um processo de modulação são utilizados.

(40)

A fonte é o dispositivo que gera a informação a ser transmitida pelo equipamento de telecomunicações, ou seja, a fonte gera sequências de informação binárias em sua saída.

A codificação de fonte, por sua vez, é um processo de compressão da informação gerada pela fonte que retira as redundâncias e/ou as irrelevâncias desta informação de tal forma a reduzir ao máximo possível a quantidade de bits transmitidos, sem comprometer a integridade da informação.

A codificação de canal, por outro lado, é o processo que introduz bits redundantes à informação a ser transmitida, de tal forma a permitir que o receptor utilize estes bits extras para detectar e corrigir erros produzidos durante a transmissão através do canal.

Em comunicações ópticas a codificação de canal é realizada empregando-se códigos corretores de erro, tais como, o RS(255, 239) especificado pela norma ITU-T G.709 e os códigos BCH(3860, 3824) e BCH(2040, 1930) especificados pela norma ITU-T G.975.1. O escopo desta dissertação se situa na codificação de canal.

A modulação é um processo de mapeamento da informação binária em um sinal adequado a ser transmitido pelo canal de comunicação. Isso pode implicar na taxa de transmissão do sistema de comunicação. Em comunicações ópticas podem ser utilizadas modulações na intensidade do sinal transmitido ou na fase e frequência do sinal óptico. Atualmente as modulações coerentes mais utilizadas são QAM (Quadrature Amplitude Modulation) e PSK (Phase Shift Keying) [1].

Além de modulação, os sinais ópticos podem ser multiplexados, ou seja, pode-se transmitir vários sinais distintos dentro de uma fibra. Os sistemas multicanais utilizam multiplexagem por divisão no comprimento de onda, WDM (Wavelength Division Multiplexing) e também OFDM (Orthogonal

Frequency-Division Multiplexing) [1].

A demodulação é o processo de caracterizar estatisticamente o sinal recebido e decidir, dentro de um conjunto finito, qual a sequência de formas de ondas transmitidas. Após tomar esta decisão, o receptor óptico usa um mapeamento inverso em relação ao usado pelo modulador para determinar a sequência de símbolos discretos na saída do receptor óptico.

O receptor óptico sem modulação consiste de apenas um fotodiodo, que é responsável por converter o sinal do domínio óptico para o domínio elétrico, e por circuitos eletrônicos apropriados para amplificar o sinal antes de entregar a informação para o destino. Em sistemas ópticos convencionais usa-se detecção direta, já que a informação é transmitida na intensidade do sinal. Em sistemas mais modernos, para aumentar a eficiência espectral, ocorre detecção coerente.

(41)

canal para controlar os efeitos dos ruídos e distorções causados pela transmissão do dado através do canal. Já a decodificação de fonte, por sua vez, é o processo de reinserir a redundância removida pelo codificador de fonte.

2.3.1 Interface óptica-elétrica para utilizar códigos LDPC em comunicações ópticas

Para utilizar os códigos LDPC em comunicações ópticas, é necessária uma interface que converta o sinal do domínio óptico para o domínio elétrico e vice-versa. Além disso, para operar com códigos LDPC, esta interface necessita trabalhar com valores reais, representados por um conjunto de bits, e não valores binários 0 ou 1.

Quando códigos LDPC são empregados em comunicações ópticas, esta interface amostra e quantiza o sinal óptico, convertendo-o em um sinal elétrico constituído por p conjuntos de q bits, onde

p é o fator de paralelismo empregado e q é a quantidade de bits empregados para quantizar o valor do

sinal óptico.

A quantização é realizada baseando-se na intensidade luminosa do sinal óptico, quando a detecção do sinal óptico é por intensidade, ou na fase e amplitude do sinal óptico, quando a detecção coerente é empregada.

Como a decodificação do código LDPC utiliza decisão suave (soft-decision), na presente dissertação, o valor do sinal óptico é quantizado por um conjunto de 12 bits que correspondem a um valor real no intervalo [-1,1]. Nestes 12 bits, o bit mais significativo representa o sinal do número, os 7 bits seguintes, sua parte inteira, e os 4 bits restantes, sua parte fracionária.

A implementação dos códigos LDPC utilizou a representação em ponto fixo, pois a representação em ponto flutuante é muito complexa de ser implementada em FPGA. O tamanho da parte inteira, 7 bits, foi escolhido de tal forma a impedir a saturação das somas que ocorrem no algoritmo de decodificação soma-mínimo (SM). Já os 4 bits da parte fracionária foram escolhidos de forma a garantir uma precisão mínima de 0.075 na quantização dos valores do sinal óptico. A Figura 2.13 detalha a notação em ponto fixo empregada na presente dissertação.

(42)

Figura 2.13 – Notação em ponto fixo empregada na presente dissertação.

A Figura 2.14 ilustra uma interface óptica-elétrica trabalhando com sinais ópticos de diferentes taxas (2,5 Gbps, 10 Gbps ou 40 Gbps) e sinais elétricos formados por 16, 64 ou 256 conjuntos de 12 bits, respectivamente.

(43)

Outras taxas de paralelismo na conversão óptica-elétrica poderiam ser empregadas. O sinal óptico de 2,5 Gbps, por exemplo, poderia ser transformado em um sinal elétrico formado por 8 conjuntos de 12 bits. Entretanto, com esta taxa de paralelismo, o codificador e o decodificador LDPC teriam que operar com o dobro da frequência necessária para quando se trabalha com a taxa de 16 conjuntos de 12 bits.

A escolha de uma menor taxa de paralelismo implica na necessidade de se operar em frequências maiores. Por outro lado, quanto maior for a taxa de paralelismo, maior será a quantidade de LUTs utilizadas no projeto, influenciando negativamente na quantidade de elementos lógicos utilizados. Assim, é necessário encontrar o ponto ótimo entre taxa de paralelismo e quantidade de elementos lógicos utilizados.

A Virtex-5, FPGA utilizada na presente dissertação, tem frequência máxima de operação da ordem de grandeza de centenas de MHz e só é possível utilizá-la para processar sinais de ordem de Gbps porque ocorre o processamento em paralelo de vários bits em um pulso de relógio. Por exemplo, para se processar um sinal de taxa de 2,5 Gbps, uma das opções possíveis é processar 16 conjuntos de 12 bits a cada pulso de relógio, fazendo com que a FPGA trabalhe a uma frequência de 156,25 MHz.

A Figura 2.15 ilustra como ocorre o fluxo dos sinais ópticos e elétricos através das interfaces e dentro da FPGA.

(44)

3 IMPLEMENTAÇÃO

Este capítulo descreve a implementação em VHDL do codificador e o decodificador de códigos IE-LDPC. Antes desta descrição, são apresentadas as influências da FGPA utilizada, Virtex-5, no desenvolvimento do codificador e do decodificador dos códigos IE-LDPC construídos.

3.1 Influências dos componentes da Virtex-5 na implementação do codificador e do

decodificador IE-LDPC

A implementação de um projeto em FPGA é determinada pelos seus componentes. Nas seções a seguir são descritos os componentes internos da Virtex-5, FPGA utilizada na presente dissertação, que mais influenciaram na implementação do codificador e do decodificador dos códigos IE-LDPC construídos.

A Figura 3.1 detalha a Virtex-5 e seus principais componentes: DLL (Delay-locked Loop), circuito similar ao PPL (Phase-locked Loop), com a diferença de o oscilador controlado por tensão é substituído por uma linha de atraso; CLB (Configurable Logic Blocks), parte da FPGA que armazena as células lógicas e flip-flops; BLOCK RAM (Random Access Memory), banco de memórias internas da FPGA e I/O LOGIC, pinos de entrada e saída da FPGA.

(45)

Figura 3.1 – Componentes da Virtex-5 interligados por trilhas internas [10].

3.1.1 Trilhas internas e frequência máxima de operação

Os componentes da Virtex-5 são interconectados por trilhas internas, conforme indicado pela Figura 3.2. Estas interconexões entre os elementos da FPGA faz com que qualquer circuito sintetizado na Virtex-5 tenha frequência máxima de operação em torno de 400 MHz, que é a frequência máxima em que seu fabricante, Xilinx, garante que o sinal de relógio que se propaga pelas trilhas internas que ligam os flip-flops está estabilizado e os tempos de set e hold não são violados.

Porém, na prática, a frequência máxima de operação da Virtex-5 é um pouco menor. O fator limitante é o atraso de propagação de um sinal pelo caminho combinacional entre flip-flops. Para evitar problemas de amostragem, o período do relógio do flip-flop tem que ser maior que o atraso ocasionado pelo caminho combinacional. Além da quantidade de portas lógicas, a distância entre elementos lógicos influenciam negativamente na frequência máxima de operação. A Figura 3.2 exemplifica um caminho combinacional entre flip-flops que causa impacto na frequência máxima de operação.

(46)

Figura 3.2 – Atraso dentro da Virtex-5 devido ao caminho combinacional.

3.1.2 Memórias internas

A Virtex-5 possui bancos de memórias, que são as block RAMs, usadas para aumentar a velocidade da escrita e leitura de dados dentro da FPGA. Quando todas estas memórias estiverem utilizadas ou quando não especificado pelo usuário, o programa sintetizador de lógica na Virtex-5 vai sintetizar memórias utilizando blocos lógicos. Esta forma de síntese de memórias é conhecida como

distributed RAM e seu uso diminui a frequência máxima de operação da FPGA, pois o processo de

leitura e escrita em distributed RAMs é mais lento do que em block RAMs.

3.2 Implementação do código IE-LDPC

3.2.1 Codificador

(47)

de informação a ser codificada, G é a matriz geradora do código LDPC, P é a matriz de paridade do código LDPC e é a matriz identidade de ordem k.

= @A

c = [o(1) o(2) … o(q)] [P | ]

c = [ (1) (2) … ([ − q)| o(1) o(2) … o(q)]

(3.1)

A implementação do codificador é simples, sendo, para códigos binários, várias portas XOR em cascata. A Figura 3.8 mostra como o codificador foi implementado. Para o cálculo dos bits (1) a ([ − q) da palavra codificada, o codificador usa todos os bits da sequência de informação m. Quando o elemento g(j, 1) = 1 da matriz G, o bit m(j) entra no cálculo do bit c(j), caso contrário, não. A variável

j pertence ao conjunto [1, (n-k)] e k é o número de linhas da matriz G.

Figura 3.3 – Codificador LDPC.

3.2.2 Decodificador

O decodificador LDPC é a implementação em hardware do algoritmo soma-mínimo e é constituído por três componentes: cálculo de (' ), cálculo de (& ) e decisão. Esta divisão é relacionada às etapas do algoritmo de decodificação.

(48)

verificação para o nó de variável , (' ), ou passo horizontal, consiste na obtenção dos valores das mensagens que os nós de verificação enviam aos nós de variável. Esta etapa recebe o nome de passo horizontal, pois este cálculo é realizado percorrendo-se a linha da matriz H.

A etapa do cálculo do logaritmo da razão de verossimilhança da mensagem envidada do nó de variável para o nó de verificação , (& ), ou passo vertical, consiste na obtenção dos valores das mensagens que os nós de variável enviam aos nós de verificação. Esta etapa recebe o nome de passo vertical porque este cálculo é realizado percorrendo-se a coluna da matriz H.

A etapa Decisão consiste no cálculo na palavra de informação decodificada e no cálculo da síndrome desta palavra.

Cada uma destas etapas é realizada em um pulso de relógio. Portanto, uma iteração de decodificação de uma palavra LDPC leva três pulsos de relógio para ser realizada.

A Figura 3.4 mostra o decodificador LDPC dividido em seus blocos operacionais. O cálculo de (' ) ocorre no primeiro pulso de relógio, o cálculo de (& ), no segundo pulso de relógio e o cálculo da nova palavra decodificada, data_out, e de sua síndrome ocorre no terceiro e último pulso de relógio da iteração da decodificação LDPC.

Figura 3.4 – Blocos do decodificador LDPC.

Cada valor de (& ) e (' ) é armazenado em LUTs e representado por um conjunto de 12 bits, conforme indicado na Figura 2.13. Não foi possível utilizar as block RAMs da FPGA, já que se estes valores fossem armazenados nestas memórias, não seria possível efetuar a leitura e escrita de vários endereços de memória em um mesmo pulso de relógio.

Um ponto negativo do armazenamento dos valores de (& ) e (' ) em LUTs é que estes valores são armazenados em células lógicas, aumentado consideravelmente a quantidade de elementos lógicos da FPGA utilizados no projeto.

(49)

A implementação tradicional do decodificador LDPC verifica a cada instante se o valor de ℎ( , ) é nulo ou não, tornando o caminho combinacional longo e lento. Por isso, optou-se por armazenar em uma matriz, , os valores das colunas e das linhas para as quais ℎ( , ) = 1, e, da mesma forma, em outra matriz, , os valores das linhas e das colunas para as quais ℎ( , ) = 1.

Trabalhando-se com a matriz H, seria necessário armazenar (k x n) valores. No entanto, utilizando-se e , é necessário armazenar duas matrizes de dimensões (46 x k) e (n x 45), respectivamente. Sendo 46 o número de 1s por linha e 45 o número de 1s por coluna da matriz H.

A Figura 3.5 mostra como as matrizes e são obtidas a partir da matriz H. Para a primeira linha da matriz H temos ℎ( , ) = 1 para os seguintes valores de coluna: 2, 4, 5 e 8. Estes valores são os elementos da primeira linha da matriz . Para a primeira coluna da matriz H temos ℎ( , ) = 1 para os seguintes valores de linha: 2 e 4. Estes valores são os elementos da primeira linha da matriz .

Figura 3.5 – Matrizes auxiliares obtidas a partir da matriz H.

Os itens 3.3.2.1, 3.3.2.2 e 3.3.2.3 a seguir detalham como cada componente do decodificador LDPC foi implementado.

(50)

3.2.2.1 Calculador do Passo Horizontal

O passo horizontal é a etapa em que são calculados os valores de probabilidade da mensagem que o nó de verificação envia para o nó de variável . A mensagem (' ) só existirá quando ℎ( , ) = 1.

Esta é a etapa que mais utiliza elementos lógicos no decodificador LDPC. A grande vantagem do algoritmo SM é que ele transforma o cálculo de (' ) na obtenção do valor mínimo do módulo de (& ), 8 , e na multiplicação em cascata do sinal de (& .), 7 , para todos os valores de (& ) envolvidos no cálculo de (' ) para um valor específico de linha i e coluna j.

Como os valores de (& ) estão em representação de complemento de 2, para se obter o mínimo do módulo de números negativos, é necessário transformá-los em seus correspondentes valores positivos, e, a partir daí, obter o valor de menor módulo. O circuito que obtém o sinal resultante são várias portas lógicas XOR em sequência, lembrando que o sinal negativo tem valor lógico 1 e o positivo, 0.

A Figura 3.6 mostra a implementação do passo horizontal. Para obter o valor de (' ), são utilizados no cálculo os valores de (&P ) e 7 P, onde P é o valor das colunas da linha j da matriz H em que ℎ( , ) = 1, excetuando-se a coluna i.

(51)

Figura 3.6 – Passo Horizontal do decodificador LDPC.

A variável P pertence ao conjunto 3\, que é o conjunto formado pelas colunas da linha j em que ℎ( , ) = 1, excetuando-se a coluna i. Este é o conjunto dos nós de variável conectados ao nó de verificação excetuando o nó de variável . O conjunto 3\ tem dimensão igual a 46-1 e é formado pelos elementos {r, <,..., s6 r}, que são os valores das colunas em que ℎ( , ) = 1, para a linha j, excetuando-se a coluna i.

Considere a matriz de verificação de paridade H da Figura 3.5. Para a primeira linha, o conjunto dos valores de coluna em que ℎ( , ) = 1 é {2,4,5,8}. Assim, o cálculo do valor de ('<r) depende dos valores de (&rt), (&ru) e (&rv), e o cojunto {r, <,..., s6 r} é igual a {4,5,8}.

Da mesma forma, para a terceira linha, o conjunto dos valores de coluna em que ℎ( , ) = 1 é {3,6,7,8}. Assim, o cálculo do valor de ('wx) depende os valores de (&xx), (&xy) e (&xv) e o conjunto {r, <,..., s6 r} é igual a {3,7,8}.

O bloco módulo-mínimo da Figura 3.6 recebe como entrada 12 bits, pois ele precisa saber se o número é negativo ou não para convertê-lo ao seu complemento de 2, e assim obter qual possui menor módulo. O bloco concatenação, por sua vez, recebe a magnitude do menor valor do módulo de (& ), 11 bits, e concatena com o bit de sinal, 1 bit, resultante da operação com todos os sinais de (& ), formando, desta forma, o valor de (' ).

Referências

Documentos relacionados

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças

Crisóstomo (2001) apresenta elementos que devem ser considerados em relação a esta decisão. Ao adquirir soluções externas, usualmente, a equipe da empresa ainda tem um árduo

Na Figura B.1 apresenta-se a estratificação da temperatura para o fechamento que apresenta isolante e camada de ar como camadas intermediárias e o perfil em aço em

O romance Usina, diferentemente dos demais do conjunto da obra pertencente ao ciclo-da-cana-de-açúcar, talvez em função do contexto histórico em que se insere, não

O objetivo deste artigo é justamente abordar uma metodologia alternativa para a elaboração de análises contábeis e financeiras, denominada de balanço perguntado e

• The definition of the concept of the project’s area of indirect influence should consider the area affected by changes in economic, social and environmental dynamics induced

A Figura 17 apresenta os resultados obtidos por meio da análise de DSC para a amostra inicial da blenda PBAT/PHBH-0 e para as amostras PBAT/PHBH-4, PBAT/PHBH-8 e

Os trabalhadores têm consciência de que as condições de suas atividades profissionais estão mudando e que somente uma formação contínua irá capacitá-los para