Você está na página 1de 65

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

ESCOLA POLITCNICA
DEPARTAMENTO DE ELETRNICA E DE COMPUTAO

Estudo de cdigos LDPC (Low-Density Parity Check):


Matrizes Regulares e Irregulares

Autor:

____________________________________
Fernando Jorge Figueiredo Nazareth

Orientador:

____________________________________
Prof. Gelson Vieira Mendona, Ph.D.

Examinador: ____________________________________
Prof. Mauros Campello Queiroz, M.Sc.
Examinador: ____________________________________
Prof. Jos Gabriel Rodriguez Carneiro Gomes, Ph.D.

DEL
Novembro de 2010

Sumrio
Captulo 1 - Introduo....................................................................1
Captulo 2 - Cdigos Corretores de Erros..................................... 5
2.1 - Cdigos de blocos e convolucionais...........................................................................6
2.1.1 - Conceitos Bsicos ...................................................................................................7
2.1.2 - Distncia de Hamming..........................................................................................10
Tabela 2.1 - distncia entre as palavras-cdigo..................................................11
2.2 - Cdigos de Blocos Lineares.....................................................................................12
2.3 - Grficos de Tanner..................................................................................................13
2.4 - Decodificao pela Sndrome...................................................................................15

Captulo 3 - Cdigo Low-density parity-check (LDPC).............18


3.1 - Cdigos regulares e irregulares...............................................................................18
3.2 - Conceito de Giro...................................................................................................... 23
3.2.1 - Identificao de ciclos e determinao do giro de um cdigo LDPC ..................23

Captulo 4 Construo de cdigos LDPC..................................27


Captulo 5 Codificao e Decodificao de LDPC...................39
5.1 - Codificao...............................................................................................................39
5.2 - Decodificao Hard e Soft decision.....................................................................40

Captulo 6 - Simulaes..................................................................47
Captulo 7 - Concluses..................................................................52
Referncias Bibliogrficas............................................................. 53
Anexo Cdigos em MatLab utilizados nas simulaes............55

ii

Captulo 1 - Introduo

A Teoria da informao trata dos aspectos quantitativos de armazenamento e


transmisso das mensagens [1], [2]. Tem como um de seus objetivos principais garantir a
integridade dos dados enviados atravs de algum tipo de canal. Na manipulao das
mensagens, dois obstculos so encontrados:
a) falta de capacidade no armazenamento ou transmisso das mensagens enviadas;
b) rudo na transmisso, ou seja, introduo aleatria de erros nas mensagens
enviadas.
Ao contrrio das teorias matemticas, que surgiram nas universidades e geralmente
aps um longo perodo de tempo, migraram para as aplicaes prticas em tecnologia e
indstrias, a teoria de cdigos corretores de erros surgiu nos laboratrios de empresas de
telefonia e posteriormente se transformou em uma teoria matemtica completa com
aplicaes em vrias reas como, por exemplo, geometria algbrica.
Um cdigo corretor de erros visa recuperar informaes que no processo de emisso
tenham sofrido algum tipo de rudo. Pode-se afirmar que hoje praticamente todo sistema de
envio de informaes possui algum tipo de cdigo corretor de erros. Como exemplos
tpicos, a telefonia digital, a transmisso de dados via satlite, a comunicao interna em
computadores, armazenamento tico de dados e armazenamento de dados em fitas ou
disquetes magnticos.
Um sistema de envio de mensagem pode ser esquematizado da forma especificada
na figura 1.1:

Figura 1.1: Esquema de transmisso

O canal pode ser, por exemplo, circuito integrado digital, disco de armazenamento,
cabo, canal de microondas, canal de radiofreqncia, etc.
Com o aumento da confiabilidade nas comunicaes digitais e a emergncia do
computador digital como ferramenta essencial na sociedade tecnolgica, os cdigos
corretores de erros vm conquistando uma posio proeminente. Para ilustrar a praticidade
e importncia do uso de cdigos corretor de erros, tem:
a) uso do bit de paridade como um mecanismo detector de erro - um dos esquemas
mais simples e conhecidos na comunicao computacional;
b) armazenamento em discos est sendo muito utilizado devido ao aumento da
densidade. Quanto maior a densidade, a probabilidade de ocorrncia de erros tambm
aumenta;
c) transmisso de informao pelas naves espaciais:
- em 1972 a espaonave Mariner transmitiu figuras de Marte para a Terra
com 64 tonalidades de cinza. Atividade solar e outras condies atmosfricas
podem introduzir erros em sinais fracos vindos do espao. O cdigo
utilizado foi o de Reed-Muller [2],[17];
- em 1979 a espaonave Voyager comeou a enviar imagens com 4096
tonalidades de cores. O cdigo utilizado foi o de Golay [2],[18];
d) udio digital o aumento da popularidade do udio digital deve-se ao
desenvolvimento dos cdigos corretores de erros que facilita o processo de digitalizao.

Ao inicializar a leitura do CD, o sistema corrige os erros produzidos por marcas de dedos,
arranhes e outras imperfeies, para logo em seguida transformar em sinais sonoros. O
cdigo utilizado o de Reed-Solomon. Este, criado em 1960 por Irving Reed e Gustave
Solomon [3], um cdigo no binrio cclico - cada deslocamento cclico das palavrascdigo tambm uma palavra-cdigo - e pode ser construdo de forma a corrigir erros
mltiplos, devido a sua boa propriedade de distncia mnima e existncia de algoritmos
eficientes de decodificao (os cdigos so determinados por estruturas algbricas, como
por exemplo, polinmios). No entanto, apesar da possibilidade de corrigir um elevado
nmero de erros dentro de uma mesma palavra, no recomendado para transmisso de
uma grande quantidade de dados, limitado a palavra-cdigo de tamanho n q + 1 - sendo
b o nmero de bits de uma palavra-cdigo e q = 2 b palavras-cdigo possveis. Para
cdigos mais longos, as propriedades de distncia mnima e, consequentemente, a
possibilidade de correo de mltiplos erros diminui.
Motivado pela importncia dos cdigos corretores de erros, conforme mencionado
acima, este trabalho visa estudar o cdigo LDPC (low-density parity-check) [4], pois se
trata de um cdigo amplamente utilizado hoje em dia devido a sua performance prxima a
capacidade do canal para diversos tipos de canais e um algoritmo de decodificao de baixa
complexidade. Atualmente, o sistema DVB-S2 (Digital Video Broadcasting - Satellite
verso 2) para transmisso de vdeo por satlite j utiliza este cdigo.
O objetivo do trabalho ser realizar comparaes entre algoritmos variados de
codificao LDPC e observar as diferentes performances em um canal gaussiano. Para isso,
foram escolhidos algoritmos regulares e irregulares (as diferenas sero explicadas no
captulo 3 e utilizado o decodificador SPA (Soma de Produto), que foi introduzido por
Gallager e at hoje estudado e propostas diversas variaes).
No captulo 2, ser explicada a teoria de cdigos corretores de erros, abordando
conceitos bsicos que so necessrios para o entendimento do estudo do LDPC. Sistema de
comunicao, cdigos de blocos lineares, distncia de Hamming e decodificao sndroma
sero explicitados.
No captulo 3, os conceitos de LDPC sero introduzidos, fazendo um apanhado em
alguns tipos de cdigos regulares e irregulares, apresentando algumas propriedades deste
cdigo e sua representao com grafos de Tanner [5].

No captulo 4, sero mostradas formas de construo de alguns tipos de cdigos


LDPC, a partir de sua matriz de paridade H. Estas diferentes matrizes sero o foco da
anlise comparativa que ser realizada neste trabalho.
O captulo 5 trar como so feitas a codificao e decodificao dos cdigos LDPC,
destacando o fato de, em alguns casos, haver uma dificuldade de se obter a matriz geradora
do cdigo, necessitando realizar uma soluo aproximada. Alm disso, dois mtodos de
decodificao sero detalhados.
No captulo 6, os resultados das simulaes sero mostrados, realizando
observaes nas comparaes de BER dentre os variados algoritmos de codificao.
Por ltimo, o captulo 7 encerrar o trabalho apresentando as ltimas concluses
baseadas na teoria e observaes mostradas ao longo deste texto.

Captulo 2 - Cdigos Corretores de Erros

Claude E. Shannon, em 1948, publicou o artigo sobre a teoria matemtica da


comunicao [1] que se tornou clssico e at hoje referncia bibliogrfica de qualquer
texto que aborde esse assunto. Segundo Shannon, haveria um limite na quantidade de
informao que poderia trafegar por um canal com rudo. Em se tratando de uma
comunicao digital em um canal AWGN (Aditive White Gaussian Noise), foi
demonstrado que a maior taxa de transmisso que pode trafegar nesse canal dada por:
P

C = B log 2 1 +

(2.1)

onde C a capacidade do canal em bits por segundo (bps), P a potncia em Watts do sinal
enviado atravs desse canal e N a potncia em Watts de rudo branco na largura de faixa
disponvel B em Hertz.
Shannon [1] demonstrou que, adicionando uma redundncia controlada
informao, poder-se-ia reduzir a quantidade de erros na recepo induzidos pelo rudo a
um patamar to pequeno quanto se quisesse, desde que a taxa de transmisso estivesse
abaixo do limite determinado pela equao (2.1).
Este processo, atravs do qual a redundncia anteriormente citada adicionada
informao de modo a permitir a deteco e correo de erros, chamado de codificao de
canal. O termo redundncia controlada est relacionado restrio das possveis
sequncias de bits de informao na recepo. Tendo sido detectado um padro diferente
das possveis sequncias, o decodificador de canal procura dentre elas aquela que mais se
assemelha informao detectada. Essa semelhana obtida atravs da correta utilizao
de critrios de deciso, sendo que os mais conhecidos so o critrio do mximo a-posteriori
- MAP (Maximum a-posteriori) e o de mxima verossimilhana - ML (Maximum
Likelihood). Ambos tm como objetivo minimizar o erro de deciso sobre os bits
transmitidos.

2.1 - Cdigos de blocos e convolucionais


Existem duas grandes famlias de cdigos detectores e corretores de erros: os
cdigos de bloco e os convolucionais [2]. A codificao de bloco atribui a cada bloco de k
bits de informao uma palavra cdigo com n bits codificados, n > k. Um cdigo assim
formado descrito na literatura como cdigo de bloco (n,k), sendo que a relao entre o
nmero de bits de um bloco de informao e o nmero de bits da palavra cdigo
correspondente, k/n, denominada taxa do cdigo. De maneira geral, quanto menor a taxa
de um cdigo, maior a sua capacidade de deteco e correo de erros. Como este trabalho
tem como objetivo estudar o cdigo LDPC, que so cdigos de blocos, aprofundaremos um
pouco mais o assunto adiante.
A outra famlia de cdigos se refere aos convolucionais. Nesse tipo de codificao
uma seqncia contnua de bits de informao, com tamanho varivel, mapeada em uma
seqncia tambm contnua de bits codificados. Um codificador convolucional dito com
memria, pois um determinado bit codificado depende de um ou mais bits de informao
anteriores combinados linearmente.
Existem vrios algoritmos de decodificao para cdigos de bloco e convolucionais.
Destaque maior dado queles caracterizados como algoritmos de decodificao suave
(soft decision decoding algorithms). Nesse tipo de decodificao no so utilizados os bits
0s e 1s detectados no receptor, como acontece nos algoritmos de decodificao abrupta
(hard decision decoding algorithms), e sim os valores reais dos sinais recebidos. Esse
processo apresenta considerveis ganhos em relao ao processo de decodificao abrupta.
Estes algoritmos sero melhor explicados no prximo captulo.
Em vrios sistemas de comunicao mvel so utilizadas codificaes em cascata.
Essa cascata pode conter somente codificadores de bloco, codificadores de bloco e
convolucionais ou somente codificadores convolucionais so os denominados cdigos
concatenados.
importante nesse momento ressaltar a diferena entre os processos de codificao
de fonte e de codificao de canal. O primeiro tem como objetivo reduzir a quantidade de
bits necessrios representao da informao, ou seja, diminuir a redundncia existente na
informao. O segundo adiciona, de maneira controlada, outro tipo de redundncia na

informao, objetivando a deteco e a correo de erros causados pelo canal. Esses dois
processos

normalmente

esto

presentes

nos

sistemas

de

comunicao

digital.

2.1.1 - Conceitos Bsicos


Suponha que todos os dados de interesse pudessem ser representados por uma
informao binria, isto , como uma seqncia de zeros e uns. Esta informao binria
est para ser transmitida atravs de um canal que causa erros ocasionais. O propsito de um
cdigo adicionar smbolos extras aos smbolos da informao de modo que os erros
podem ser encontrados e corrigidos no receptor. Isto , uma seqncia de smbolos de
dados representada por uma seqncia maior de smbolos com redundncia suficiente
para proteger os dados.
Um cdigo binrio de tamanho M e comprimento de bloco n um conjunto de k
palavras de comprimento n, chamadas palavras do cdigo. Geralmente, M = 2 k para um
inteiro k e o cdigo denominado de cdigo binrio (n,k). Por exemplo, pode ser feito o
seguinte cdigo:
C = {00000; 01011; 10110; 11101}
Este um cdigo muito pobre e muito pequeno com M = 4 e n = 5, mas ele satisfaz
os requisitos da definio. Pode-se usar este cdigo para representar nmeros binrios com
2 bits, fazendo a seguinte correspondncia arbitrria:

00 00000
01 01011
10 10110
11 11101
Suponha-se um rob que se move sobre um tabuleiro quadriculado, de modo que, ao
se dar um dos comandos (para frente, para trs, para direita ou para esquerda), o rob se
desloca do centro de uma casa para o centro de outra casa adjacente indicada pelo
comando. Os quatro comandos acima podem ser codificados como elementos de {0,1} x
{0,1}, como se segue:

Para frente

00

Para direita

10

Para trs

01

Para esquerda 11
O cdigo acima ento usado como cdigo da fonte. Suponha-se, agora, que esses
pares ordenados devam ser transmitidos via rdio e que o sinal no caminho sofra
interferncias. Imagine-se que a mensagem 00 possa, na chegada ser recebida como 01, o
que faria com que o rob, em vez de ir para frente, fosse para trs. O que se faz, ento,
recodificar as palavras, de modo a introduzir redundncias que permitam detectar e corrigir
erros. Pode-se, por exemplo, modificar o nosso cdigo da fonte como j foi feito
anteriormente:

00 00000
01 01011
10 10110
11 11101
Nessa recodificao, as duas primeiras posies reproduzem o cdigo da fonte,
enquanto que as trs posies restantes so redundncias introduzidas. O novo cdigo
introduzido na recodificao chamado de cdigo do canal.
Suponha-se agora que se tenha introduzido um erro ao transmitir, por exemplo, a
palavra 01011, de modo que a mensagem recebida seja 11011. Comparando essa
mensagem com as palavras do cdigo, observado que no lhe pertence e, portanto, so
detectados erros. A palavra do cdigo mais prxima da referida mensagem (a que tem
menor nmeros de componentes diferentes) 01011, que precisamente a palavra
transmitida.
Quando recodificado o cdigo fonte, de modo a introduzir redundncias que
permitam detectar e corrigir erros, esta recodificao no precisa ter obrigatoriamente o

cdigo fonte inserido. Por exemplo, no cdigo do rob poderia ter feito a seguinte
recodificao:
C = {10101; 10010; 01110; 11111}
utilizando-se a seguinte correspondncia:

00 10101
01 10010
10 01110
11 11111
Os dois cdigos criados para o exemplo do rob no so cdigos bons, pois eles no
so capazes de corrigir muitos tipos de erros. Por exemplo:
Note que no primeiro cdigo a escolha da palavra cdigo 01011 para estimar a
mensagem recebida 11011 feita de maneira bem natural. De fato, em relao s palavras
do cdigo observa-se que:

11011

00000 4 diferenas
01011 1 diferena
10110 3 diferenas
11101 2 diferenas

Suponha-se que tivesse recebido a mensagem 01110. Nesse caso, em relao s


palavras do cdigo teria:

01110

00000 3 diferenas
01011 2 diferenas
10110 2 diferenas

11101 3 diferenas
Nesse caso, no possvel estimar qual foi a palavra cdigo transmitida.
O ponto de partida para a construo de um cdigo corretor de erros definir o
alfabeto A com um nmero finito de q smbolos. No caso dos cdigos binrios A = {0 ,1}.
Um cdigo corretor de erros um subconjunto prprio qualquer de An = AAAA,
para algum nmero natural n. O nmero de elementos de um conjunto A ser denotado por |
A|. O cdigo do rob um subconjunto prprio de A5 , com A = {0 , 1}, onde A5 =

{(00000);(00001);(00010);(00100);......;(11111)} e |A5| = 25 = 32
Para que se possam identificar as palavras mais prximas de uma dada palavra
recebida com erro e estimar qual foi a palavra do cdigo transmitida, ser apresentado um
modo de medir a distnciaentre palavras em An.
2.1.2 - Distncia de Hamming
Suponha-se que ci e cj sejam duas palavras-cdigo quaisquer de um cdigo binrio
(n,k). Uma medida da diferena entre as duas palavras-cdigo o nmero de bits em
posies correspondentes que diferem entre si. Esta medida denominada de distncia de
Hamming e denotada por dij. Por exemplo, sejam ci = [0 1 0 1 1] e cj = [1 0 0 0 1]. Ento
dij = 3.
Observe que dij sempre satisfaz a condio 0 < d ij n, i j, para duas palavrascdigo ci e cj, ambas de n bits (por definio, em um cdigo C(n,k), ci cj i e j com i
j).
O menor valor no conjunto {dij}, i,j = 0,1,...,M-1, i j, M = 2k denominado
distncia mnima (dmin). Por exemplo, para o cdigo:
C = {10101; 10010; 01110; 11111}
as distncias esto colocadas na tabela 2.1:

10

Tabela 2.1 - distncia entre as palavras-cdigo.

ci
10101
10101
10101
10010
10010
01110

cj
10010
01110
11111
01110
11111
11111

dij
3
4
2
3
3
2

Portanto, dmin = 2.
A Distncia de Hamming dij uma medida do grau de separao entre duas
palavras-cdigo. Portanto, dmin est associado capacidade do cdigo em identificar
palavras-cdigo demoduladas no receptor quando estas so recebidas com erro como
conseqncia do rudo e interferncia presentes no canal. Em outras palavras, quanto maior
o dmin maior a capacidade de um cdigo detectar e corrigir erros.
Com isso, seja C(n,k) um cdigo corretor binrio, d o nmero mximo de erros que
C(n,k) capaz de detectar, t o nmero mximo de erros que C(n,k) capaz de corrigir e dmin
a distncia mnima do cdigo. Ento:
d=
t=

d min
2

(2.1)

d min 1
2

(2.2)
d min n k + 1

(2.3)
No exemplo da tabela 2.1, dmin = 2 para o cdigo C. Portanto, pelas equaes (2.1) e
(2.2) temos que d = 1 e t = 0 (pegando apenas a parte inteira), ou seja, o cdigo C detecta
no mximo 1 erro e no tem capacidade de corrigi-lo. um cdigo simples que serve
apenas como exemplo.

11

2.2 - Cdigos de Blocos Lineares


Como o LDPC o objetivo de estudo deste trabalho e por se tratar de um cdigo de
bloco linear, neste tpico ser aprofundado este assunto.
Seja {m0, m1, ..., mk-1} um bloco arbitrrio de k bits gerados pela fonte. Tipicamente,
o codificador de bloco usa estes k bits para gerar uma palavra de cdigo com n > k bits,
acrescentando n-k bits de controle. A palavra-cdigo assim construda tem a estrutura
como:
[b0 b1

...

bn-k-1 | m0 m1 ... mk-1]

Este um cdigo (n, k) e tem uma taxa de codificao definida por R = k/n.
No caso de um cdigo de bloco linear, os bits de paridade b0, b1, ..., bn-k-1 dependem
linearmente (numa aritmtica binria) dos bits da mensagem m0, m1, ..., mk-1. Ou seja,
definindo os vetores linha
b = [b0 b1

...

bn-k-1]

e
m = [m0 m1 ... mk-1]
podemos escrever
b = mP

(2.4)

onde P uma matriz binria (k x n-k) que determina o cdigo. Portanto, sendo
x = [b | m]

(2.5)

x = m[ P | I k ]

(2.6)

e substituindo (2.4) em (2.5), resulta

onde Ik a matriz identidade de dimenso (k x k). Definindo a matriz geradora do cdigo:


G = [P | I k ]

(2.7)

de dimenso (k x n), usando (2.6) se tem a equao:


x = mG

(2.8)

fcil verificar que o cdigo formado pelas palavras x, geradas pela matriz G a
partir das 2k mensagens m, um cdigo linear. Com isso, sendo xi = miG e xj = mjG
palavras-cdigo, ento xi xj = miG mjG = (mi mj) G; como mi mj necessariamente
uma mensagem, xi xj uma palavra do cdigo.
Definindo a matriz de verificao de paridade
12

H = [ I n k | P T ]

(2.9)

de dimenso (n-k x n), e usando (2.7) verifica-se que


T

T T
P
T
T
HG = [ I n k | P ] = P P = 0n k x k
Ik

(2.10)

Assim sendo, de (2.8) vem xT =GT mT , o que, utilizando a equao (2.10), conduz a

Hx = 0n k x 1 xH = 01 x n k
T

(2.11)

Esta uma condio necessria e suficiente para que x seja uma palavra do cdigo
(n, k) gerado pela matriz G. No entanto, a verificao de (2.11) sada do canal ruidoso no
significa necessariamente que no tenham ocorrido erros de transmisso. Com isso, se for
transmitida a palavra-cdigo x, ento, a palavra y recebida , em geral,
y = x+ e

onde e o vetor de erro e = [e0

...

ei

...

(2.12)

en-1], ei igual a 1 se houver erro no bit i e 0 caso no

haja erro. Usando-se (2.12) em (2.11):


yH T = xH T + eH T = eH T = 0 se e for palavra-cdigo
yH T = xH T + eH T = eH T 0

caso contrrio

o que significa que sendo o vetor de erro uma palavra-cdigo, a palavra y, recebida com
erros de transmisso, cumpre o teste de verificao de paridade (2.11), e os erros de
transmisso no so detectados.

2.3 - Grficos de Tanner


Os Grficos de Tanner[5] so uma das formas mais simples de representar um
cdigo binrio linear.

13

Sabemos que um cdigo binrio linear (n,k) pode ser definido por um sistema de (n-k)
equaes lineares homogneas a n incgnitas (os bits das palavras-cdigo). Podemos
construir a partir deste sistema de equaes, um grfico bipartido formado por dois tipos de
ns:
(n-k) ns designados por ns de teste (CNs - check nodes), um por cada uma das
equaes lineares homogneas do sistema.
ns designados por ns das variveis (BNs - bit nodes), um por cada uma das
variveis do sistema de equaes.
Cada CN ligado a todos os BNs que intervm na equao qual o CN est
associado. Por sua vez, cada BN associado a um dado bit da palavra-cdigo, ligado a
todos os CNs correspondentes s equaes de paridade na qual o bit intervm. Devido a
este fato, apenas existem ligaes entre BNs e CNs e nunca entre ns do mesmo tipo
(grfico bipartido). A um grfico deste tipo d-se o nome de Grfico de Tanner.
Dada a matriz de teste de paridade H de um cdigo binrio linear (n,k), facilmente se
pode obter o seu GT e vice-versa. Assim, basta atender a que existem (n-k) CNs
associados a cada linha da matriz H, n BNs associados a cada coluna de H e que cada CN j
ligado ao BN i sempre que na matriz o elemento hij=1.
Exemplo - Considere-se o cdigo binrio linear (6,3), definido pela matriz de teste de
paridade:

14

c1 c2 c3 c4 c5 c6
f1 1 1 0 0 1 0

H = f 2 0 1 1 0 0 1
f 3 1 0 1 1 0 0
O GT associado a este cdigo :

A importncia dos GT como forma de representao de cdigos binrios lineares


reside no fato de muitos dos algoritmos de decodificao destes cdigos terem por base esta
representao grfica. Mais adiante, no captulo de LDPC, ser mostrada sua aplicao para
este tipo de cdigo estudado neste trabalho.

2.4 - Decodificao pela Sndrome


Para proceder decodificao, isto , a deteco e/ou correo de erros de
transmisso, o decodificador comea por calcular a sndrome da palavra recebida y, isto , o
vetor binrio

15

s = yH T

(2.13)

de dimenso n-k . Levando-se em conta (2.11) e (2.12), verificamos que a sndrome s


depende do padro de erros, ou seja,
s = eH T

(2.14)

Por outro lado, todos os padres de erro que diferem entre si de uma palavra-cdigo tm a
mesma sndrome. Com isso, dado um vetor e que verifique (2.14), ento, todos os vetores
de erro
ei = e xi , i = 0,1,...,2k-1

(2.15)

onde xi , i = 0,1,...,2k-1 so todas as palavras-cdigo, verificam tambm (2.14). Assim,


define-se o coset do padro de erros e como sendo o conjunto dos vetores de erro definido
em (2.15) que tm a mesma sndrome (2.14). Uma vez que um cdigo de bloco linear (n,k)
tem 2k palavras admissveis, num total de 2n palavras binrias de comprimento n, conclui-se
que existem 2n-k cosets, isto , 2n-k sndromes distintas.
A sndrome contm alguma informao sobre o correspondente padro de erros,
embora geralmente insuficiente para o identificar sem ambigidade. Se assim fosse,
qualquer padro de erros poderia ser corrigido. De qualquer modo, o conhecimento da
sndrome s reduz o espao de busca de uma 2 n dimenso para 2k. Uma vez calculado s, o
decodificador deve escolher o elemento do respectivo coset que otimize um determinado
critrio. Por exemplo, a respectiva probabilidade de ocorrncia. Para valores relativamente
baixos da probabilidade de ocorrncia de erros de transmisso, o padro de erros mais
provvel corresponde quele que tem menos 1's, isto , aquele cujo peso
w(e) =

n 1

i= 0

ei

mnimo.
Portanto, o algoritmo de decodificao seria da seguinte maneira.
Dada a palavra recebida y:
1. Calcular a sndrome s = yHT
a) s = 0, ento, y deve ser uma palavra-cdigo y0 = y
b) s 0, ento, executar prximo passo.

16

(2.16)

2. Calcular o coset de y {ei = y xi , i = 0,1,...,2k-1}, escolher o padro e0 de menor


peso e executar o prximo passo.
3. Construir a palavra corrigida y0 = y e0.
Observao: sendo e0 = y x0, com x0 HT = 0, tem-se
y 0 = y e0 = y y x 0 = x 0

isto , a sada do decodificador a palavra-cdigo que difere da palavra recebida num


nmero mnimo de posies (correspondentes s posies dos 1's em e0). Ainda por outras
palavras, a palavra-cdigo para a qual y x0 tem peso mnimo.

17

Captulo 3 - Cdigo Low-density parity-check (LDPC)

Os cdigos LDPC foram introduzidos por R.G.Gallager [4] no incio dos anos 60 e
so capazes de atingir um desempenho prximo da capacidade em diversos modelos de
canais assim como os cdigos Turbo [6]. Nesta poca, os computadores no eram capazes
de simular o desempenho de cdigos com comprimentos significativos e com baixas taxas
de erro: na gerao da matriz H que garantisse uma boa distncia mnima do cdigo, na
codificao (normalmente no sistemtico) e ainda na sua decodificao, tendo por base o
algoritmo Soma de Produtos (SPA) proposto pelo prprio Gallager. Isso fez com que os
cdigos LDPC fossem deixados de lado pelos pesquisadores por muito tempo. Somente
mais tarde, em 1981, R.M.Tanner [5] generalizou o trabalho de Gallager e introduziu a
representao grfica de cdigos LDPC atravs de grafos bipartite conforme foi mostrado
no captulo anterior. Ainda no foi nesta poca que os cdigos LDPC passaram a ser
utilizados. Mas, D.J.C. Mackay [7] em meados da dcada de 90; aps o advento dos
cdigos Turbo e da decodificao iterativa, os redescobriu. Mackay mostrou que os cdigos
LDPC longos, quando decodificados com o algoritmo Soma-Produto (SPA), so capazes de
atingir um desempenho muito prximo ao limite de Shannon [1] do Canal AWGN. Com
isso, estes cdigos passaram a ser intensamente estudados e utilizados para controle de
erros em um grande nmero de sistemas de comunicao e armazenamento de dados.
Alm disso, comearam a ser estudados os cdigos LDPC irregulares, ao contrrio
dos cdigos regulares introduzidos por Gallager [4]. Estes cdigos se mostraram superiores
aos regulares em alguns aspectos e a diferena entre estes cdigos, que o objetivo deste
projeto, ser explorada mais adiante.

3.1 - Cdigos regulares e irregulares


Um cdigo LDPC regular definido como o espao nulo de uma matriz de
verificao de paridade H de M x N que possui a seguinte propriedade: cada linha e coluna
possuem pesos constantes dc (linha) e ds (coluna) e estes pesos so muito pequenos quando
comparados com o comprimento N do cdigo e com o nmero de linhas M em H,
18

respectivamente. Por isso, o nome low-density parity-check, ou seja, uma matriz de


verificao de paridade com uma densidade baixa (pesos nas linhas e colunas bem menores
que seu tamanho).
Isto significa que em um cdigo LDPC, cada smbolo pertencente a uma palavracdigo envolvido em ds equaes de paridade e cada equao de paridade envolve dc
smbolos de uma palavra-cdigo. Um cdigo com estas caractersticas chamado de cdigo
LDPC (ds,dc)-regular, o nmero de elementos no nulos em H
M dc = N ds

Como o nmero total de elementos na matriz M x N,

(3.1)
a densidade de H

(porcentagem de 1's na matriz), denotada por r, dada por


r=

M dc dc N d s d s
=
=
=
M N N M N M

(3.2)

Geralmente, por se tratar de uma matriz com poucos valores no-nulos se


comparado com o seu tamanho, as tcnicas de projeto de cdigos LDPC no garantem que
H ir possuir apenas linhas linearmente independentes. Ou seja, normalmente, para um
cdigo LDPC, o posto(H) menor ou igual M. Portanto, o nmero de smbolos de
verificao de paridade satisfaz N K M, com igualdade apenas quando todas as linhas
de H forem linearmente independentes. possvel eliminar as linhas linearmente
independentes para encontrar uma matriz de verificao de paridade N K x M de posto
completo, entretanto, a matriz resultante provavelmente no possuiria colunas e linhas de
peso constante. Normalmente, as possveis dependncias entre as linhas de H so ignoradas
e assume-se que a taxa do cdigo - a razo entre a quantidade de informao e o tamanho
da palavra-cdigo - igual a:

R=

d
N M
M
= 1
= 1 s
N
N
dc

(3.3)

Gallager, em sua dissertao, provou ainda que fazendo ds 3, os cdigos LDPC


que podem ser obtidos possuem, em sua maioria, uma distncia mnima elevada, bastando
para tal seguir algumas regras simples de construo como, por exemplo, garantir que
quaisquer duas colunas da matriz H possuam quanto muito um s 1 em comum. Devido

19

baixa densidade da matriz H, garantido que o nmero mnimo de colunas de H que so


necessrias somar de forma a obter o vetor nulo elevado e, logo, que o cdigo possua uma
distncia mnima elevada de acordo com o que foi explicado no captulo anterior.
O grafo fator, que nada mais do que a generalizao dos grafos de Tanner j vistos
acima, de um cdigo LDPC (ds,dc)-regular constitudo de N ns de varivel (BNs) de
grau ds e M ns de verificao (CNs) de grau dc. Uma vez que os graus dos ns so
determinados, ainda possvel escolher quais as conexes em particular sero realizadas. O
par (ds,dc), juntamente com o comprimento N do cdigo, especifica um conjunto de cdigos
LDPC. Para ilustrar a estrutura dos cdigos LDPC (ds,dc)-regular, a matriz de verificao e
o grafo fator de um cdigo LDPC (3,4)-regular de comprimento 12 so mostrados abaixo:

(a)

(b)
figura 3.1:(a) matriz de paridade e (b )grafo fator para um cdigo LDPC (3,4)-regular de comprimento 12

20

Neste caso, temos:


M=9

N = 12

dc = 4

ds = 3

Este cdigo possui taxa R = 1 = e densidade r = 4/12 0.33.


As matrizes de verificao de paridade dos cdigos LDPC tambm podem
apresentar linhas e colunas com pesos variveis. Neste caso, os cdigos LDPC so
chamados irregulares. Os cdigos LDPC irregulares tambm possuem matrizes de
verificao de paridade esparsas e so representados por grafos nos quais os BNs e CNs
no possuem graus constantes. Um conjunto de cdigos LDPC irregulares definido
atravs de distribuies de grau. Uma distribuio de grau (x) um polinmio da forma:
( x) =

i xi 1

i 1

(3.4)
em que os coeficientes so nmeros reais no-negativos, de modo que (1) = 1. Dado um
par ((x),(x)) de distribuies de grau e um nmero natural N, define-se o conjunto de
cdigos LDPC ((x),(x))-irregulares de comprimento N, no qual, a partir de (3.4) temos
( x) =

i x i 1 como a distribuio de grau dos BNs, e ( x) =

i x i 1 como

distribuio de grau dos CNs. Os coeficientes de i (ou i) denotam a frao de ramos no


grafo que esto conectados a BNs (ou CNs) de grau i. A taxa de um cdigo LDPC
((x),(x))-irregular dada pela seguinte expresso:
R = 1

0
1
0

( x ) dx
( x ) dx

(3.5)
Exemplo de cdigo LDPC-irregular: Seja um conjunto de cdigos LDPC ((x),(x))irregulares de comprimento 12, definido pelas distribuies de grau:

( x) =

1
1
x + x2
2
2

21

( x) =

2 2 1 3
x + x
3
3

Um elemento deste conjunto um cdigo definido a partir de 9 equaes de verificao de


paridade. De acordo com as distribuies de grau, o grafo fator que representa este cdigo
possui 6 BNs de grau 2, 6 BNs de grau 3, 6 CNs de grau 3 e 3 CNs de grau 4. Uma
matriz de verificao de paridade e seu respectivo grafo fator para este cdigo so
mostrados a seguir.

(a)

(b)
figura 3.2: (a) matriz de paridade e (b) grafo fator para um cdigo LDPC ((x),(x))-irregular de comprimento 12

A densidade da matriz H r = 30/108 0.2777 e a taxa deste cdigo dada por

22

2 2 1 3
x + x dx
3
R = 1 3
0.2677
11
1 2
0 2 x + 2 x dx

3.2 - Conceito de Giro


Um dos mais importantes conceitos relativos aos GT (grafos de Tanner) a
definio de giro (girth) de comprimento l como sendo um percurso fechado formado por l
caminhos. Por exemplo, tendo por base a figura 3.3 podemos observar um ciclo de
comprimento 6 que se encontra assinalado em negrito. O menor comprimento de todos os
ciclos existentes num GT designado por giro.

figura 3.3: grafo de Tanner para um cdigo LDPC regular.

Na prtica, ao projetar um cdigo LDPC procura-se evitar a existncia de ciclos de


pequeno comprimento no seu GT de forma a melhorar o desempenho do algoritmo SPA.
De fato, prova-se que o algoritmo SPA tem desempenho timo quando aplicado a grficos
sem ciclos. Na presena de grficos com ciclos, a sua eficincia diminui, sendo inferior
para cdigos com um baixo giro. Por outro lado, prova-se tambm que GT sem ciclos no
suportam bons cdigos, pelo que necessrio obedecer a algumas regras na construo dos
cdigos LDPC por forma a que estes possuam boas propriedades (distncia mnima e um
giro elevados).
3.2.1 - Identificao de ciclos e determinao do giro de um cdigo LDPC

23

Qualquer ciclo de um GT tem, necessariamente, um comprimento par e o seu valor


mnimo 4 correspondendo a uma matriz de teste de paridade em que existem duas colunas
com dois 1s em comum (ver figura 3.4). Uma das regras de construo da matriz H, para
evitar a existncia de ciclos de dimenso 4, consiste em garantir que quaisquer duas colunas
da matriz , possuam quanto muito um s 1 em comum.

figura 3.4: Exemplo de ciclo de comprimento 4 e sua respectiva matriz de verificao de paridade.

J os ciclos de comprimento 6 so mais difceis de identificar na matriz H. Na


figura 3.5 apresentamos um exemplo.

figura 3.5: Exemplo de um ciclo de comprimento 6 num GT e a sua respectiva matriz de verificao de paridade.

Mao e Banihashemi [8] apresentam uma forma simples de determinar o giro


associado a cada BN, isto , o ciclo mais curto que passa por cada BN. O mtodo consiste
em construir para cada BN uma rvore a partir do GT ou da matriz H do cdigo. Assim,
considera-se como raiz da rvore o BNi cujo giro pretendemos determinar. A rvore ento
construda passo a passo. No nvel k de descendncia da rvore so includos todos os ns a
uma distncia k do BNi. O procedimento repetido at o nvel de descendncia n em que
includo um n que se encontra ligado no GT do cdigo a pelo menos dois ns j includos

24

no nvel de descendncia. Isto identifica a formao do primeiro ciclo, sendo 2n o giro do


BNi.
Em resumo, o mtodo consiste em adicionar como descendentes, a cada n da
rvore, todos os ns que a ele se encontram ligados no GT, com exceo do n pai,
terminando o algoritmo quando encontrado um n que descendente de mais do que um
n diferente.
Na figura 3.6, pode-se observar a aplicao do mtodo anteriormente descrito na
determinao do giro do BN do cdigo descrito pelo GT da figura 3.3. Como pode ser
observado, s no 3 nvel de descendncia da rvore encontramos um n descendente
simultaneamente de mais do que um n, pelo que se conclui que o giro do BN 6.
Assinalado em negrito encontra-se identificado um dos ciclos de comprimento 6 que
contm o BN .

figura 3.6: Determinao do giro Ci do cdigo LDPC descrito na figura 3.3.

McGowan e Williamson [9] apresentam um mtodo algbrico de determinao do


giro de cada BN, baseado no conceito de matriz adjacente. Dado um cdigo LDPC descrito
por uma matriz de verificao de paridade H, a sua matriz adjacente definida por,
0
A= T
H

25

H
0

(3.6)

pelo que cada n do GT do cdigo (BN ou CN) representado por uma linha e por uma
coluna da matriz A.
Definindo os ns GT como v1, v2, . . . , vp, com a matriz A = [aij] de tamanho p x p,
ento:
aij = 1 se vi est conectado ao vj,
aij = 0 se o contrrio.
Considerando:
HH T
A2 =
0

HTH

os elementos aij2 da matriz A2 so calculados pela frmula:


aij2 =

p
k=1

aik akj

percebe-se que este tambm o caminho de tamanho 2 entre v i e vj, pois cada caminho
contm seu n intermedirio vk cujas duas ligaes so aik = 1 e akj = 1.
Portanto, considerando um grfico com giro de tamanho 4, observa-se nestes ciclos
que cada n vi conectado ao n vj, com dois caminhos de tamanho 2 entre eles, ou seja, os
giros de tamanho 4 so observados quando aij2 = 2.
Com isso, provaram que o elemento (i,j) da matriz An o nmero de percursos com
comprimento n entre os ns i e j do cdigo. Neste sentido, cada elemento no-diagonal da
matriz An, aijn, representa o nmero de ciclos de dimenso n que contm os ns i e j. O
mtodo descrito permite determinar rapidamente o giro de cada BN, bem como, o giro do
cdigo.

26

Captulo 4 Construo de cdigos LDPC

A forma mais simples de projetar um cdigo LDPC consiste na construo da


matriz de teste de paridade que cumpra um conjunto de requisitos pretendidos, como sejam,
definir um cdigo regular (caracterizado por um dado peso para cada coluna e linha) ou
irregular (podendo ser especificado o grau de cada BN e CN), ou ainda, garantir um dado
giro mnimo. Este projeto tambm pode ser feito a partir do GT que a matriz de teste de
paridade ir representar.
Obviamente, para qualquer conjunto de restries existe um conjunto imenso de
cdigos que cumprem as referidas especificaes. A construo da matriz H feita de
forma quase aleatria, mas seguindo algumas regras que maximizam a probabilidade do
cdigo obtido possuir um bom desempenho. No entanto, essas regras no nos do qualquer
garantia de que tal acontea. Podero inclusive suceder situaes em que a matriz H obtida
no ser de caracterstica mxima, ou seja, algumas linhas ou colunas no sero
linearmente independentes e, portanto, definir um cdigo LDPC (n,k) com k < k.
O primeiro mtodo utilizado para obter matrizes de cdigos LDPC regulares foi
originalmente proposto por Gallager [4]. Para construir a matriz de verificao de paridade,
denominada HGA; preciso primeiro construir uma submatriz H1 de dimenses k x (k . dc),
na qual as colunas apresentam peso 1 e as linhas apresentam peso dc. A constante k
determinada a partir do comprimento N e do valor de dc, de modo que N = k . d, conforme
mostrado na figura 4.1:

27

figura 4.1: matriz de paridade proposta por Gallager.

Em seguida, so realizadas ds 1 permutaes das colunas de H1 para formar outras ds 1


submatrizes H2, H3,

. ..

, Hds de dimenses k x k . dc. Com estas ds submatrizes forma-se a

matriz HGA da seguinte maneira:

Os pesos das colunas e das linhas da matriz resultante HGA so ds e dc, respectivamente. A
densidade r = 1/k. Portanto, a matriz HGA esparsa para k >> 1.
As ds 1 permutaes devem ser escolhidas de modo que o cdigo gerado pela
matriz HGA possua uma boa distncia mnima e seu GT no possua ciclos curtos,
especialmente, ciclos de comprimento 4. Gallager [4] no sugeriu nenhum mtodo
especfico para encontrar estas permutaes e no existe nenhum algoritmo conhecido para
encontrar permutaes que garantam a no existncia de ciclos curtos. Normalmente, os
cdigos LDPC de Gallager so construdos atravs de buscas computacionais exaustivas
por permutaes que garantam um cdigo de bom desempenho. No entanto, possvel
utilizar permutaes aleatrias na construo de cdigos LDPC. Tal construo no garante

28

nenhuma propriedade de distncia mnima ou ciclo mnimo, porm, para comprimentos


longos muito provvel que o cdigo construdo desta forma possua um bom desempenho.
Exemplo de Cdigo de Gallager: A matriz HGA mostrada na figura 4.2 foi construda
a partir da tcnica de Gallager, com os parmetros N = 20, ds = 3 e dc = 4.

figura 4.2: matriz de Gallager construda com N = 20, ds = 3 e dc = 4.

Makay e Neal [7] apresentam um conjunto de estratgias para gerar cdigos LDPC.
Estas estratgias so apresentadas de forma numerada, sendo convico dos autores que as
de ordem superior maximizam a probabilidade do cdigo obtido possuir um melhor
desempenho. No entanto, eles prprios reconhecem no possuir qualquer prova deste fato.

29

- Estratgias apresentadas por Mackay e Neal para construo de cdigos LDPC:


I.

A matriz H gerada partindo de uma matriz de zeros de dimenses (n k) x n


e aleatoriamente colocando ds bits em cada coluna (o cdigo assim gerado
poder ser irregular);

II.

A matriz H gerada criando aleatoriamente colunas de peso de Hamming ds;

III.

A matriz H gerada criando aleatoriamente colunas de peso de Hamming ds

e procurando uniformizar ao mximo o peso de Hamming dc de cada linha.


IV.

A matriz H gerada com colunas de peso de Hamming ds, linhas de peso de

Hamming dc, e no possuindo quaisquer duas colunas com mais de um 1 em


comum;
V.

A matriz H gerada de acordo com o procedimento do ponto anterior mas

tendo como objetivo a maximizao do giro do cdigo (apresentado no


captulo anterior);
VI.

A matriz H gerada de acordo com o procedimento referido em IV,

procurando obter uma matriz H de caracterstica mxima, de preferncia na


forma H = [H1 | H2] com H1 ou H2 inversvel.
Mackay e Neal [7] apresentam ainda em um conjunto de tcnicas que fazem uso de
algumas das estratgias antes referidas. Essas tcnicas so vulgarmente conhecidas por 1A,
2A, 1B e 2B, sendo usadas por muitos investigadores na classificao dos cdigos LDPC
estudados.
A estratgia 1A diz respeito ao ponto III com ds = 3, e em que introduzida a
restrio de o cdigo possuir um giro superior a 4. O cdigo resultante possui taxa R = . A
figura 4.3 ilustra a construo 1A. O nmero 3 denota a sobreposio de 3 matrizes de

30

permutao e a seta circular representa permutaes aleatrias de todas as colunas naquele


bloco.

figura 4.3: Construo 1A para um cdigo de Mackay (3,6)-regular.

A estratgia 2A baseia-se na construo da matriz H com M/2 colunas (com M


sendo o nmero de linhas da matriz H) de peso 2, sem que exista qualquer 1 em comum
entre elas, e em que as restantes colunas tm peso 3. Simultaneamente, procura-se que o
peso dc seja o mais uniforme possvel, impondo como restrio o fato de quaisquer duas
colunas de H no terem mais do que um 1 em comum. Consiste, pois numa implementao
da estratgia IV anteriormente mencionada. O cdigo resultante possui taxa R = 1/3. A
construo irregular foi introduzida por apresentar bons resultados empricos. No prximo
captulo, a diferena de performance entre cdigos regulares e irregulares ser mostrada. A
figura 4.4 mostra a construo 2A. As linhas diagonais representam matrizes de identidade.

figura 4.4:Construo 2A para um cdigo de Mackay irregular.

As estratgias 1B e 2B resultam da eliminao de um pequeno nmero de colunas


das matrizes H obtidas segundo as estratgias 1A e 2A, respectivamente, de forma a
eliminar todos os ciclos do cdigo de tamanho inferior a um dado valor l estipulado,
procurando, desta forma, maximizar o giro de acordo com a estratgia V.

31

Exemplo de Cdigos de Mackay: Considere o cdigo de Mackay (3,6)-regular de


comprimento 96 e taxa R = construdo a partir da tcnica 1A. A sua matriz de verificao
de paridade mostrada na figura 4.5, na qual os pontos pretos representam os elementos
no-nulos e os elementos nulos so deixados em branco.

figura 4.5: Matriz H de um cdigo de Mackay (3,6)-regular

E um exemplo de uma matriz de verificao de paridade, construda com o uso da tcnica


2A, mostrada na figura 4.6. Este cdigo possui comprimento 96 e taxa R = 1/3.

figura 4.6: Matriz H de um cdigo de Mackay irregular

32

Um dos problemas que colocado exatamente a forma de eliminar os ciclos de


comprimento inferior a um dado valor. McGowan e Williamson [9] baseados no conceito
de matriz adjacente, definida anteriormente, apresentam um mtodo para remoo desses
ciclos por alterao da matriz H, garantindo, simultaneamente, que no so gerados novos
ciclos do mesmo tamanho ou inferior.
Como j foi referido, seguindo qualquer uma destas estratgias, o conjunto de
cdigos admissveis muito grande, tornando-se necessrio dispor de alguns critrios de
seleo por forma a escolher os susceptveis de apresentarem um melhor desempenho, que
o principal objetivo deste trabalho. Para isso, comparaes entre alguns cdigos propostos
sero realizadas a fim de observar o de melhor performance.
Mao e Banihashemi [8] sugerem, como critrio de seleo a escolha do cdigo que
o apresente o giro mais elevado. Este mtodo implica a determinao do giro de cada um
dos cdigos o que coloca, desde logo, limitaes sua aplicao em comprimentos de
bloco elevados. Estes autores mostraram que para cdigos obtidos segundo o mtodo de
construo 2A, o critrio de seleo por eles propostos, conduzia escolha de um cdigo
com uma menor probabilidade de erro de decodificao.
Um outro critrio de seleo consiste na escolha do cdigo que possui uma maior
distncia mnima (sem dvida, um bom parmetro de avaliao do desempenho de um
cdigo linear). A determinao da distncia mnima de um cdigo linear , no entanto, uma
tarefa complexa para cdigos com comprimentos de bloco elevados. Berrou, Vaton,
Jzquel e Douillard [10] apresentam um mtodo iterativo para a determinao da distncia
mnima de um cdigo linear, que designam por Mtodo do Erro Impulsivo. O mtodo
baseia-se na resposta de um de codificador iterativo de mxima verossimilhana do tipo
Soft-In / Soft-Out a um erro do tipo impulsivo (A palavra-cdigo transmitida apenas
corrompida num bit com rudo impulsivo de amplitude Ai) num canal Gaussiano. Os
autores provaram que a amplitude mnima de rudo que provoca um erro de decodificao
igual distncia mnima do cdigo em causa.
Alm destes, Richardson e Urbanke [11] introduziram um mtodo amplamente
utilizado atualmente que leva em considerao a anlise das densidades de probabilidade
das mensagens iterao por iterao, que so funes do nvel de rudo do canal e dos graus
dos ns de verificao e de bits (smbolos). Este mtodo chama-se Density Evolution, que

33

busca definir o limite de nvel de rudo de um determinado conjunto de cdigos, chamado


de limiar, a partir do qual a decodificao iterativa SP no converge, ou seja, at este valor
o cdigo ter um desempenho livre de erros. O tamanho do bloco influencia na distncia
entre o desempenho do cdigo e o limiar do seu conjunto de cdigos, pois, conforme
diminui o seu tamanho, essa distncia aumenta. No final, atravs desse mtodo, concluram
que aumentando os graus dos ns de bits (smbolos), o limiar de decodificao tambm
aumenta, mostrando que com cdigos irregulares possvel alcanar o limite do canal de
Shannon.
As tcnicas de construo apresentadas at agora se baseiam diretamente no projeto
das matrizes de verificao de paridade. No entanto, um cdigo LDPC tambm pode ser
construdo atravs do projeto do GT que o descreve, conforme foi mencionado
anteriormente. Para se obter um bom cdigo, sempre desejvel construir um GT que
possua um ciclo mnimo grande. A construo de GTs com o maior ciclo-mnimo possvel
um difcil problema de difcil anlise combinatorial. Entretanto, possvel projetar GTs
com um ciclo mnimo de comprimento relativamente grande atravs de algoritmos subtimos. O algoritmo Progressive Edge Growth (PEG) constri grafos colocando ramos
progressivamente entre BNs e CNs em um GT de modo a maximizar os ciclos mnimos
locais de cada um dos BNs.
Dados os parmetros do grafo, isto , o nmero de BNs N, o nmero de CNs M e a
distribuio de grau dos BNs (x), um procedimento que adiciona ramos realizado de
modo que cada novo ramo adicionado ao grafo possua o menor impacto possvel no ciclo
mnimo. A idia do algoritmo , para cada BN, encontrar os CNs mais distantes e ento
conecta-los atravs de ramos. Para encontrar os CNs mais distantes de um determinado BN
xn, construdo um subgrafo partindo de xn e dos ramos nele incidentes (xn, cm1),(xn, cm2), . . . ,
(xn, cmd(xn)) so includos no subgrafo, juntamente com todos os ramos incidentes neles,
excluindo (xn, cm1),(xn, cm2),

...

, (xn, cmd(xn)). O processo continua at que uma determinada

profundidade seja alcanada.


Neste procedimento, o subgrafo pode conter vrios vrtices e ramos iguais. Para um
BN xn, a sua vizinhana de profundidade l definida como o conjunto de CNs alcanados
pelo subgrafo de profundidade l expandido como mostrado na figura 2.13 e denotada por

34

V \ N l ( xn ) . Na figura 4.7,

___ l

N l ( x n ) . O conjunto complementar N ( x ) definido como


n
c

qualquer BN que aparece pela primeira vez na profundidade l est a uma distncia 2l em
relao ao n xn e qualquer CN que aparece pela primeira vez na profundidade l est a uma
distncia de 2l + 1 em relao ao n xn.
Ao expandir progressivamente o subgrafo a partir do BN xn duas situaes podem
ocorrer:
1) a cardinalidade do conjunto N l ( x n ) para de aumentar e menor do que M;
___ l + 1

l
2) N ( x n ) e N

( x n ) = .

No primeiro caso, nem todos os CNs podem ser alcanados a partir de xn, ento
conectar xn a um dos elementos de N l ( x n ) no cria nenhum ciclo adicional. No segundo
caso, todos os CNs so alcanados em uma profundidade l + 1, ento a conexo de xn a um
___ l

elemento de N ( x n ) cria um ciclo de comprimento 2(l + 2).

35

figura 4.7: subgrafo expandido a partir do n x.

Quando o algoritmo encontra mais de um CN para conectar ao BN xn, isto ,


___ l

N ( x n ) possui mais de um elemento, o n com o menor grau selecionado. Tal

procedimento faz com que a distribuio de graus dos CNs seja to uniforme quanto
possvel. Se houverem mltiplas escolhas de ns de menor grau, possvel escolher
aleatoriamente um dos ns do conjunto (com probabilidade uniforme) ou escolher o CN
com o menor ndice do conjunto.
Exemplo de cdigo construdo com o algoritmo PEG: Usando o algoritmo PEG para
construir um cdigo LDPC de comprimento N = 504, M = 252 equaes de paridade e
distribuio de graus (x) = x2, obtm-se a matriz de verificao de paridade mostrada na
figura 4.8.
36

figura 4.8: Matriz H de um cdigo LDPC construdo com o algoritmo PEG.

O algoritmo PEG possui a vantagem de ser bastante flexvel e possibilita obter


cdigos com uma estrutura que permite um codificador de complexidade linear. Alm
disso, o algoritmo PEG permite obter cdigos regulares e irregulares de qualquer taxa, com
um bom ciclo mnimo. Mesmo os cdigos regulares podem possuir uma leve irregularidade
nos graus de CNs. No entanto, isto no influencia significativamente o seu desempenho.
- Abordagens alternativas para construo de cdigos LDPC.
Existem outras formas de construo de cdigos LDPC. Por exemplo, Prabhakar e
Narayanan [14] apresentam um mtodo algbrico de construo de cdigos LDPC
regulares. Este apresenta como grande vantagem o fato de a estrutura de o GT poder ser
gerada algebricamente usando um procedimento recursivo.
Este mtodo algbrico pretende construir um cdigo LDPC regular de dimenses
(n,k), sendo ds o peso de cada BN e o peso de dc de cada CN. Existem n x ds ligaes a
BNs e a CNs em que cada caminho do GT liga uma conexo BN a uma conexo CN.
Designando por Ai a conexo CN qual liga a conexo BN i, com Ai pertencente ao BN

37

[i/ds], ento, Prabhakar e Narayanan propuseram que a seqncia A0, A1,

...

, Anxds-1 fosse

obtida da seguinte forma recursiva:


Ai + 1 = (a. Ai + b) mod M

com M = n x ds

0 i M ,

(4.1)
com a e b nmeros inteiros satisfazendo um conjunto de condies por eles deduzidas e A0
um nmero inteiro entre 0 e M.
Ao todo so nove as restries colocadas por Prabhakar e Narayanan que garantem
que o cdigo gerado por este mtodo LDPC e no possui ciclos de comprimento inferior a
seis. Estas condies no so muito restritivas, permitindo que seja gerado um vasto
conjunto de cdigos LDPC com diferentes comprimentos e taxas de informao. O
desempenho do cdigo gerado depende tambm dos valores escolhidos para a, b e A0.
Uma abordagem alternativa para a construo de bons cdigos LDPC irregulares
apresentada por Richardson, Shokrollahi e Urbanke [12]; e Chung, Forney, Richardson e
Urbanke [13] que se baseia num estudo sobre a distribuio dos pesos de cada BN que
otimiza o desempenho do cdigo.

38

Captulo 5 Codificao e Decodificao de LDPC


5.1 - Codificao
Agora que foi introduzida a teoria de cdigos LDPC, ser mostrada como
realizada a codificao a partir da matriz esparsa gerada.
Sendo os cdigos LDPC, a forma imediata de realizar a codificao seria partindo
do conhecimento da matriz geradora determinar as palavras-cdigo de acordo com a
equao (2.8), ou seja, fazendo x = mG. No entanto, os mtodos utilizados na construo de
cdigos LDPC assentam na obteno da sua matriz de teste de paridade H ou no
equivalente GT. Na grande maioria das vezes a matriz H obtida no sistemtica nem de
caracterstica mxima. A matriz pode, no entanto, ser expressa na forma sistemtica (2.9)
usando o mtodo de Gauss. A obteno da matriz G depois imediata. Podem, no entanto,
surgir situaes em que para obter H na forma (2.9) se torne necessrio efetuar troca de
colunas, obtendo-se desta forma um cdigo LDPC diferente mas com o mesmo
desempenho do original.
Embora de fcil implementao, o mtodo anterior extremamente dispendioso em
termo do nmero de operaes a realizar na codificao de cada palavra de cdigo. Isto se
deve ao fato de a sistematizao da matriz H no conduzir, necessariamente, obteno de
uma matriz G com baixa densidade de 1s, pelo que a codificao por (2.8) exige a
realizao de um nmero extremamente elevado de operaes.
Uma aproximao alternativa para a soluo deste problema consiste na obteno de
cdigos LDPC por mtodos algbricos e geomtricos em que a codificao possa ser
realizada por circuitos simples baseados em registros de deslocamento. o caso dos
cdigos apresentados por Johnson e Weller [15], que sugerem uma famlia de cdigos
LDPC quase cclicos com giro no inferior a 6. tambm o caso de Kou, Lin e Fossorier
[16] que apresentam uma abordagem para a construo de cdigos LDPC baseada em
linhas e pontos de uma geometria finita, como a geometria Euclidiana e a geometria
projetiva em campos finitos. Os cdigos construdos por este mtodo so tambm cclicos
ou quase cclicos.

39

5.2 - Decodificao Hard e Soft decision


Uma das principais vantagens dos cdigos LDPC o fato de poder ser decodificado
usando algoritmo iterativo, que tem a complexidade crescente linearmente com o tamanho
do cdigo.
O algoritmo usado para decodificar os cdigos LDPC foi descoberto
independentemente vrias vezes e aparece com diferentes nomes. Os mais comuns so
belief propagation (BA), message passing algorithm (MPA)

e sum-product

algorithm (SPA), que o mais utilizado em teoria de comunicao.


Para este tipo de algoritmo, existem duas formas possveis: hard decision (HD) e
soft decision (SD). O primeiro considera que o nmero de smbolos possveis que chegam
ao decodificador finito, e o segundo trabalha com a distribuio probabilstica dos
smbolos recebidos. Apesar do HD ser mais simples, o SD apresenta melhor desempenho
por levar em considerao uma distribuio de probabilidades.
Com o objetivo de explicar este algoritmo, uma simples variao, que funciona com
HD ser introduzido primeiro. Em seguida, o algoritmo ser estendido para trabalhar com
SD, que geralmente obtm melhores resultados na decodificao. Apesar de ser utilizado o
canal AWGN para as simulaes mais adiante, para este algoritmo ser mais bem entendido,
ser considerado o canal binrio simtrico.
Hard decision:
O algoritmo ser explicado baseado na seguinte matriz de verificao de paridade.
A matriz mostrada abaixo tem dimenso 4 x 8 com ds = 4 e dc = 2.

0
1
H=
0

1 0 1 1 0 0 1
1 1 0 0 1 0 0

0 1 0 0 1 1 1

0 0 1 1 0 1 0

representada pelo seu GT:

40

Sendo c = [1 0 0 1 0 1 0

1] uma palavra-

cdigo livre de erros

para a matriz H

acima

condio HcT = 0),

(satisfaz

supe-se

a
sua

transmisso

em

um canal binrio simtrico e a recepo com um erro, por exemplo, de c 1 = 1, ou seja, c =


[1 1 0 1 0 1 0 1].
1. No primeiro passo, todos os ns de variveis (BNs) c i enviam uma mensagem
para seus ns de verificao (CN) fj (sempre 2 neste exemplo) contendo o bit que
acreditam ser o correto para si. Neste estgio, a nica informao que um BN ci tem,
o correspondente i-simo bit recebido de c, yi. Isso significa, por exemplo, que c0
envia uma mensagem contendo 1 para f1 e f3, n c1 envia mensagem contendo y1(1)
para f0 e f1, e por a vai.
2. No segundo passo, todo CN fj calcula uma resposta para todos os BNs conectados.
A resposta contem o bit que fj acredita ser o correto para o BN ci assumindo que os
outros BNs conectados a si (fj) esto corretos. Em outras palavras: Se verificar o
exemplo, todo CN fj est conectado a 4 BNs. Ento, um CN f j olha para a
mensagem recebida de trs BNs e calcula o bit que o quarto BN deve ter para
satisfazer a equao de verificao de paridade. A tabela 5.1 mostra este passo.
Tabela 5.1: lista das mensagens recebidas e enviadas pelos ns de verificao no passo 2 do algoritmo de decodificao
hard decision.

41

Importante que o algoritmo pode terminar neste ponto. Acontecer isto se todas as
equaes de verificao de paridade forem satisfeitas. Ser observado mais tarde
que o algoritmo contem um loop, sendo outra possibilidade de trmino do
algoritmo, alcanar um nmero mximo de loops.
3. Prxima fase: os BNs recebem as mensagens dos CNs e usam como informao
adicional para decidir se seu bit originalmente recebido est certo. Uma forma
simples de fazer isto escolher a maioria. Voltando ao exemplo, cada BN tem trs
fontes de informao a respeito de seu bit. O bit original recebido e duas sugestes
dos CNs. A tabela 5.2 ilustra este passo. Agora, os BNs podem enviar uma outra
mensagem que eles decidiram ser o correto pelos CNs.
4. V para o passo 2.
Tabela 5.2:Descreve o passo 3. Os BNs usam as mensagens de resposta dos CNs para escolher pela maioria o valor de seu bit.

Neste exemplo, a segunda execuo do passo 2 encerraria o processo de decodificao, pois


c1 escolheu o valor 0 no ltimo passo. Com isso, corrige o erro de transmisso e satisfaz
todas as equaes de verificao.
Soft decision:
A decodificao descrita acima foi apenas uma maneira didtica de explicar o
algoritmo. A decodificao soft decision dos cdigos LDPC, que baseada no conceito
de envio de mensagens, tem uma performance melhor e , por isso, o mtodo mais

42

utilizado. A idia a mesma do hard decision. Antes de apresentar o algoritmo, sero


apresentadas as notaes:

Pi = Pr(ci = 1|yi)

qij a mensagem enviada por um BN ci para o CN fj. Toda mensagem contem


sempre um par qij(0) e qij(1) que carrega o quanto se acredita yi ser 0 ou 1.

rji a mensagem enviada por um CN f j para o BN ci. Novamente, existe um rji(0) e


rji(1) que indica o quanto se acredita yi ser 0 ou 1.
O nmero de passos na descrio a seguir corresponde ao caso do hard decision.
1. Todos os BNs enviam suas mensagens q ij. Como nenhuma informao est
disponvel neste passo, qij(1) = Pi e qij(0) = 1 - Pi.
2. Os CNs calculam suas mensagens de resposta rji1:

1 1
r ji (0) = + (1 2qi' j (1))
2 2 i ' Vj \i

(5.1)

e
r ji (1) = 1 r ji (0)

(5.2)
Ento, calculada a probabilidade de existir um nmero par de 1s entre os
BNs, exceto ci (isto exatamente o que V j\i significa). Esta probabilidade
igual probabilidade de rji(0), ou seja, de ci ser 0. Este passo e a informao
usada para calcular as resposta esto ilustrados na figura 5.1.

43

figura 5.1: ilustra o clculo de rji(b)

_________________________________________________________________________
1

Equao (5.1) usa o seguinte resultado de Gallager: para uma seqncia de M dgitos binrios independentes a i com uma

probabilidade de pi para ai = 1, a probabilidade de toda a seqncia conter um nmero par de 1s

1 1
+ (1 2 pi )
2 2 i= 1
as constantes Kij so escolhidas de uma forma que assegure qij(0) + qij(1) = 1. Ci\j agora significa todos os CNs exceto fj.
A figura 5.1 ilustra o clculo neste passo.

3. Os BNs atualizam as suas mensagens de resposta para os CNs. Isto feito


de acordo com as seguintes equaes:

q ji (0) = K ij (1 Pi ) r j 'i (0)


j ' Ci \ j

(5.2)
e

q ji (1) = K ij ( Pi ) r j 'i (1)


j ' Ci \ j

44

(5.3)

figura 5.2: ilustra o clculo de qij(b)

Neste ponto, os BNs tambm atualizam sua estimao corrente c ^i de sua


varivel ci. Isto feito calculando as probabilidades de ser 0 e 1 e escolhendo
a maior delas. As equaes usadas so
Qi (0) = K ij (1 Pi ) r ji (0)
j Ci

(5.4)
e
Qi (1) = K ij ( Pi ) r ji (1)

(5.5)

j Ci

so quase as mesmas usadas para calcular q ij(b), mas agora a informao de


cada CN usada.

1 se Qi (1) > Qi (0),


ci = {
0 contrrio
^

(5.6)

Se a palavra-cdigo estimada satisfizer as equaes de verificao de


paridade o algoritmo encerrado.
4. Voltar para o passo 2.

45

Este algoritmo de decodificao soft-decision explicado uma variante muito


simples, utilizada em canais binrios simtricos e pode ser modificado com melhorias de
performance. Como no o objetivo deste trabalho discutir os algoritmos de decodificao,
foi citada esta simplificao apenas como ilustrao. Alm da performance, existem
numerosos problemas de estabilidade devido a muitas multiplicaes de probabilidades. Os
resultados viro muito prximos de 0 para um comprimento de bloco muito grande. Para
prevenir isto, possvel mudar para o domnio logartmico e fazer adies ao invs de
multiplicaes. O resultado um algoritmo mais estvel e uma melhor performance, pois
adies so mais simples que multiplicaes.

46

Captulo 6 - Simulaes

Neste captulo, sero mostrados os resultados de simulaes dentre variados


algoritmos de cdigo LDPC, pois, o objetivo deste trabalho observar a diferena de
performance de alguns tipos de algoritmos de codificao LDPC. Para isto, foram
estudados diferentes tipos de algoritmos e escolhidos 5 deles: 3 regulares e 2 irregulares,
que foram explicados no captulo anterior. Os algoritmos foram escolhidos para mostrar a
evoluo dos tipos de cdigos LDPC sugeridos ao longo do tempo. Seriam os algoritmos
regulares: o introduzido pelo Gallager [4] na dcada de 60, o apresentado pelo Makay e
Neal [7] nos anos 90 (o nmero VI, comentado no captulo anterior) e o construdo atravs
do algoritmo PEG; e os irregulares: o 2A apresentado por Makay e Neal [7] e o PEG
irregular.
Para poder visualizar a diferena de desempenho, todos os cdigos foram
introduzidos em um canal RAGB e decodificados com o mesmo algoritmo iterativo SP
(tambm apresentado no captulo anterior), pois um dos mais utilizados atualmente. Para
a decodificao, foram utilizadas 20 iteraes, por que se verificou que o desempenho
pouco se altera em quantidades acima disso. Alm disso, foram utilizados 4 tamanhos de
matrizes H para verificar o impacto no desempenho de cada cdigo. Os tamanhos
escolhidos so: 48x96, 252x504, 504x1008 e 1008x2016.
O primeiro grfico apresentado com as comparaes de performance dos cdigos
com a matriz de tamanho 48x96.
A partir dos resultados, pode-se observar que os algoritmos regulares atingiram
melhor performance em comparao aos cdigos irregulares. Conforme foi citado em
captulo anterior, os cdigos regulares funcionam melhor que os irregulares em blocos
curtos por apresentarem, em geral, ciclos mais longos e distncia mnima maior. Alm
disso, percebe-se que o cdigo PEG regular mostrou uma superioridade sobre os demais
cdigos tambm regulares, pois a matriz de paridade construda evitando ciclos de
tamanho 4. Os demais cdigos regulares, o de Gallager e Mackay, apresentam ciclos
curtos, pois no houve a preocupao de elimin-los.

47

Por outro lado, o cdigo PEG irregular, apesar de tambm ter sido construdo
evitando ciclos curtos, no obteve performance melhor que os regulares de Gallager e
Mackay, provavelmente devido ao grau de densidade elevado para o tamanho da matriz.
Por ltimo, o cdigo de Mackay irregular que foi a pior performance, por que, assim como
seu cdigo regular, no foram eliminados os ciclos curtos. Fora isso, Mackay, quando
introduziu os cdigos irregulares, no apresentou uma forma tima de construo da matriz,
chegando a melhor resposta de forma emprica, realizando simulaes de diversas matrizes.

Grfico 6.1 Simulaes com matrizes de tamanho 48x96.

Nos cdigos de tamanho 252x504, novamente o de melhor performance foi o PEG.


Percebe-se que os cdigos regulares para este tamanho de matriz apresentam superioridade
em relao aos irregulares. No caso do PEG irregular, a performance fica bem prxima dos
cdigos regulares de Gallager e de Mackay, sendo superior quando estes ltimos
apresentam ciclo de tamanho 4. Mais uma vez, os cdigos irregulares de Mackay foram os
piores, confirmando o argumento de que a forma de construo da matriz H tem bastante
48

importncia para seu desempenho, sendo ainda reforado pelo fato da eliminao dos ciclos
de tamanho 4 do cdigo, que praticamente no influencia no resultado.

Grfico 6.2 Simulaes com matrizes de tamanho 252x504.

Em seguida, os cdigos de 504x1008, que tiveram os resultados semelhantes aos


apresentados anteriormente (tamanho 252x504). Observa-se que, para este tamanho de
matriz, a regularidade dos cdigos ainda apresenta superioridade sobre os irregulares. De
qualquer forma, o cdigo de PEG irregular apresenta uma melhora significativa em
comparao aos tamanhos de matrizes anteriores. Isto mostra que, aumentando-se o
tamanho do bloco de informao, os cdigos irregulares tendem a ser mais vantajosos do
que os regulares.

49

Grfico 6.3 Simulaes com matrizes de tamanho 504x1008.

Por ltimo, os cdigos maiores, de tamanho 1008x2016, que apresentaram uma


peculiaridade: os algoritmos regulares no funcionam satisfatoriamente. Os trs algoritmos
obtiveram uma degradao muito grande se comparados com os tamanhos de matrizes
anteriores. Por outro lado, os algoritmos irregulares melhoraram a performance e foram
satisfatrios, confirmando a ideia de que, para blocos cada vez mais longos, os cdigos
irregulares melhoram ainda mais a sua performance por apresentarem os graus dos ns de
variveis, devido a isso, se conseguir diminuir a distncia entre o limiar de decodificao e
o limite do canal.

50

Grfico 6.4 Simulaes com matrizes de tamanho 1008x2016.

51

Captulo 7 - Concluses
A motivao deste trabalho foi estudar um dos cdigos corretores de erro mais
utilizados atualmente, o LDPC, que, apesar de apresentado desde a dcada de 60, somente
passou a ser largamente utilizado depois dos anos 90.
Dentro deste tema, por haver uma variedade de assuntos, aplicaes e tipos de
cdigos LDPCs apresentados ao longo dos anos, o trabalho se restringiu a realizar uma
comparao de desempenho entre alguns cdigos regulares e irregulares, a partir da
observao das taxa de erros de bits recebidos para 4 diferentes tamanhos de matrizes.
Antes das simulaes, realizadas atravs de rotinas implementadas ou adaptadas em
MatLab, foram apresentadas as teorias de cdigos corretores de erros e de LDPC
especificamente, alm de citados algoritmos sugeridos por alguns autores, dos quais 5
foram escolhidos para a comparao.
Baseado nos resultados mostrados no captulo anterior, pode-se confirmar o que
havia sido citado na teoria, na qual os cdigos regulares costumam apresentar desempenhos
melhores em tamanhos menores (distncia mnima maior), mas que, conforme se vai
aumentando o cdigo, os cdigos irregulares se tornam mais interessantes. Alm disso, vale
destacar o fato de que na tentativa e erro da construo das matrizes de paridade irregulares
(destacado por Mackay), possvel se alcanar distribuies de graus cada vez melhores, o
que passa a ser o desafio para os profissionais que estudam este cdigo.

52

Referncias Bibliogrficas
[1] C. E. Shannon; A mathematical theory of communication, Bell System Technical
Journal, v. 27, p. 379-423 e 623-656, Julho e Outubro, 1948.
[2] S. Haykin; Communications Systems. 4.ed. John Wiley & Sons. EUA, 1994.

[3] Irving Reed e Solomon Golomb; Polynomial codes over certain finite fields, Joint
Society of Industrial and Applied Mathematics Journal 8 (1960), no. 2, 300304.
[4] R. G. Gallager; Low-Density Parity-Check Codes. Tese de PhD, Massachusetts Institute
of Technology. EUA, 1963.
[5] R. M. Tanner; A Recursive Approach to Low Complexity Codes. IEEE Transactions on
Information Theory, vol., IT-27, no. 25. 1981.
[6] Berrou, A. Glavieux, e P. Thitimajshima; Near Shannon limit error correcting coding
and decoding: Turbo codes. In Proceedings of the IEEE International Conference on
Communications, Geneva, Switzerland, May 2003.
[7] D.J.C. Mackay e R.M. Neal; Near Shannon Limit performance of low density parity
check codes, Eletronic Letters, v.32, p. 1645-1646, 1996.
[8] Y. Mao e A. H. Banihashemi; A Heuristic Search for Good Low-Density Parity-Check
Codes at Short Block Lenghts, IEEE ICC 2001, Filndia, Junho 2001.
[9] J. A. McGowan e R. C. Williamson; Loop Removal from LDPC Codes, IEEE
Information Theory Workshop 2003, Paris, 2003.
[10] C. Berrou, S. Vaton, M. Jzquel e C. Douillard; Computing the Monimum Distance of
Linear Codes by the Error Impulse Method, IEEE GLOBECOM 02, Taipei, Taiwan,
Novembro 2002.
[11] T. Richardson e R. Urbanke; The Capacity of Low-Density Parity-Check Codes Under
Message-Passing Decoding, IEEE Transactions on Information Theory, vol. 47, n 2,
pp. 599-618, Fevereiro 2001.
[12] T. Richardson, M. Shokrollahi e R. Urbanke; Design of Capacity Approaching
Irregular Low-Density Parity-Check Codes, IEEE Transactions on Information
Theory, vol. 47, n 2, pp. 619-637, Fevereiro 2001.

53

[13] S. Chung, G.Forney, T. Richardson e R. Urbanke; On the Design of Low-Density


Parity-Check Codes within 0.0045 dB of the Shannon Limit, IEEE Communications
Letters, vol. 5, n 2, pp. 58-60, Fevereiro 2001.
[14] A. Prabhakar e K.R. Narayanan; Pseudorandom Construction of LDPC codes using
Linear Congruential Sequences, IEEE Transactions on Communications, vol. 50, n 9,
pp. 1389-1396, Setembro 2002.
[15] S. Johnson e S. R. Weller; Quasi-cyclic LDPC codes from difference families, 3rd
Australian Communications Theory Workshop, Canberra, February 4-5, 2002.
[16] Y. Kou, S. Lin e M. P. C. Fossorier; Low-Density Parity-Check Codes Based on
Finite Geometries: A Rediscovery and New Results, IEEE Transactions on Information
Theory, vol. 47, n 7, pp. 2711-2736, Novembro 2001.
[17] Reed, Irving S.; A Class of Multiple-Error-Correcting Codes and Decoding Scheme,
MIT Lincoln Laboratory, 1953.
[18] Golay, M. J. E; Notes on Digital Coding, Proc. IRE 37, 657, 1949.

54

Anexo Cdigos em MatLab utilizados nas simulaes


- Script de gerao da matriz regular de Gallager:
function [H_nocycle, H]=gen_ldpc_gallager(rows,dc,ds)
clear parity_check_aux;
%construct H1 matrix
for i=1:rows
for j=1+dc*(i-1):dc*i
parity_check(i,j)=1;
end
end
%add Hds submatrixes
for k=1:ds-1
for i=rows*k+1:rows*(k+1)
for j=1:rows*dc
parity_check(i,j)=parity_check(i-rows,j);
end
end
end
%create a auxiliar matrix
for j=1:rows*dc
for i=1:rows*ds
parity_check_aux(i,j)=parity_check(i,j);
end
end
%permute ds-1 lines on matrix H
for k=1:ds-1
a=randperm(rows*dc);
for j=1:rows*dc
for i=rows*k+1:rows*(k+1)
parity_check(i,j) = parity_check_aux(i,a(j));
end
end
end
H=parity_check;
for i = 1:rows*ds
% Look for pair of row - column
for j = (i + 1):rows*ds
w = and(parity_check(i, :), parity_check(j, :));
c1 = find(w);
lc = length(c1);
if lc > 1
% If found, flip one 1 to 0 in the row with less number of 1s
if length(find(parity_check(i, :))) <
length(find(parity_check(j, :)))

55

% Repeat the process until only one column left


for cc = 1:lc - 1
parity_check(j, c1(cc)) = 0;
end
else
for cc = 1:lc - 1
parity_check(i, c1(cc)) = 0;
end
end % if
end % if
end % for j
end % for i
H_nocycle = parity_check;
save HGal756x1512.mat H
save HGal756x1512no.mat H_nocycle

- Script de gerao da matriz irregular:


function [H] = make_irreg_matrix(N, M, lambda, ro)
H=zeros(M,N);
onesInCols=0;
onesInRows=0;
lambdaAux=lambda;
roAux=ro;
for i=1:length(lambda)
lambdaAux(2,i) = round(lambda(2,i)*N);
onesInCols=onesInCols+lambda(1,i)*lambdaAux(2,i);
end
for i=1:length(ro)
roAux(2,i) = round(ro(2,i)*M);
onesInRows=onesInRows+ro(1,i)*roAux(2,i);
end
if onesInCols ~= onesInRows
fprintf('The total number of ones in columns and rows are
differents\n')
onesInCols
onesInRows
break;
else
cols = randperm(N);
i=1;
for j=1:length(lambdaAux)
while lambdaAux(2,j) ~= 0

56

cols(2,i)=lambdaAux(1,j);
lambdaAux(2,j)=lambdaAux(2,j)-1;
i=i+1;

end

end
rows = randperm(M);
i=1;
for j=1:length(roAux)
while roAux(2,j) ~= 0
rows(2,i)=roAux(1,j);
roAux(2,j)=roAux(2,j)-1;
i=i+1;
end
end
colsAux=cols;
rowsAux=rows;
count1=0;
while (size(colsAux,2) ~= 0 & count1<20)
x=randperm(size(colsAux,2));
y=randperm(size(rowsAux,2));
if(H(rowsAux(1,y(1)),colsAux(1,x(1)))~=1)
count1=0;
H(rowsAux(1,y(1)),colsAux(1,x(1)))=1;
colsAux(2,x(1))=colsAux(2,x(1))-1;
if colsAux(2,x(1))==0
colsMem=colsAux;
clear colsAux;
colsAux(:,1:x(1)-1)=colsMem(:,1:x(1)-1);
colsAux(:,x(1):size(colsMem,2)-1)=colsMem(:,x(1)+1:size(colsMem,2));
end
rowsAux(2,y(1))=rowsAux(2,y(1))-1;
if rowsAux(2,y(1))==0
rowsMem=rowsAux;
clear rowsAux;
rowsAux(:,1:y(1)-1)=rowsMem(:,1:y(1)-1);
rowsAux(:,y(1):size(rowsMem,2)-1)=rowsMem(:,y(1)+1:size(rowsMem,2));
end
else
count1=count1+1;
end

end

end

57

while size(colsAux,2)~=0
x=randperm(size(cols,2));
y=randperm(size(rowsAux,2));
if H(rowsAux(y(1)),x(1)) ~= 1
H(rowsAux(y(1)),x(1))=1;
changeCol=0;
for j=1:M
if (H(j,x(1))==1 & changeCol==0)
H(j,x(1))=0;
H(j,colsAux(1,1))=1;
changeCol=1;
colsAux(2,1)=colsAux(2,1)-1;
rowsAux(2,y(1))=rowsAux(2,y(1))-1;
end
end
if colsAux(2,1) == 0
colsMem=colsAux;
clear colsAux;
colsAux(:,1:size(colsMem,2)-1)=colsMem(:,2:size(colsMem,2));
end
if rowsAux(2,y(1))==0
rowsMem=rowsAux;
clear rowsAux;
rowsAux(:,1:y(1)-1)=rowsMem(:,1:y(1)-1);
rowsAux(:,y(1):size(rowsMem,2)-1)=rowsMem(:,y(1)+1:size(rowsMem,2));
end
end
end

- Script de codificao da matriz de paridade:


function [c, u, newH] = makedSource(numSource, H, strategy)
% Generate parity check vector bases on LDPC matrix H using sparse LU decomposition
%
% dSource : Binary source (0/1)
% H
: LDPC matrix
% strategy: Strategy for finding the next non-zero diagonal elements
%
{0} First : First non-zero found by column search
%
{1} Mincol : Minimum number of non-zeros in later columns
%
{2} Minprod: Minimum product of:
%
- Number of non-zeros its column minus 1
%
- Number of non-zeros its row minus 1
%
% c
: Check bits
%
%
% Copyright Bagawan S. Nugroho, 2007
% http://bsnugroho.googlepages.com
% Get the matric dimension

58

[M, N] = size(H);
% Set a new matrix F for LU decomposition
F = H;
% LU matrices
L = zeros(M, N - M);
U = zeros(M, N - M);
% Re-order the M x (N - M) submatrix
for i = 1:M
if i == 1000
i1=i
end
if i == 2000
i1=i
end
% strategy {0 = First; 1 = Mincol; 2 = Minprod}
switch strategy
% Create diagonally structured matrix using 'First' strategy
case {0}
% Find non-zero elements (1s) for the diagonal
[r, c] = find(F(:, i:end));
% Find non-zero diagonal element candidates
rowIndex = find(r == i);
% Find the first non-zero column
chosenCol = c(rowIndex(1)) + (i - 1);
% Create diagonally structured matrix using 'Mincol' strategy
case {1}
% Find non-zero elements (1s) for the diagonal
[r, c] = find(F(:, i:end));
colWeight = sum(F(:, i:end), 1);
% Find non-zero diagonal element candidates
rowIndex = find(r == i);

the...

% Find the minimum column weight


[x, ix] = min(colWeight(c(rowIndex)));
% Add offset to the chosen row index to match the dimension of
% original matrix F
chosenCol = c(rowIndex(ix)) + (i - 1);
% Create diagonally structured matrix using 'Minprod' strategy
case {2}
% Find non-zero elements (1s) for the diagonal
[r, c] = find(F(:, i:end));
colWeight = sum(F(:, i:end), 1) - 1;
rowWeight = sum(F(i, :), 2) - 1;
% Find non-zero diagonal element candidates
rowIndex = find(r == i);

59

% Find the minimum product


[x, ix] = min(colWeight(c(rowIndex))*rowWeight);
% Add offset to the chosen row index to match the dimension of
the...

% original matrix F
chosenCol = c(rowIndex(ix)) + (i - 1);
otherwise
fprintf('Please select columns re-ordering strategy!\n');

end % switch
% Re-ordering columns of both H and F
tmp1 = F(:, i);
tmp2 = H(:, i);
F(:, i) = F(:, chosenCol);
H(:, i) = H(:, chosenCol);
F(:, chosenCol) = tmp1;
H(:, chosenCol) = tmp2;
% Fill the LU matrices column by column
L(i:end, i) = F(i:end, i);
U(1:i, i) = F(1:i, i);
% There will be no rows operation at the last row
if i < M
% Find the later rows with non-zero elements in column i
[r2, c2] = find(F((i + 1):end, i));
% Add current row to the later rows which have a 1 in column i
F((i + r2), :) = mod(F((i + r2), :) + repmat(F(i, :), length(r2),
1), 2);
end % if
end % for i
c=zeros(M,numSource);
u=zeros(M*2,numSource);
for i=1:numSource
dSource = round(rand(M, 1));
% Find B.dsource
z = mod(H(:, (N - M) + 1:end)*dSource, 2);
% Parity check vector found by solving sparse LU
c(:,i) = mod(U\(L\z), 2);
u(:,i) = [c(:,i);dSource];
% Return the rearrange H
newH = H;

end
%fprintf('Message encoded.\n');
save dSourcePEGir252x504_0.mat c u newH

60

- Script de transmisso e decodificao:


% general script for non-systematic LDPC simulation
% Things to Remember - Steps to follow ALWAYS !!!!!!!!
% 0. This file is good for non-systematic H only (errors calculated for
all n)
% 1. Load H
% 2. Define SNR Range
% 3. Set Maximum number of iterations
% 4. Set Maximum number of codeword-errors for which to run simulation
% 5. Select decoder - Matlab or C-based

clear all
close all
clc
tic
load dSourcePEGreg252x504.mat
H=newH;
dSource = u;
ind=find(H==1);
[r,c]=ind2sub(size(H),ind);
[rows,cols]=size(H);
h=sparse(H);
coder
n=cols;
k=n-rows;

% for use with Matlab-based LDPC De-

% Find
% 1: maximum check degree
% 2: column indeces in each row which contain '1'
% 3: maximum variable degree
% 4: find column indeces in each row which contain '1'
[max_check_degree,check_node_ones,BIGVALUE_COLS,max_variable_degree,variable_node_ones,BIGVALUE_ROWS]=one_finder(H);

rand('seed',584);
randn('seed',843);
dB=[0:4];
SNRpbit=10.^(dB/10);
No_uncoded=1./SNRpbit;
R=k/n;
No=No_uncoded./R;

%
%
%
%

range of SNR values in dB


Eb/No conversion from dB to decimal
since Eb=1
code rate

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

61

max_iter=5;
%maximum number of decoder iterations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
maximum_blockerror=30;
% maximum blockerrors per SNR point
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
max_errors = 500;
blockerrors=0;
biterrors=0;
block=0;
FER=zeros(1,length(dB));
% array for Frame Error Rate
BER=zeros(1,length(dB));
% array for Channel Error Rate
block_array=zeros(1,length(dB));
for z=1:length(SNRpbit), % loop for testing over range of SNR values
biterrors=0;
blockerrors=0;
block=0;
i=1;
while(blockerrors<maximum_blockerror) %while loop
%while(biterrors<max_errors)
maximum_blockerror-blockerrors
%max_errors-biterrors
%%%%%%%%%%%%%%% u is the codeword to be transmitted %%%%%%%%%%%%%
%%%%%%
%u=zeros(1,cols); %%all zero codeword
%u = round(rand(cols, 1))';
%[max_check_degree,check_node_ones,BIGVALUE_COLS,max_variable_degree,variable_node_ones,BIGVALUE_ROWS]=one_finder(H);
tx_waveform=bpsk(dSource(:,i));
sigma=sqrt(No(z)/2);
rx_waveform=tx_waveform + sigma*randn(1,length(tx_waveform));
gamma_n=(4/No(z))*rx_waveform;
vhat=decode_ldpc_new(max_iter,gamma_n,check_node_ones,max_check_d
egree,BIGVALUE_COLS1,variable_node_ones,max_variable_degree,BIGVALUE_ROWS-1,rows,cols);
%vhat=decodeLogDomain(rx_waveform', H, gamma_n', max_iter);
uhat=vhat;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Errors=zeros(1,length(vhat));
Errors(find(dSource(:,i)'~=vhat))=1;
if i==size(dSource,2)
i=1;
else
i=i+1;
end
if sum(Errors)~=0
blockerrors=blockerrors+1;

62

end
biterrors=biterrors+sum(Errors);
block=block+1;
end

%while loop

block_array(z)=block; %counting blocks per SNR point


BER(z)=biterrors/(block*n);
FER(z)=blockerrors/block;
fprintf(1,'\n\n Simulation finished for SNR: %d \n',dB(z))
%
end

save results.mat dB BER FER block_array


% loop for testing over range of SNR values
save resultsPEGir252x504_5_30b.mat BER FER dB

toc

63

Você também pode gostar