Escolar Documentos
Profissional Documentos
Cultura Documentos
10.1 - Introdução
O sistema mostrado na figura 10.1 ilustra a transmissão e a recepção de sinais que
utilizam a codificação e a decodificação para aumentar a qualidade do envio de dados.
Canal discreto
183
Codificador/Modulador Forma de onda Detector/Decodificador
do canal
n
o codificador, à taxa de R 0 = R S “bit rate”, a qual é chamada de taxa do canal.
k
b i = 0, 1, , n - k - 1
xi = i
m i + k - n i = n - k, n - k + 1, L, n - 1 (10.2)
184
Os n-k bits de paridade são somas lineares dos k bits de informação dado por:
1 se b i depend de m j
onde pij =
0 se não depende
Definindo em termos de vetores, tem-se:
m = [m 0 , m1 ,... , m k -1 ]
~ (10.4)
b = [b 0 , b1 , , b n - k -1 ]
~ (10.5)
x = [x 0 , x1 , ... , x n -1 ]
~ (10.6)
b=mP
~ ~ (10.7)
onde
185
x = b, m
~ ~ ~ (10.9)
Logo:
[
x = m P, m = m[P, I k ]
~ ~ ~
] ~ (10.10)
onde
P é uma matriz k por (n-k)
1
0 0 ... 0
Ik = 0
1 ... 0 matriz unitária de ordem k
: : ...
0 0 ... 1
(10.11)
Define-se a matriz geradora k x n, como:
G = [P, I k ] (10.12)
ou seja, x = m.G
~ ~
- Propriedade de fechamento
A soma de duas palavras código é outra palavra código
x i ⊕ x j = m i G ⊕ m j G = m i ⊕ m j G
~ ~ ~ ~ ~ ~ (10.13)
186
mi ⊕ m j representa uma nova mensagem
~ ~
Definição: Matriz de “check” de paridade, H
[
H = In -k , PT ] (n - k) x n (10.14)
Tem-se que:
T
[
H G = In -k , P T
] P T
Ik
G = [Pk, n - k , I k ]
P é matriz j, n-k; PT é n-k x k
H G T = I n - k, n - k PnT- k, k + PnT- k, k I k, k
x H T = m G H T = 01, n - k
~ ~
x HT = 0
~ (10.16)
Síndrome: s
~
187
forma: suponha que recebamos g que é igual ao x (palavra código) mais um erro e
~ ~ ~
(vetor erro)
y=x⊕e
~ ~ ~
(10.17)
e = [e1 e 2 L e n ]
~ (10.18)
s = y . H T = x + e . H T = x H T ⊕ e H T
~ ~ ~ ~ ~ ~
(10.19)
s = e HT
~ ~ (10.20)
Propriedades da síndrome s:
~
1a.) s = e . HT
~ ~
A síndrome só depende do vetor erro.
e1 = e ⊕ x i i = 0, 1, L, 2 k - 1
~ ~ ~ (10.21)
188
e1 H T = e . H T ⊕ x i H T = e H T
~ ~ ~
~ (10.22)
Os possíveis vetores ei, i = 0, 1, 2, …, 2k-1 que produzem a mesma síndrome, são
chamados de coset.
H = h1 h 2 ... hn
~ ~ ~ (10.23)
h1T
~
h T
s = e H T = [e1 e 2 e n ] ~
2
~
T
h n
~ (10.24)
n
s = ∑ ei h iT
~ i =1 ~ (10.25)
4a.) Utilizando-se a síndrome s , um código linear (n, k) pode corrigir até t erros na palavra
~
t
2 n - k ≥ ∑ Cin
i=0 (10.26)
189
Nesse limite, quando há igualdade, o código é chamado de perfeito.
Para se mostrar em limite, vê-se que existem n-k bits redundantes. Logo esses bits
podem apontar até 2n-k erros (síndromes). Como nosso código tem n bits e queremos
corrigir até t erros, ou seja, para se identificar que não há erro precisamos de C0n = 1
palavra + identificar 1 erro precisa-se de C1n = n palavras + identificar 2 erros precisa-se
n(-1)
de C 2n = palavras, etc.... até identificar t erros, precisamos CTn .
2
Logo:
onde s = y HT (10.28)
e1 = e ⊕ x i i = 0, 1, L, 2 k - 1
~ ~ ~
e1 H T = e . H T ⊕ x i H T = e H T
~ ~ ~
~
190
Os possíveis vetores ei, i = 0, 1, 2, …, 2k-1 que produzem a mesma síndrome, são
chamados de coset.
H = h1 h 2 L h n
~ ~ ~
h1T
~
h T2
s = e H T = [e1 e 2 L en ] ~
~ M
T
h n
~
n
s = ∑ ei h iT
~ i =1 ~
4a.) Utilizando-se a síndrome s , um código linear (n, k) pode corrigir até t erros na palavra
~
191
t
n -k
2 ≥ ∑ Cin
i =0
Para se mostrar em limite, vê-se que existem n-k bits redundantes. Logo esses bits
podem apontar até 2n-k erros (síndromes). Como nosso código tem n bits e queremos
corrigir até t erros, ou seja, para se identificar que não há erro precisamos de C0n = 1
palavra + identificar 1 erro precisa-se de C1n = n palavras + identificar 2 erros precisa-se
n(-1)
de C 2n = palavras, etc.... até identificar t erros, precisamos CTn .
2
Logo:
C0n + C1n + L + C nt ≤ 2 nk
192
Logo a saída será x̂ = y ⊕ e 0
~ ~
A distância entre duas palavras códigos x e y, d x, y , é dada pelo número de
~ ~ ~ ~
posição (bits) diferentes entre x e y. É claro que xey têm o mesmo número de
~ ~ ~ ~
posições (no caso n posições).
x = [1 0 1 0 0 0 1] y = [1 1 0 0 1 1 0 0]
~
d( x , y) = 5 w( x ) = d( x , 0) = 3
~ ~ ~ ~ ~
w( y) = d( y, 0) = 4 0 = [0 0 0 0 0 0 0 0]]
~ ~ ~
d min = w x i - x j = w x i ⊕ x j
~ ~ ~ ~ (10.29)
193
Como, pela propriedade de fechamento, xi ⊕ x j é outra palavra código, então
~ ~
para se achar dmin basta achar a menor w x i = 0, 1, L desde que x i ≠ 0 .
~
~ ~
Como x H T = 0 , segue que, x tem que ter 1S em posições tais que as linhas de
~ ~ ~
H somam zero. Como o número de 1S significa a distância de Hamming, logo a distância
T
mínima de um código linear (n, k) é o menor número de linhas de HT que somem zero.
Se desejamos corrigir até t erros, a distância mínima tem que ser maior ou igual a
2t + 1, isto é,
dmin ≥ 2t = 1 (10.30)
x1 = (0 0 0) x 2 = (1 1 1)
~ ~
d x1 , x 2 = 3
~ ~
Se recebermos y1 = (0 0 0) ou y 2 = (1 1 1)
~ ~
Temos:
d x1 , y1 = 0 d x1 , y 2 = 3
~ ~ ~
194
d x 2 , y 2 = 3 d x 2 , y 2 = 0
~ ~ ~
Se recebermos:
y 3 = (0 0 1) y 4 = (0 1 0) y 8 = (1 0 0)
~ ~ ~
y 6 = (1 1 0) y 7 = (1 0 1) y 8 = (0 1 1)
~ ~ ~
Temos:
d x1, y 3 = d x1, y 4 = d x1, y 5 = 1
~ ~ ~ ~ ~ ~
d x1, y3 = d x1, y3 = d x1, y5 = 2
~ ~ ~ ~ ~ ~
d x 2, y3 = d x 2, y4 = d x 2, y5 = 2
~ ~ ~ ~ ~ ~
d x 2, y3 = d x 2, y7 = d x 2, y5 = 1
~ ~ ~ ~ ~ ~
195
Figura 10.3 – Possibilidades de duas palavras códigos xi e xj e uma
palavra código y recebida.
1
t= (d min - 1)
2 (10.31)
onde t é um inteiro.
196
2k CODIFICA
2k
x=mG
Figura 10.4 Relação de uma mensagem de informação para uma palavra codificada.
Então, na codificação, ou seja, antes dos bits serem transmitidos pelo canal, temos
2 k seqüências de bits possíveis de serem enviadas. Será o erro na transmissão que fará
com que essas seqüências não pertençam mais a esse grupo e ficará a cargo do receptor
recuperar a mensagem “devolvendo-a” ao conjunto de 2k palavras, com ou sem erro. A
relação, obviamente, deve ser de um para um: uma palavra corresponde a somente uma
mensagem.
2n
2k 2k
Codificação realizada.
Transmissão pelo canal Conjunto de todas as seqüências
possíveis para blocos de n bits
ENVIO NO CANAL
Exemplo:
01100101
n − k
2k 2
01101101
Figura 10.5 Como ocorre o erro na perspectiva dos códigos de bloco lineares.
197
Exemplo 10.3: Código de Hamming
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G=
1 1 1 0 0 1 0
1 0 1 0 0 0 1
P Ik (10.32)
A matriz H correspondente é:
1 0 0 1 0 1 1
H = 0 1 0 1 1 1 0
0 0 1 0 1 1 1
In -k PT (10.33)
198
Com k = 4 temos 24 = 16 possíveis palavras códigos
Tabela 10.1 Mensagens e palavras códigos
Mensagem Palavra Peso Mensagem Palavra código Peso
código
0000 000 0000 0 1000 110 1000 3
0001 101 0001 3 1001 011 1001 4
0010 111 0010 4 1010 001 1010 3
0011 010 0011 3 1011 100 1011 4
0100 011 0100 3 1100 101 1100 4
0101 110 0101 4 1101 000 1101 3
0110 100 0110 3 1110 010 1110 4
0111 001 0111 4 1111 111 1111 7
199
10.3 - Códigos Cíclicos
Os códigos ciclicos são uma subclasse dos códigos lineares tal que apresentam uma
propriedade cíclica da forma.
Seja (x0 x1 x2 ... xn-1) uma palavra código de um código linear (n, k), então
(xn-1, x0, x1, …, xn-2) também é uma palavra código. Da mesma forma serão palavras
códigos (xn-2,xn-1,x0,x1,…,xn-3) (xn-3,xn-2,xn-1,x0,x1,x2,…,xn-4), etc. … etc., … (x1 x2 … x0).
Estes códigos sugerem o tratamento por polinomios de grau (n-1), da forma:
x(D) = x0+x1D + x2D2 + … + xn-1Dn-1 onde D é um real qualquer. x(D) é chamado de
polinômio de palavra código.
200
Logo: Dx(D) mod(D4-1) = x3 + x0D + x1D2 + x2D3
porque:
O polinômio palavra código x(0) de grau n-1 de um código linear (n,k), contém um
polinômio de grau mínimo (n-k) como um de seus fatores.
Propriedades de g(D):
Para se provar, assume-se que possa existir outro polinômio de grau n-k. Somando-se
estes dois criaríamos outros polinômios que também seria palavra código. Porém a
soma dos polinômios, criaria um outro de grau menor. Logo, o polinômio g(D) é único.
Daí, vemos que para um polinômio ter ordem n-k, ele terá que ter obrigatoriamente o
termo independente de D e o termo em Dn-k, ou seja:
201
n - k -1
g(D) = 1 + ∑ g i D n + D n - k
i =1 (10.34)
onde gi assume valores 0 ou 1, a serem determinados.
D n - k m(D) b(D)
= a(D) +
g(D) g(D)
Ou ainda: Dn-km(D) = a(D) . g(D) + b(D) onde a(D) = a0 + a1D = … + ak-1 Dk-1 já
que a(D) multiplicado por g(D) (que tem ordem n-k), terá que ser de ordem n-1.
202
Como b(D) é o resto da divisão, poderá ter no máximo grau n-k-1,
b(D) = b 0 + b1D + b 2 D 2 + ... + b n-k-1 D n-k-1
203
3a. propriedade:
Todos os fatores de 1+Dn de grau n-k podem ser usados como funções geradoras
g(D) de um código cíclico linear (n,k). O mesmo se aplica a h(D) de grau k.
Suponha que desejamos gerar um código cíclico (7,4). n=7, k=4, n-k=3.
204
Usemos, neste exemplo,
g(D) = 1 + D + D3
Então:
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G=
0 0 1 1 0 1 0
0 0 0 1 1 0 1
1 1 0 1 0 0 0
0 1 1 0 1 0 0
G=
1 1 1 0 0 1 0
1 0 1 0 0 0 1
205
1 0 0 1 011
H = 0 1 0 1 110
0 0 1 0 111
A implementação desses códigos pode ser feita através de filtros FIR (Finite
Impulse Response) não recursivos.
Code
word
Message bits
Figura 10.5 Codificador de código bor bloco usando o polinômio
g(D) = 1+ g1 D1 + g2 D2 + .... + gn-k-1 Dn-k-1 + gn-k Dn-k
206
Figura 10.6 Cálculo da síndrome do código por bloco usando
g(D) = 1+ g1 D1 + g2 D2 + .... + gn-k-1 Dn-k-1 + gn-k Dn-k
Tb – memória para armazenar 1 bit que é enviado para frente por controle do “clock” (não
mostrado na figura)
Memória = shift – register = flip-flop = delay element
1 - conecção direta
gi = → multplicadores
0 - sem conecção
⊕ → somador módulo 2
207
Figura 10.7 Decodificador (calculador da síndrome) de g(D) = 1+ D1 + D3
208
Suponha que os bits de mensagem sejam 0011. Então a palavra código deverá ser
0100011.
Vejamos como funciona. Os bits entram da direita para a esquerda e a tabela abaixo
mostra as entradas e o conteúdo de cada registro (numerador em ordem crescente da
esquerda para a direita).
Tabela 10.3
209
10.4 Códigos Convolucionais
10.4.1 - Introdução
Nos códigos lineares por blocos, o xosificador espera k bits e gera, a partir destes k
bits, uma palavra código de n bits (n > k). Existem aplicações, onde os bits não chegam em
blocos e dessa forma há necessidade de se ter “buffers” e esses “buffers” podem ser
indesejáveis tendo em vista o formato e/ou rapidez de transmissão.
Nestes casos, existe uma outra maneira de se fazer códigos controladores de erro.
Tais códigos são chamados de códigos convolucionais.
O codificador convolucional opera em cada bit (ou bits) entrante e gera a palavra
código a partir desse bit.
1
O codificador de um código convolucional com taxa medida em bits por
n
símbolo, é um filtro digital que consiste de M-memórias (M shift registers) com n
conecções de “somadores módulo-2”, e um multiplexador que serializa as n saídas dos
somadores. Uma mensagem de L bits produz uma saída codificada de n(L+M) bits. A taxa
L
de código (code rate) é r= bits/símbolo. Como L >> M tem-se
n (L + n )
1
r ≅ bits/símbolo.
n
210
Toda a teoria de códigos convolucionais mostrada nesse item usa como base o codificador
da figura 10.9.
1
Figura 10.9 – Constante de restrição k = 3; taxa =
2
2
Figura 10.10 – Constante de restrição k = 2, taxa =
3
211
10.4.2 Método do domínio do tempo
1
Códigos convolucionais de taxa têm comportamento no domínio do tempo
n
definido em termos de um conjunto de n amostras da respista impulsional. No caso da
figura 9 tem-se um filtro FIR de comprimento n = 3 amostras. Denotamos as amostras da
m = [m 0 , m1 , m 2 , ]
Seja uma sequência de mensagem ~ que entra no
codificador. O codificador gera duas sequências de saída (na figura 9 chamadas por
x
~
(1)
[
= x1(1) , x (1)
2 , , x i(1) ]x ~
( 2)
[
= x1(2) , x (1)
2 , , x i(2) ,. ]
m = [m 0 , m1 , ]
Sendo ~ , teremos:
M
(1)
x i(1) = ∑ g (1)
l mi -l = g *m i = 0, 1, 2,
l=0 ~ ~
M
( 2)
x i(2) = ∑ g (2)
l m i -l = g *m i = 0, 1, 2,
l=0 ~ ~
~
[
x = x (1) (2) (1) (2) (1) (2)
0 x 0 , x1 x 1 , x 2 x 2 , ]
212
sequência esta que é transmitida através do canal de comunicação.
Exemplo: Na figura 10.9, se a sequência de entrada por (m0 m1 m2 m3 m4) = (10011),
(1 ) (2 )
determine x , x e x .
~ ~ ~
x (1) = g (1) * m
~ ~ ~
x ( 2) = g ( 2) * m
~ ~ ~
213
A variável Di tem o mesmo significado que o atraso Z-i na representação dos filtros
digitais.
O coeficiente gi de Di, como nos filtros digitais, pode ser escrito diretamente da
estrutura do filtro (codificador convolucional) sendo gi = 0 se não existe conexão do atraso
(shift-register) e ao somador módulo-2 e gi = 1, se existir tal conexão.
x (1) , x ( 2) e x .
~ ~ ~
Então:
m(D) = 1 + D3 + D4
214
g (2) = [1 0 1] → g (2) (D) = 1 + D 2
~
x (1) (D) = (1 + D3 + D 4 ) (1 + D + D 2 ) = 1 + D + D 2 + D3 + D 6
x (2) (D) = (1 + D3 + D 4 ) (1 + D 2 ) = 1 + D 2 + D3 + D 4 + D5 + D 6
Logo
215
■ A árvore de códigos é feita supondo-se
que a cada instante ou entra o dígito 0
(convencionado como representando a
escolha dos ramos para cima ou
superiores) ou entra o dígito 1
(convencionado como representando a
escolha dos ramos para baixo ou
inferiores). Para o codificador da figura
8.10(a), obtém-se a árvore de códigod ao
lado. Exemplo: Exemplo: Se a entrada
for m = [1 0 0 1 1], a saída, de acordo com
216
10.4.5 Treliça (trellis)
o A treliça é mais instrutiva do que a árvore, porque traz explicitamente o fato de que o
codificador convolucional é uma máquina de estado finito. Define-se estado do
codificador como sendo os mais recentes (k-1) bits de mensagem movidos para dentro
dos “shift registers”.
217
A porção da treliça entre j e j + 1 (j ≥ 2) é mostrada na figura 10.13
00
a a
11
11
b
b
00
10
c c
01 01
10
d d
218
10.4.5 Decodificação por Máxima Probabilidade (Máxima Verossimilhança) dos Códigos
Con6olucionais
x e o receptor recebe y (que deve ser bem parecido com x, a menos dos erros
~ ~ ~
Dado y , o receptor tem que fazer uma estimativa de m , o qual é simbolizada por
~ ~
m̂ .
~
1-p
0 0
1 1
1-p
219
Para 1 bit:
p se y i ≠ x i
p( y i /x i ) =
1 - p se y i = x i (10.35)
N
p y / x = ∏ p( yi /x i )
~ ~ i =1 (10.36)
Então:
N
log e p y / x = ln p y / x = = ∑ ln p( y i /x i )
~c ~ ~ ~ i =1 (10.37)
Logo:
ln p y / x = d ln p + ( N - d ) ln(1 - p )
~ ~
p
= d ln + N ln(1 - p)
1- p (10.38)
p
A máxima probabilidade será dada quando d ln for máxima, que
1 - p
praticamente só depende de d.
220
Regra para decodificação de um código convolucional num canal simétrico binário:
1 p 1
Pois p é em geral bem menor que , logo máx d ln com p <<
2 1 - p 2
será: min[d].
Algoritmo:
221
Passo 3: Sej j < L + M volte ao passo 2 ou pare.
Ou seja, existem dois erros na sequência recebida, devido a ruído no canal. Este
erro duplo é corrigido com o algoritmo de Viterbi, onde o codificador é o da figura 10.9
222
Exemplo 10.6 Envia-se 0 0 0 0 ... 0 (tudo zero) e recebe-se (1 1 0 0 0 1 0 0 0 0 ...), ou
seja, temos 3 erros.
Usando-se o algoritmo de Viterbi (para o codificador da figura 9) obtém-se:
223
224
225
Apêndice B
226
227
228
229
230
231
232
233
234
235