• Nenhum resultado encontrado

Comunicação Digital Codificação de Canal. Codificação de Canal. Codificação de Canal

N/A
N/A
Protected

Academic year: 2021

Share "Comunicação Digital Codificação de Canal. Codificação de Canal. Codificação de Canal"

Copied!
68
0
0

Texto

(1)
(2)

Codificação de canal

• Quando informação digital é enviada através de um canal de transmissão, ruído e interferência inerentes a qualquer canal prático degradam o sinal de forma que os dados recebidos contêm erros.

• O usuário do sistema de transmissão digital geralmente estabelece uma taxa de erro máxima aceitável – uma mensagem errada em 1×106 mensagens recebidas, por exemplo (i.e., uma taxa de erro de 1×10−6) – acima da qual os dados recebidos

não são considerados utilizáveis pelo usuário. Esta taxa de erro máxima aceitável depende da informação que transita pelo canal.

• A título de comparação, a taxa máxima de erro permitida para transmissão de voz através de telefonia celular é muito maior do que a taxa exigida para transmissão de dados, por exemplo (porque, na pior das hipóteses, mesmo sob uma alta taxa de erro e conseqüente distorção, o sistema auditivo humano é capaz de compreender o significado das frases pelo contexto da conversa, o que já não acontece quando dois computadores trocam dados).

O Codificador de Canal é o responsável em um sistema digital por manter a taxa de erro dentro

de um limite máximo aceitável pelo usuário.

A possibilidade do uso de codificação para controlar com eficiência a taxa de erro de um sistema de comunicação digital foi demonstrada por Shannon em 1948, através do denominado Teorema Fundamental de Shannon:

Se a taxa (= velocidade) de transmissão R

[

bits s

]

da informação a ser enviada pelo canal é menor que uma quantidade C

[

bits s

]

denominada de Capacidade do Canal, então a comunicação através do canal pode ser estabelecida com

(3)

Teorema Fundamental

de Shannon:

Se a taxa de transmissão R

[

bits s

]

capacidade do canal C

[

bits s

]

existe um código corretor de erro tal que a informação pode ser transmitida

através do canal com uma taxa de erro definida e baixa.

Lei de Shannon-Hartley:

⎛ +

=

N

P

B

C

R

log

2

1

[

bits

s

]

B é a largura de banda do canal em

Hz

,

P é a potência do sinal transmitido e

N é a potência do ruído Gaussiano adicionado ao sinal no canal.

Em essência, o Teorema Fundamental de Shannon estabelece que a potência do sinal transmitido, a potência de ruído no canal e a largura de banda do canal estabelecem um limite máximo para a taxa de transmissão R.

• Infelizmente, o Teorema Fundamental de Shannon apenas demonstra que, se

R

C

existe um código corretor de erro tal que a informação pode ser transmitida através do canal com uma taxa de erro arbitrariamente baixa, mas não especifica como construir tal código corretor.

Talvez a maior utilidade prática do Teorema Fundamental de Shannon seja demonstrar que para R> C

não é possível transmitir informação sem erro através do canal, mesmo que se utilize o mais poderoso código corretor de erro que se possa conceber.

É importante salientar que, não raro, o maior valor possível para a taxa de transmissão R é dado não por C, mas sim, pela complexidade computacional do código corretor necessário para que aquele valor de R possa ser alcançado.

(4)

4.1 Códigos Corretores de Erro

Vimos que o Teorema Fundamental de Shannon estabelece a existência de um código corretor de erro tal que a informação pode ser transmitida através do canal de comunicação com uma taxa de erro arbitrariamente baixa, caso a taxa de transmissão R

[

bits s

]

seja menor ou igual à capacidade do canal C [bits/s].

Estudaremos agora como construir tais códigos.

Especificamente, estudaremos os membros mais importantes de duas grandes classes de códigos para correção de erro:

os códigos de bloco e os códigos convolucionais.

É importante lembrar que o processo de correção de erros através de codificação/decodificação é realizado no Codificador/Decodificador de Canal.

(5)

4.2 Códigos de Bloco

Podemos considerar um código de bloco de maneira semelhante àquela que adotamos para os códigos compressores por entropia já estudados.

Ou seja, um código de bloco pode ser considerado como um operador

θ

{}

, tal que

C

=

θ

{ }

X

, onde:

{ } {

=

0

,

1

,

,

1

}

=

x

i

x

x

L

x

M

X

é o conjunto de M possíveis mensagens

x

i a serem codificadas e

{ } {

=

0

,

1

,

,

−1

}

=

c

i

c

c

L

c

M

C

é o conjunto de M possíveis palavras-código

c

i resultantes da codificação, com

i

=

0

,

1

,

L

,

M

1

.

O operador

θ

{}

efetua um mapeamento unívoco entre cada mensagem

x

i e a respectiva palavra-código

c

i. O conjunto de caracteres do código ou alfabeto do código é o conjunto

Α

=

{

a

0

,

a

1

,

L

,

a

D1

}

composto por D elementos, de cuja composição são formadas cada mensagem e sua respectiva palavra-código (para códigos binários Α=

{ }

0,1 ).

(6)

No contexto de códigos corretores de erro:

• Cada mensagem

x

i

X

é considerada como um vetor

x

i

=

[

x

i(k1)

x

i(k2)

L

x

i1

x

i0

]

de k componentes,

x

ij

A

,

j

=

k

1

,

k

2

,

L

,

1

,

0

.

• Visto que os k componentes da i-ésima mensagem

x

i pertencem ao alfabeto A, é válida a relação de

pertinência

x

i

A

k.

• Da mesma forma, cada palavra-código

c

i

C

é considerada como um vetor

[

i(n 1) i(n 2) i1 i0

]

i

c

c

c

c

c

=

L

de n componentes

c

ij

A

,

j

=

n

1

,

n

2

,

L

,

1

,

0

.

• Visto que os n componentes da i-ésima palavra-código

c

i pertencem ao alfabeto A, é válida a relação de pertinência n

i

c

A

. Por exemplo:

a palavra-código binária 0101, de

n

=

4

bits, é representada pelo vetor

[

0

1

0

1

]

=

c

, 4

A

c

,

{ }

0

,

1

=

Α

.

(7)

⇒ Para um código D – ário, com D sendo uma potência inteira de 2 (i.e. D =2b, onde b é um inteiro positivo), cada caractere D – ário terá uma representação binária equivalente formada por uma seqüência

de b bits.

⇒ Portanto, um código D – ário cujo tamanho da palavra-código é de N caracteres D – ários pode ser mapeado em um código binário cujo tamanho da palavra-código é

n

=

bN

.

⇒ Como, em sistemas práticos b=1 e

D

=

2

, neste estudo focalizaremos os códigos binários (

Α

=

{ }

0

,

1

), visto que a qualquer instante o código D – ário pode ser mapeado no código binário equivalente e vice-versa.

Exemplo 4.1: Determine o código binário equivalente ao código

θ

{}

⋅ abaixo. Mensagem

x

i Palavra-código

c

i associada a

x

i por

c

i

=

θ

{ }

x

i

00 00 01 03 02 11 03 12 10 21 11 22 12 30 13 33

(8)

Solução:

O código original é quaternário (

D

=

4

).

O no. de caracteres quaternários utilizado na representação das palavras-código do código quaternário é

N

=

2

.

Existem

M

=

8

mensagens quaternárias, logo o código binário equivalente necessita

k

=

log

2

M

=

3

bits em cada mensagem binária para representá-las.

Assim, ao mapear o conjunto de M mensagens quaternárias no conjunto de M mensagens binárias, obtemos:

O número de bits necessários a cada palavra-código binária equivalente é

bN

n

=

, onde b=log2 D =2 (

D

=

4

).

Logo

n

= bN

=

2

×

2

=

4

.

Assim, ao mapear o conjunto de M palavras-código quaternárias no conjunto de M palavras-código binárias, obtemos:

Portanto o código binário equivalente ao código quaternário é: Mensagem Quaternária (D = 4) Mensagem Binária Equivalente de

3

=

k

bits Palavra-Código Quaternária (D = 4, N = 2) Palavra-Código Binária Equivalente de

4

=

n

bits Mensagem

x

i de

k

=

3

bits Palavra-código i

c

de

n

=

4

bits associada a

x

i por

c

i

=

θ

{ }

x

i . 00 000 00 0000 000 0000 01 001 03 0011 001 0011 02 010 11 0101 010 0101 03 011 12 0110 011 0110 10 100 21 1001 100 1001 11 101 22 1010 101 1010 12 110 30 1100 110 1100 13 111 33 1111 111 1111

(9)

4.3 Códigos de Bloco Binários

⇒ Um código de bloco binário

θ

{}

⋅ mapeia um conjunto

X

=

{ } {

x

i

=

x

0

,

x

1

,

L

,

x

M1

}

de

M

=

2

k mensagens binárias, cada uma delas com k bits, em um conjunto

C

=

{ } {

c

i

=

c

0

,

c

1

,

L

,

c

M1

}

de M palavras-código binárias, cada uma delas com n bits, onde

n

>

k

.

⇒ Um código de bloco

θ

{}

binário cujas mensagens a serem codificadas apresentam k bits e são mapeadas em palavras-código de n bits é representado pelo operador

θ

( ){}

n,

k

, ou simplesmente

θ

( )

n,

k

.

• Um código

θ

( )

n,

k

é sistemático quando cada palavra-código de n bits é formada pelos k bits da respectiva mensagem associada, acrescidos (por justaposição) de r bits adicionais destinados ao controle e correção de erros, denominados de

bits de paridade.

Portanto, em um código sistemático cada mensagem contendo k bits de informação é expandida em uma palavra-código de

n

=

k

+

r

bits onde r é o número de bits representativos da informação redundante adicionada visando o

controle e correção de erro.

• Um código

θ

( )

n,

k

é não-sistemático quando nas palavras-códigos de n bits não aparecem explicitamente representados os k bits de informação da respectiva mensagem associada.

(10)

Por exemplo, o código

θ

( )

4

,

3

do Exemplo 4.1 é sistemático, porque cada palavra-código

c

i de

n

=

4

bits é formada pela justaposição de 1 bit de paridade aos

k

=

3

bits de informação da mensagem

x

i associada.

Mensagem i

x

Palavra-código i

c

associada a i

x

por

{ }

i i

x

c

=

θ

. 000 0000 001 0011 010 0101 011 0110 100 1001 101 1010 110 1100 111 1111

Observe que, como

n

>

k

, no conjunto de todas as 2 possíveis palavras-códigos de n

n bits existem

2

n

2

k elementos que não são associados a qualquer elemento do

conjunto

X

=

{ } {

x

i

=

x

0

,

x

1

,

L

,

x

M1

}

de

k

M

=

2

mensagens binárias de k bits. Por exemplo, para o código binário

θ

( )

4

,

3

ao lado, existem

2

n

2

k

=

2

4

2

3

=

8

elementos no conjunto de todas as

2

n

=

2

4

=

16

possíveis palavras-códigos de 4

bits sem associação com qualquer mensagem do conjunto

{

000

,

001

,

010

,

011

,

100

,

101

,

110

,

111

}

=

(11)

Razão de Codificação:

⇒ Em geral é desejável que o tempo

n

τ

s de duração de uma palavra-código seja igual (idealmente menor ou

igual) ao tempo de duração

k

τ

x de uma mensagem, onde

τ

s representa a largura (duração) dos bits em

uma palavra-código e

τ

x representa a largura dos bits em uma mensagem.

⇒ Assim, se

n

τ

s

=

k

τ

x, então a razão de codificação

R

c de um código de bloco é

R

c

=

k

n

=

τ

s

τ

x ,

(

n

>

k

).

Peso de uma palavra-Código:

¾ O peso de uma palavra-código é definido como o número de dígitos "1" nela presentes.

¾ O conjunto de todos os pesos de um código constitui a distribuição de pesos do código.

¾ Quando todas as M palavras-código têm pesos iguais, o código é denominado de código de peso constante.

(12)

Códigos de bloco =

códigos polinomiais

.

O processo de codificação/decodificação de um código de bloco baseia-se na propriedade algébrica de que o conjunto de palavras-código

C

=

{ } {

c

i

=

c

0

,

c

1

,

L

,

c

M1

}

pode ser mapeado em

um conjunto de polinômios

{

C

i

( )

p

}

=

{

C

0

( ) ( )

p

,

C

1

p

,

L

,

C

M1

( )

p

}

.

→ Os componentes do vetor

c

i

=

[

c

i(n−1)

c

i(n−2)

L

c

i1

c

i0

]

que representa a i-ésima palavra-código correspondem aos coeficientes do polinômio

C

i

( )

p

=

c

i(n1)

p

n−1

+

c

i(n2)

p

n−2

+

L

+

c

i1

p

+

c

i0 associado à palavra-código.

A mesma propriedade algébrica pode ser aplicada sobre

o conjunto de mensagens

X

=

{ } {

x

i

=

x

0

,

x

1

,

L

,

x

M1

}

de modo que este também pode mapeado em um conjunto de polinômios

{

X

i

( )

p

}

=

{

X

0

( ) ( )

p

,

X

1

p

,

L

,

X

M1

( )

p

}

.

→ Os componentes do vetor

x

i

=

[

x

i(k1)

x

i(k2)

L

x

i1

x

i0

]

que representa a i-ésima mensagem correspondem aos coeficientes do polinômio

( )

( 1) 1 ( 2) n 2 i1 i0 k i n k i i

p

X

p

c

p

c

p

c

X

=

+

+

L

+

+

associado à mensagem.

(13)

Por exemplo, a representação polinomial do código do Exemplo 4.1 é mostrada na Tabela 4.2.

Tabela 4.2: Representação polinomial do código da Tabela 4.1. Mensagem i

x

Polinômio

( )

p

X

i Palavra-código

c

i associada a

x

i por

{ }

i i

x

c

=

θ

Polinômio

( )

p

C

i 000 0 0000 0 001 1 0011 p+1 010 p 0101 p2 +1 011 p+1 0110 p2 + p 100 2 p 1001 p3+1 101 2+1 p 1010 p3+ p 110 p2+ p 1100 p3+ p2 111 2 + +1 p p 1111 p3+ p2+ p+1

(14)

• O processo de codificação/decodificação envolve operações aritméticas de adição e multiplicação realizadas sobre o conjunto de polinômios

{

C

i

( )

p

}

=

{

C

0

( ) ( )

p

,

C

1

p

,

L

,

C

M1

( )

p

}

que representam as palavras-código, conforme veremos.

• Um código corretor de erro deve ser tal que o conjunto

{

C

i

( )

p

}

e as operações aritméticas sobre ele definidas obedeçam a determinadas restrições, caso contrário a unicidade e o custo computacional do processo de codificação/decodificação resultarão prejudicados.

• Especificamente, os coeficientes dos polinômios em

{

C

i

( )

p

}

devem pertencer a um tipo especial de conjunto denominado de campo algébrico (field)[Chen].

(15)

Campo Algébrico

Um campo F é um conjunto de elementos que permite duas operações sobre seus elementos – adição e multiplicação – e que satisfaz aos seguintes axiomas (propriedades):

Adição

1- O conjunto

F

é fechado sob adição, i.e., se

a,

b

F

então

a

+ b

F

.

2- A adição em

F

é associativa, i.e., se

a ,

,

b

c

F

então

a

+

(

b

+

c

) (

=

a

+

b

)

+

c

. 3- A adição em

F

é comutativa, i.e., se

a,

b

F

então

a

+

b

=

b

+

a

.

4- O conjunto

F

contém um único elemento denominado zero, representado por “

0

”, que satisfaz a condição

a

a

+ 0

=

,

∀a

F

.

5- Cada elemento em

F

tem o seu elemento negativo (simétrico). Se

b

F

então seu simétrico é denotado por

b

tal que

b

+

( )

b

=

0

. Se

a

F

, então a subtração

a

b

entre os elementos a e b é definida como

a

+

( )

b

.

Multiplicação

1- O conjunto

F

é fechado sob multiplicação, i.e., se

a,

b

F

então

ab

F

. 2- A multiplicação em

F

é associativa, i.e., se

a ,

,

b

c

F

então

a

( ) ( )

bc

=

ab

c

. 3- A multiplicação em

F

é comutativa, i.e., se

a,

b

F

então

ab

=

ba

.

4- A multiplicação em

F

é distributiva sobre a adição, i.e., se

a ,

,

b

c

F

então

a

(

b

+

c

)

=

ab

+

ac

.

5- O conjunto

F

contém um único elemento denominado identidade, representado por “1”, que satisfaz a condição

a

a

=

1

,

∀a

F

.

6- Cada elemento de

F

, exceto o elemento 0, possui um elemento inverso. Assim, se

b

F

e

b

0

então o inverso de

b é definido como

b

−1 tal que

bb

−1

=

1

. Se

a

F

, então a divisão

a /

b

entre os elementos a e b é definida como 1

ab

.

(16)

¾ Um campo algébrico finito com D elementos é denominado de Campo de Galois (Galois Field) e é designado por

GF

(D

)

.

¾ Nem para todos os valores de D é possível formar um campo.

¾ Em geral, quando D é primo (ou uma potência inteira de um número primo) é possível construir o campo finito

)

(D

GF

consistindo dos elementos

{

0

,

1

,

L

,

D

1

}

, desde que as operações de adição e multiplicação sobre

)

(D

GF

sejam operações módulo D [Clark].

Nota:

¾ Uma operação

op é módulo D

quando pode ser representada por

(

a

op

b

)

mod

D

, onde

x mod

y

é o operador que resulta no resto da divisão

x

y

.

¾ Por exemplo, a operação de soma módulo 5 entre os números 4 e 3,

(

4 op

3

)

mod

5

, resulta em 2 visto que o resto da divisão 7/5 é 2, portanto

(

4

+

3

)

mod

5

=

2

.

(17)

Por exemplo, o Campo de Galois

GF

(

2

)

é formado pelo conjunto

{ }

0

,

1

e pelas operações módulo 2 de soma e multiplicação dadas pelas Tabelas 4.3 e 4.4

Tabela 4.3: Soma sobre GF(2) Tabela 4.4: Multiplicação sobre GF(2) + 0 1 . 0 1 0 0 1 0 0 0 1 1 0 1 0 1 Note nas Tabelas 4.3 e 4.4 que:

⇒ a soma entre dois elementos a e b pertencentes a

GF

(

2

)

é implementada pela operação lógica

a

b

(ou

a XOR

b

) e que

⇒ a multiplicação entre dois elementos a e b pertencentes a

GF

(

2

)

é implementada pela operação lógica

a.

b

(ou

a AND

b

).

Por isto é usual os códigos corretores serem construídos em

GF

(

2

)

dada a facilidade de implementação com portas lógicas AND e XOR.

Assim, um código corretor de erro binário (

Α

=

{ }

0

,

1

) é tal que os coeficientes dos polinômios em

{

C

i

( )

p

}

pertencem a

GF

(

2

);

Α

=

{ }

0

,

1

e as operações aritméticas realizadas sobre o conjunto de polinômios

( )

{

C

i

p

}

=

{

C

0

( ) ( )

p

,

C

1

p

,

L

,

C

M1

( )

p

}

(ou, equivalentemente, sobre o conjunto de palavras-código

{ } {

=

0

,

1

,

,

1

}

=

c

i

c

c

L

c

M

(18)

4.3.1 Capacidade de Detecção e Correção de Erro

⇒ Suponhamos que

c

i e

c

j sejam duas palavras-código quaisquer do código

θ

( )

n

,

k

.

Uma medida da diferença (distância) entre duas palavras-código é o número de bits em posições correspondentes que diferem entre si.

⇒ Esta medida é denominada de Distância de Hamming e é denotada por

d

ij.

⇒ Por exemplo, sejam

c

i

=

[

0

1

0

1

]

e

c

j

=

[

1

0

0

0

]

. Então

d

ij

=

3

.

• Observe que

d

ij sempre satisfaz a condição

0

<

d

ij

n

,

i

j

, para duas palavras-código

c

i e

c

j, ambas de

n bits (por definição, em um código

θ

( )

n,

k

,

c

i

c

j,

i

e

j

com

i

j

).

• O menor valor no conjunto

{ }

d

ij ,

i

,

j

=

0

,

1

,

L

,

M

1

,

i

j

,

M

=

2

k é denominado distância mínima do código e é denotado como

d

min.

• Por exemplo, dmin = 2 para o código da Tabela 4.1 (Explo. 4.1),{0000,0011, 0101,0110,1001,1010,1100, 1111}.

¾ A Distância de Hamming

d

ij é uma medida do grau de separação entre duas palavras-código

c

i e

c

j.

¾ Portanto,

d

min está associado à capacidade do código

θ

( )

n,

k

em identificar palavras-código demoduladas no

receptor quando estas são recebidas em erro, como conseqüência do ruído e interferência presentes no canal. ¾ Em outras palavras, quanto maior

d

min maior a capacidade de um código

θ

( )

n,

k

detectar e corrigir erros.

(19)

Demonstra-se que [Ash][Proakis]:

Seja

θ

( )

n,

k

um código corretor binário;

seja d o número máximo de erros que

θ

( )

n,

k

é capaz de detetar;

seja t o número máximo de erros que

θ

( )

n,

k

é capaz de corrigir; seja

d

min a distância mínima de

θ

( )

n,

k

;

então:

(Detecta d erros)

d

=

d

min

1

(4.7)

(Corrige t erros)

t

=

⎢⎣

d

min

2

1

⎥⎦

(4.8)

1

+

n

k

d

min (4.9)

sendo ⎣⎦. o operador que resulta no inteiro mais próximo e menor que o argumento.

Por exemplo, dmin =2 para o código

θ

( )

4,3 da Tabela 4.1.

Daí, de (4.7) e (4.8), temos que

1

1

2

1

min

=

=

= d

d

e

0

2

1

2

2

1

min

=

⎥⎦

⎢⎣

⎢ −

=

⎥⎦

⎢⎣

=

d

t

.

Portanto o código

θ

( )

4,3 da Tabela 4.1 detecta no máximo 1 erro por palavra-código, mas não tem capacidade de correção. De fato, este código é um simples código parity-check.

(20)

4.3.2 A Matriz Geradora de um Código

θ

( )

n,

k

Seja a i-ésima mensagem de um código binário

θ

( )

n,

k

representada pelo vetor

[

0 1 ( −1)

]

=

i i ik

i

x

x

x

x

L

e seja a i-ésima palavra-código de

θ

( )

n,k

representada pelo vetor

[

0 1 ( −1)

]

=

i i i n

i

c

c

c

c

L

, onde

i

=

0

,

1

,

L

,

M

1

,

k

M = 2

.

O processo de codificação da mensagem

x

i

=

[

x

i0

x

i1

L

x

i(k−1)

]

na respectiva

palavra-código

c

i

=

[

c

i0

c

i1

L

c

i(n−1)

]

efetuado por um código binário

θ

( )

n,

k

pode ser

representado em forma matricial por

G

i i

x

c

=

(4.10)

onde a matriz

G

k×n

é denominada de matriz geradora do código

θ

( )

n,

k

e é dada por

=

− − − − − − ) 1 )( 1 ( 1 ) 1 ( 0 ) 1 ( ) 1 ( 1 11 10 ) 1 ( 0 01 00 n k k k n n

g

g

g

g

g

g

g

g

g

L

M

M

M

L

L

G

. (4.11)

(21)

Podemos interpretar a matriz

G como um conjunto de k vetores-linha

g

j

,

j = 0,1,L,k −1

, tal que

=

=

− − − − − − − ) 1 ( 1 0 ) 1 )( 1 ( 1 ) 1 ( 0 ) 1 ( ) 1 ( 1 11 10 ) 1 ( 0 01 00 k n k k k n n

g

g

g

g

g

g

g

g

g

g

g

g

M

L

M

M

M

L

L

G

.

(4.12)

Desta maneira, de

c

i

=

x

i

G

(4.10) e (4.12), cada palavra-código

c

i

=

[

c

i0

c

i1

L

c

i(n−1)

]

é

simplesmente uma combinação linear dos vetores

g

j

com coeficientes da combinação

determinados pela mensagem associada

x

i

=

[

x

i0

x

i1

L

x

i(k−1)

]

, isto é:

) 1 ( ) 1 ( 1 1 0 0

+

+

+

=

k k i i i i

x

g

x

g

x

g

c

L

(4.13)

É possível demonstrar que [Clark][Peterson][Costello],

o conjunto

C de

2

k

palavras-código de um

código

θ

( )

n,

k

é um sub-espaço vetorial de dimensão k.

Logo, os k vetores-linha

g

j

que formam a matriz

G devem ser linearmente independentes para

que possam, conforme estabelece (4.13), gerar o sub-espaço

C em k dimensões.

(22)

Exemplo 4.2:

Verifique se a matriz

⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 1 0 0 1 0 1 0 1 0 0 1

G

é a matriz geradora do código

θ

( )

4,3

da Tabela 4.1.

Solução: Cada palavra-código

ci =

[

ci0 ci1 L ci(n−1)

]

de

n

=

4

bits é gerada através de (4.10) a partir da

respectiva mensagem

xi =

[

xi0 xi1 L xi(k−1)

]

de

k

=

3

bits. No total, existem

2

=

8

k

palavras-código

em

θ

( )

4

,

3

. Assim,

i

x

x

i

G

=

c

i

x

i

x

i

G

=

c

i

[

0 0 0

]

[

]

[

0 0 0 0

]

1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 0 0

]

[

]

[

1 0 0 1

]

1 1 0 0 1 0 1 0 1 0 0 1 0 0 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 0 1

]

[

]

[

0 0 1 1

]

1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 0 1

]

[

]

[

1 0 1 0

]

1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 1 0

]

[

]

[

0 1 0 1

]

1 1 0 0 1 0 1 0 1 0 0 1 0 1 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 1 0

]

[

]

[

1 1 0 0

]

1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 1 1

]

[

]

[

0 1 1 0

]

1 1 0 0 1 0 1 0 1 0 0 1 1 1 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 1 1

]

[

]

[

1 1 1 1

]

1 1 0 0 1 0 1 0 1 0 0 1 1 1 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

Portanto

G é geradora de

θ

( )

4,3

.

(23)

Qualquer

matriz geradora

G

de um código

θ

( )

n,

k

pode, através de operações elementares em suas linhas e

permutações em suas colunas, ser reduzida à

forma sistemática

quando, então, o código gerado é sistemático.

Uma matriz geradora

G encontra-se na forma sistemática quando

[

]

⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = = − − − − − − − − − ) 1 )( 1 ( 1 ) 1 ( 0 ) 1 ( ) 1 ( 1 11 10 ) 1 ( 0 01 00 1 0 0 0 0 0 1 0 0 0 0 1 k n k k k k n k n k p p p p p p p p p L L M M M M M M M L L L L P I G

(4.14)

onde

I é a matriz identidade

k

k

×

k

e

P é uma matriz

k

×

(

n

k

)

que determina

os

n

k

bits de paridade na palavra-código

i

c

de n bits,

a partir dos k bits da mensagem

x

i

.

Por exemplo:

Mensagem

x

i

de

k

=

3

bits

Palavra-código

c

i

de

n

=

4

bits

associada a

x

i

por

c

i

=

θ

{ }

x

i

.

000

0000

001

0011

010

0101

011

0110

100

1001

101

1010

110

1100

111

1111

A matriz geradora

do Exemplo 4.2

(reproduzido ao lado),

⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 1 0 0 1 0 1 0 1 0 0 1 G

, está

na forma sistemática e o código

θ

( )

4,3

gerado é um código sistemático, i.e., cada

palavra-código de n bits é formada pelos k

bits da respectiva mensagem associada,

acrescidos (por justaposição) de

nk

bits de

(24)

No contexto de comunicação digital, as palavras-código passam por um processo de modulação no

trasmissor e são enviadas através de um canal com ruído/interferência.

Dois códigos que diferem somente na ordem (arranjo) de suas palavras-código, apresentam a mesma

probabilidade de erro de decodificação no receptor, porque as distâncias de Hamming entre as

palavras-código são as mesmas [Peterson]. Tais códigos são denominados

equivalentes.

Especificamente, o código

θ

e

( )

n

,

k

é equivalente ao código

θ

( )

n,

k

se a matriz geradora

G

e

de

( )

n

k

e

,

θ

puder ser obtida através da permutação de

colunas da matriz G geradora de

θ

( )

n,

k

ou através

de operações elementares realizadas entre as

linhas de G.

Uma operação elementar em

GF

(2

)

entre duas linhas de uma matriz consiste em permutar as linhas ou

em substituir uma linha pela soma dela com outra linha.

Assim sempre podemos transformar uma matriz

G

qualquer para a forma sistemática

G

*

dada por

(4.14) , mantendo a equivalência entre os respectivos códigos gerados.

(25)

Exemplo 4.3:

Dada a matriz geradora

⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 1 1 1 1 0 1 0 1 1 0 0

G

, colocá-la na forma sistemática

G

*

.

Verifique se

G

*

gera um código equivalente ao gerado por

G

.

Solução:

Visto que a matriz geradora é uma matriz

G

3×4

, então o código gerado será um código

θ

( )

4

,

3

.

*

G

pode ser obtida pelo seguinte conjunto de operações elementares feito sobre as linhas de

G

:

Operação Elementar

Matriz

G

alterada

2 0

L

L

⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ 1 1 0 0 1 0 1 0 1 1 1 1

(

0 1

)

0 L L L ← + ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ 1 1 0 0 1 0 1 0 0 1 0 1

(

0 2

)

0 L L L ← + ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 1 0 0 1 0 1 0 1 0 0 1 * G

(26)

O código gerado por

G é

i

x

x

i

G

=

c

i

x

i

x

i

G

=

c

i

[

0 0 0

]

[

]

[

0 0 0 0

]

1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 0 0

]

[

]

[

0 0 1 1

]

1 1 1 1 1 0 1 0 1 1 0 0 0 0 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 0 1

]

[

]

[

1 1 1 1

]

1 1 1 1 1 0 1 0 1 1 0 0 1 0 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 0 1

]

[

]

[

1 1 0 0

]

1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 1 0

]

[

]

[

0 1 0 1

]

1 1 1 1 1 0 1 0 1 1 0 0 0 1 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 1 0

]

[

]

[

0 1 1 0

]

1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

0 1 1

]

[

]

[

1 0 1 0

]

1 1 1 1 1 0 1 0 1 1 0 0 1 1 0 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

[

1 1 1

]

[

]

[

1 0 0 1

]

1 1 1 1 1 0 1 0 1 1 0 0 1 1 1 = ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡

O código gerado por

G

*

é o mesmo código gerado no Exemplo 4.2.

Portanto os códigos gerados por

G

*

e

G

são equivalentes,

(27)

4.3.3 A Matriz de Paridade de um Código

θ

( )

n,

k

Seja um código

θ

( )

n,k

com matriz geradora

G dada na forma sistemática,

G

=

[

I

k

P

]

(4.19).

Conforme discutimos na Seção 4.3.2, a i-ésima palavra-código

c

i

=

[

c

i0

c

i1

L

c

i(n−1)

]

relaciona-se com a respectiva mensagem

x

i

=

[

x

i0

x

i1

L

x

i(k−1)

]

através de

c

i

=

x

i

G

.

Já que

G encontra-se na forma sistemática, a palavra-código

c

i

pode ser decomposta em

[

i i

]

i

x

a

c

=

(4.20), onde

a

i

=

x

i

P

é um vetor-linha que contém os

n

− bits de paridade de

k

c

i

.

Visto que

a

i

=

x

i

P

, e considerando que a soma em

GF

(2

)

é uma operação módulo 2, então

0

=

+

i

i

a

x P

(4.21)

que pode ser escrita matricialmente como

[

]

=

0

−k n i i

a

x

I

P

(4.22)

Definindo

=

−k n T

I

P

H

temos que

T

=

0

i

c H

(4.23), sendo

( )

[

(

)

]

[

n k

]

T T k n T T k n T T − − −

=

=

=

=

P

I

P

I

I

P

H

H

(4.24)

(28)

Portanto, de

c H

i T

=

0

(4.23), infere-se que cada palavra-código do código

θ

( )

n,

k

é ortogonal a

cada linha da matriz

H (se

u

v

T

=

0

então os vetores

u

e v são ortogonais [Chen]).

Em conseqüência, como as palavras-código do código

θ

( )

n,

k

são geradas por

G, então

0

=

T

GH

(4.25)

Observe que a matriz

H pode ser usada no receptor digital para detectar se ocorreu erro como

conseqüência da degradação imposta pelo canal de transmissão.

Sempre que a palavra-código

y

i

recebida no receptor digital resultar

y H

i T

0

então

i

y

apresenta erros.

(29)

Exemplo 4.4:

(a) Determine a matriz de paridade

H do código

θ

( )

4

,

3

do Exemplo 4.3.

(b) Verifique se

GH

T

=

0

.

(c) Verifique se

T

=

0

i

c H

.

Solução:

(a) A matriz geradora de

θ

( )

4

,

3

na forma sistemática é

[

]

=

=

1

1

0

0

1

0

1

0

1

0

0

1

3

P

I

G

.

De (4.24) temos

[

] [

=

1

1

1

1

]

=

P

T

I

n−k

H

(4.26)

(30)

(b) Verificando se

GH

T

=

0

:

=

=

0

0

0

1

1

1

1

1

1

0

0

1

0

1

0

1

0

0

1

T

GH

(4.27)

(c) Verificando se

T

=

0

i

c H

:

[

]

[ ]

0

1

1

1

1

0

0

0

0

=

[

]

[ ]

0

1

1

1

1

1

1

0

0

=

[

]

[ ]

0

1

1

1

1

1

0

1

0

=

[

]

[ ]

0

1

1

1

1

0

1

1

0

=

[

]

[ ]

0 1 1 1 1 1 0 0 1 = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡

[

]

[ ]

0

1

1

1

1

0

1

0

1

=

[

]

[ ]

0

1

1

1

1

0

0

1

1

=

[

]

[ ]

0

1

1

1

1

1

1

1

1

=

(31)

4.3.4 Decodificação pela Mínima Distância

(Decodificacão ML - Maximum-Likelihood Decoding)

Nesta seção estudaremos como os erros nas palavras-código são detectados e corrigidos no receptor digital.

Ö

No receptor digital, os n bits provenientes do demodulador, correspondentes à i-ésima palavra-código

y

i

recebida são entregues ao decodificador do código

θ

( )

n,k

.

Ö

O decodificador compara

y

i

com as

k

M

=

2

possíveis palavras-código

c

j

de

θ

( )

n,

k

,

1

,

,

1

,

0

=

M

j

L

, e decide em favor daquela palavra-código (portanto, em favor da mensagem

associada) que é mais próxima da palavra-código recebida em termos da Distância de Hamming.

Matematicamente esta operação pode ser expressa por

{ }

y

i

y

i

c

j H

j c

=

−1

arg

min

θ

(4.29)

onde

c

j

C

,

{ } {

=

0 1 1

}

=

c

i

c

, L

c

,

,

c

M

C

e

H j i

c

y

denota a Distância de Hamming entre

i

(32)

Um decodificador baseado no critério de distância mínima é denominado de Decodificador de Máxima

Verossimilhança ou Decodificador ML (ML - Maximum-Likelihood).

Embora a

decodificação ML

possa ser realizada através de

{ }

y

i

y

i

c

j H

j c

=

−1

arg

min

θ

(4.29), existe uma

maneira mais eficiente de implementar um decodificador ML, aproveitando as propriedades da matriz de

paridade

H

(n− )k ×n

de um código

θ

( )

n,k

, denominada de

Decodificação por Arranjo Padrão

(Standard

Array Decoding).

A desvantagem de (4.29) é a necessidade de calcular

k

M

=

2

Distâncias de Hamming para decodificar a

palavra-código recebida.

Veremos a seguir como reduzir este número de distâncias calculadas para

2

nk

utilizando o conceito de

(33)

Arranjo Padrão

Ö

Seja

c

i

a palavra-código transmitida pelo transmissor digital através do canal de transmissão e

seja

y

a palavra-código recebida resultante na saída do demodulador do receptor digital.

Ö

Devido à degradação do sinal no canal, em conseqüência de ruído/interferência, a

palavra-código

y

recebida pode conter erros, de modo que

y

pode ser expressa por

e

c

y

=

i

+

(4.30)

onde

e

é o vetor-linha de n bits que representa o padrão de erro (i.e., os bits errados em

y

)

resultante da degradação do sinal no canal.

Palavra-código transmitida:

c

i

=

[

0

1

0

1

]

Palavra-código recebida:

y

=

[

0

1

0

0

]

Padrão de erro:

e

=

[

0

0

0

1

]

Ö

Note que o peso do padrão de erro é a Distância de Hamming entre

y

e

c

i

.

Peso do padrão de erro

e

=

1

(34)

Pós-multiplicando

y

=

c

i

+

e

(4.30) por

H

T

obtemos

(

)

T T T i T i T

e

e

c

e

c

y

H

=

+

H

=

H

+

H

=

H

(4.31)

(Lembre que

T

=

0

i

c H

, ou seja, as palavras-código de um código são ortogonais à sua matriz de paridade).

Define-se o vetor

n

− dimensional

k

s

, denominado

síndrome do padrão de erro

, ou

simplesmente

síndrome

, como

T

e

s

=

H

(4.32)

Dimensão de

e

=

n

; dimensão de

H

=

(

n

k

)

×

n

; dimensão de

s

=

(

n

k

)

.

É importante enfatizar que o conjunto de síndromes

{ }

s

é determinado pelo conjunto de

padrões de erro

{ }

e

, mas

não pelo conjunto C de palavras-código transmitidas, como podemos

(35)

Observe que

e

é um vetor de n bits (i.e.,

e

é um vetor n dimensional em

GF

(

2

)

)

existem

2

n

possíveis

padrões de erro no conjunto

{ }

e

;

s

é um vetor de

n

k

bits

existem

2

nk

possíveis síndromes no conjunto

{ }

s

.

Em conseqüência,

s

=

e

H

T

(4.32) mapeia diferentes padrões de erro

e

na mesma síndrome

s

.

O Arranjo Padrão (AP) resulta em uma tabela, denominada

Tabela de Síndromes

, a qual é

implementada em ROM (ROM - Read Only Memory) no receptor digital.

→ A Tabela de Síndromes é consultada pelo decodificador ML para identificação e

correção de erro em cada palavra-código

y

recebida.

(Veremos como construir a Tabela de Síndromes no Exemplo 4.6. Por enquanto,

focalizaremos nossa atenção na construção do AP, visto que a capacidade de

detecção/correção de um código pode ser detalhadamente obtida a partir do AP.)

(36)

o

O AP também é uma tabela que possui

2

nk

linhas

, cada uma delas associada a uma das

2

nk

possíveis

síndromes

.

o

O n

o

. de

colunas

do AP é

2

k

, correspondendo ao n

o

. de

palavras-código do código

θ

( )

n,

k

.

o

Quando implementado, a linha superior do AP recebe a designação L0 e a coluna mais à

esquerda recebe a designação C0.

o

A Tabela 4.5 mostra a forma geral de um AP, o qual, portanto, é formado de

n k

k

n

2

2

2

×

=

células (

2

n

possíveis padrões de erro).

Tabela 4.5: Forma geral de um Arranjo Padrão

C0 C1 C2 L C(2k−1) L0 e0 = c0 =0

c

1

c

2 L

(

)

1 2k

c

L1

e

1

c

1

+

e

1

c

2

+

e

1 L

c

(

2k1

)

+

e

1 L2 e2

c

1

+

e

2 c2 +e2 L c

(

2k1

)

+e2 M M M M M ) 1 2 L( n−k

(

2n−k−1

)

e

c

1

+

e

(

2nk1

)

c

2

+

e

(

2nk1

)

L

c

(

2k−1

)

+

e

(

2nk−1

)

(37)

Tabela 4.5: Forma geral de um Arranjo Padrão

C0 C1 C2 L C(2k−1) L0 e0 = c0 =0

c

1

c

2 L

(

)

1 2k

c

L1

e

1

c

1

+

e

1

c

2

+

e

1 L

c

(

2k1

)

+

e

1 L2 e2

c

1

+

e

2 c2 +e2 L c

(

2k1

)

+e2 M M M M M ) 1 2 L( n−k

(

2n−k−1

)

e

c

1

+

e

(

2nk1

)

c

2

+

e

(

2nk1

)

L

c

(

2k−1

)

+

e

(

2nk−1

)

Na linha L0 do AP são listadas, da esquerda para a direita, as

2

k

palavras-código de

θ

( )

n,k

,

cada uma delas representada por um vetor n dimensional em

GF(2)

.

A palavra-código

c

0

pertencente à célula identificada pela intersecção da coluna C0 com a

(38)

Tabela 4.5: Forma geral de um Arranjo Padrão

C0 C1 C2 L C(2k−1) L0 e0 = c0 =0

c

1

c

2 L

(

)

1 2k

c

L1

e

1

c

1

+

e

1

c

2

+

e

1 L

c

(

2k1

)

+

e

1 L2 e2

c

1

+

e

2 c2 +e2 L c

(

2k1

)

+e2 M M M M M ) 1 2 L( n−k

(

2n−k−1

)

e

c

1

+

e

(

2nk1

)

c

2

+

e

(

2nk1

)

L

c

(

2k−1

)

+

e

(

2nk−1

)

Na coluna C0, abaixo da palavra-código

0

, são listados, de alto a baixo, os

2

n−k

1

padrões

de erro relativos à palavra-código

c

0

=

0

.

Primeiramente são listados todos os n padrões de erro de peso 1, isto é, todos os padrões de

erro que resultam de uma Distância de Hamming unitária entre a palavra-código

y

recebida e

0

0

=

c

.

Se

2

nk

>

n

, então lista-se a seguir em C0 todos os possíveis padrões de erro de peso 2.

Em seguida lista-se em C0 todos os possíveis padrões de erro de peso 3, e assim sucessivamente

até que todas as

2

nk

células de C0 estejam preenchidas.

Neste contexto,

e

0

= c

0

=

0

representa o padrão de erro de peso 0, isto é, representa a

não-ocorrência de erro.

Referências

Documentos relacionados

O objetivo deste trabalho foi avaliar o efeito do congelamento prévio à maturação sobre a maciez da carne de bovinos das raças Nelore e Aberdeen Angus. longissimus

Linha C-50, KM 75, LOTE 01 DA GLEBA 01, município de THEOBROMA, Estado de Rondônia devidamente cadastrado no CPF nº 705.633.302-87, torna público que requereu junto a

História do surgimento dos números naturais, sistema de numeração (egípcio, romano e indo-arábico), dentro do sistema de numeração decimal indo-arábico (valor

O estudo teve como objetivo fazer uma análise e uma comparação entre os títulos públicos do tesouro direto e cada tipo de suas aplicações e os planos privados de previdência

Fundamentalmente a prática pedagógica na classe hospitalar se torna um desafio para os educadores, muitas vezes acomodados às estratégias e práticas emolduradas no espaço

Como nos outros capítulos, este também encerra com a pergunta “Uma cultura italiana?” Conforme Bertonha, algumas manifestações da cultura italiana não têm mais o

(* 1957. Professor do departamento da história da arte moderna da Universidade de Basiléia, Suíça, e porta voz do grupo pesquisa internacional “Bilderfahrzeuge. Coordenadora do

- Realizar a fermentação de diferentes composições de mosto (com e sem a seiva do pseudocaule) por Sacharomyces cerevisiae UNIVILLE 9080 (linhagem não floculante),