Escolar Documentos
Profissional Documentos
Cultura Documentos
ESCOLA POLITCNICA
DEPARTAMENTO DE ELETRNICA E DE COMPUTAO
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 6 - Simulaes..................................................................47
Captulo 7 - Concluses..................................................................52
Referncias Bibliogrficas............................................................. 53
Anexo Cdigos em MatLab utilizados nas simulaes............55
ii
Captulo 1 - Introduo
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].
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.
informao, objetivando a deteco e a correo de erros causados pelo canal. Esses dois
processos
normalmente
esto
presentes
nos
sistemas
de
comunicao
digital.
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
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
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
...
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)
(2.7)
(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)
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
...
ei
...
(2.12)
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.
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 :
15
s = yH T
(2.13)
(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)
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)
17
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)
a densidade de H
M dc dc N d s d s
=
=
=
M N N M N M
(3.2)
R=
d
N M
M
= 1
= 1 s
N
N
dc
(3.3)
19
(a)
(b)
figura 3.1:(a) matriz de paridade e (b )grafo fator para um cdigo LDPC (3,4)-regular de comprimento 12
20
N = 12
dc = 4
ds = 3
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
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
(a)
(b)
figura 3.2: (a) matriz de paridade e (b) grafo fator para um cdigo LDPC ((x),(x))-irregular de comprimento 12
22
2 2 1 3
x + x dx
3
R = 1 3
0.2677
11
1 2
0 2 x + 2 x dx
23
figura 3.4: Exemplo de ciclo de comprimento 4 e sua respectiva matriz de verificao de paridade.
figura 3.5: Exemplo de um ciclo de comprimento 6 num GT e a sua respectiva matriz de verificao de paridade.
24
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
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
27
. ..
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
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
II.
III.
30
31
32
33
...
34
V \ N l ( xn ) . Na figura 4.7,
___ l
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
35
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
37
...
, Anxds-1 fosse
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
39
e sum-product
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
40
Sendo c = [1 0 0 1 0 1 0
1] uma palavra-
para a matriz H
acima
(satisfaz
supe-se
a
sua
transmisso
em
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.
42
Pi = Pr(ci = 1|yi)
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
_________________________________________________________________________
1
Equao (5.1) usa o seguinte resultado de Gallager: para uma seqncia de M dgitos binrios independentes a i com uma
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.
(5.2)
e
44
(5.3)
(5.4)
e
Qi (1) = K ij ( Pi ) r ji (1)
(5.5)
j Ci
(5.6)
45
46
Captulo 6 - Simulaes
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.
importncia para seu desempenho, sendo ainda reforado pelo fato da eliminao dos ciclos
de tamanho 4 do cdigo, que praticamente no influencia no resultado.
49
50
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
54
55
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
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...
59
% 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
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;
% 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;
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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
toc
63