Você está na página 1de 15

ESTI008-

17SA - Teoria
da Informação
e Códigos -
ECE ESTI008-17SA - Teoria da Informação e
Prof. Irineu
Antunes Códigos - ECE
Júnior
Códigos de Bloco — Abordagem de Aprendizado por meio
de Resolução de Problemas com Octave

Prof. Irineu Antunes Júnior

UFABC

07/05/2020

01/ 15
Introdução

ESTI008- Códigos
17SA - Teoria
da Informação Por código entende-se qualquer conjunto de palavras que, em geral, podem ser
e Códigos - elementos de qualquer natureza: um intervalo na reta real, uma função, uma
ECE
forma de onda, um raio de luz, um sinal de fumaça . . . o que quer que se deseje.
Prof. Irineu
Antunes
Júnior Códigos de Bloco
• O termo bloco refere-se ao fato de as palavras serem formadas por blocos
de elementos.
• Um código de bloco é um conjunto de palavras formadas por elementos
tomados de um alfabeto.
• Códigos binários têm palavras formadas por 0s e 1s, podendo ter
comprimento fixo ou variável.
• Por exemplo, o código C a segir é formado por três palavras de
comprimentos diferentes.
c1=[1 0]
c2=[1 1 0]
c3=[0 0 0 1]
C={ c1 c2 c3 }=[1 0] [1 1 0] [0 0 0 1]
• Passamos a considerar a seguir apenas códigos de blocos de comprimento
fixo.
02/ 15
Códigos de Bloco Lineares

ESTI008- Linear Block Codes (LBC)


17SA - Teoria
da Informação São códigos de bloco ditos lineares pois têm estrutura algébrica num espaço
e Códigos - vetorial com elementos tomados de um corpo numérico, normalmente, finito.
ECE

Prof. Irineu
Antunes Exemplo: LBC Binário (espaço vetorial com elementos binários)
Júnior
Um dado d entra num codificador G (matriz geradora) e produz a palavra de saída
c = d.G, sendo usado o produto módulo 2 no corpo binário.
d = [ 0 1 ];
G = [ 1 0 1 ; 0 1 1 ];
c=mod(d*G,2);
c=[0 1 1]
Este código é dito sistemático porque G tem colunas de uma matriz identidade
que fazem o dado aparecer inalterado na saída.
Também é dito um single parity-check code (SPC) pois o último elemento na
saída é o resultado de um cálculo de paridade. De fato
d = [D1 D2 ]; G = [I∣P]; c = [C1 C2 C3 ];
[D1 D2 ]G = [D1 D2 P1 ], logo, os elementos C1 = D1 ,C2 = D2 e C3 = P1 .
Ou, em termos de vetores, c = [d∣p], com p = [P1], a paridade.
E, claro, caso se queira calcular só a paridade, pode-se usar o produto
dP = p, ou seja, [D1 D2 ]P = [P1 ], em que P é a matriz de paridade.
03/ 15
Exemplo 1 - Treinando no Octave

ESTI008- pkg install -forge control


17SA - Teoria pkg install -forge signal
da Informação pkg install -forge communications
e Códigos - RA = [ _insira aqui os dígitos do seu RA_ ];
ECE D1 = mod(sum(RA(1:4)),2); D2=~D1; D3=1;
d = [ D1 D2 D3 ];
Prof. Irineu
pkg load communications;
Antunes
G = hammgen(numel(d));
Júnior
c = mod(d*G,2);

Qual o nome deste código?


Permute as colunas da matriz geradora.
O código muda? Não, pois o conjunto C é o mesmo. Verifique! Basta entrar com dados de 000 até 111.
A sistemática muda? Sim, inclusive pode se tornar não sistemático.
Faça combinação linear (soma modulo 2) das colunas:
O código muda? Não, o conjunto de palavras em C permanece o mesmo. Verifique!
A codificação dada pela matriz geradora pode se tornar não sistemática? Sim.
Dê um exemplo de matriz geradora não sistemática.
Uma medida de distância entre duas palavras (vetores no espaço vetorial binário) é o número de elementos
em diferem uma da outra. Denotamos este código como C(n, k, d ) em que n é o comprimento das palavras,
k o comprimento dos dados e d a menor distância entre duas palavras quaisquer.
Qual o n , k e d neste exemplo? n = _, k = _ e d = _.
Qual a quantidade de palavras no código? ∣C∣ = __, em que |.| indica o tamanho do código.
Obs.: as palavras têm comprimento n mas estão num subespaço (dimensão k ) do espaço de todas as n -uplas
(dimensão n ).
A paridade tem quantos elementos? p = ___.
04/ 15
Dígitos de Paridade

ESTI008- SPC
17SA - Teoria
da Informação Neste caso, a paridade é um único dígito que é calculado pela soma módulo 2 dos
e Códigos - dados, P = (D1 + ... + Dk )(mod2). Em termos matriciais:
ECE d=[0 0 0 1 1 0 1 1]; k=numel(d);
I=eye(k); P=ones(k,1); G=[I P];
Prof. Irineu
c=mod(d*G,2);
Antunes
Júnior
c=[0 0 0 1 1 0 1 1 0]
linhas de G: [1 0 0 0 0 0 0 0 1] [0 1 0 0 0 0 0 0 1] [0 0 1 0 0 0 0 0 1] [0 0 0 1 0 0 0 0 1]
[0 0 0 0 1 0 0 0 1] [0 0 0 0 0 1 0 0 1] [0 0 0 0 0 0 1 0 1] [0 0 0 0 0 0 0 1 1]

Código de Repetição
Aqui as paridades são repetições do dado. Para k = 1 dígito de dado, d = [D1 ], o
código é formado acrescentando-se m dígitos de paridade P1 = P2 = ... = Pm .
São LBC com parâmetros (n, k ) = (n, 1) e qual a distância mínima, d ?
Vejamos por meio de um exemplo:
1 → 1 1 1 ... 1 (n vezes)
0 → 0 0 0 ... 0 (n vezes)
k
Pronto! Só há duas palavras neste código. De fato ∣C∣ =2 = 2 palavras. E,
claramente, d = n .

05/ 15
Distância Mínima de LBC
Invariância do conjunto de distâncias
ESTI008-
17SA - Teoria Como analogia ilustrativa, segue a anedota: se você se sentar sobre uma palavra
da Informação
e Códigos -
de um código e olhar a constelação no seu entorno, medirá um conjunto de
ECE distâncias até cada palavra. Um colega que se encontre em qualquer outra
Prof. Irineu palavra distinta, medirá o mesmo conjunto de distâncias.
Antunes
Júnior
Desafio
Escreva um programa que faça uma representação bidimensional da constelação
de palavras de um código num espaço binário de dimensão n e verifique a
anedota.

Mínimo peso
O peso de uma n -upla é definido como a quantidade de elementos não nulos. Por
exemplo, [1001011] tem peso 5.

A distância mínima é o peso mínimo (não nulo, claro).


Por quê? Sente-se na palavra nula, meça as distâncias e compare com o pesos.

06/ 15
Exemplo 2 - Treinando com o Octave

ESTI008- Matrizes do Código de Hamming


17SA - Teoria
da Informação Notou que a função hammgen retorna duas matrizes?
e Códigos -
Vejamos para k = 3.
ECE
[G H]=hammgen(3)
Prof. Irineu G =
Antunes 1 0 0 1 0 1 1
Júnior 0 1 0 1 1 1 0
0 0 1 0 1 1 1

H =
1 1 0 1 0 0 0
0 1 1 0 1 0 0
1 1 1 0 0 1 0
1 0 1 0 0 0 1

% E o produto de G pela transposta de H é nulo!


%
mod(G*H.',2)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
A seguir, o motivo deste resultado.

07/ 15
Código Dual

ESTI008-
17SA - Teoria Dualidade
da Informação
e Códigos - • Partindo de GHT = {0}, pode-se multiplicar pela esquerda por um dado d e,
ECE pela direita, por d̃, ambos dados genéricos e de comprimentos apropriados,
Prof. Irineu respectivamente, k e k ′ :
Antunes
Júnior T
dGH d̃ = {0} ⇒ cc̃ = 0

• Como o produto escalar destes vetores é nulo, daí resulta que c é ortogonal
ao vetor c̃.
• Agora, entrando-se com diferentes dados, d de comprimento k , o produto
dG produz as palavras do código C.
• O mesmo ocorre para d̃ de comprimento k ′ e HT d̃ = (d̃T H)T que fornece
palavras de um código ortogonal C̃, com matriz geradora H.
• Como d tem k elementos, C tem dimensão k e, como d̃ tem k ′ = n − k
elementos, resulta que C̃ é o espaço dual (complementar) de C no espaço
vetorial de dimensão n .

08/ 15
Exemplo 3 - Treinando com o Octave

ESTI008-
17SA - Teoria
da Informação
e Códigos -
ECE Exemplo de códigos duais
Prof. Irineu n=3;k=2; % SPC
Antunes P = [ 1 ; 1 ]; I = eye(2);
Júnior G = [ P I ]
G =
1 1 0
1 0 1

n=3; % Cod. de Rep.


Gdual = [ 1 1 1 ]; % <- sim? Verifique.
Idual = eye(1); H = Gdual ;
mod(G*H.',2)
ans =
0
0

09/ 15
Matrizes na forma canônica

ESTI008-
17SA - Teoria
da Informação
e Códigos -
ECE • Para dados no final da palavra, G e H assumem as formas conônicas do
Prof. Irineu exemplo anterior, na qual dG = c pode ser escrito como d[P∣Ik ] = [p∣d] em
Antunes
Júnior
que a matriz G foi particionada em duas submatrizes, cada uma produzindo
uma parte da palavra do código.
• Para dados no início, vale: G = [Ik ∣P].

• Já a forma canônica da matriz H, é obtida partindo de p + p = 0 e


T T
escrevendo p + dP = [p∣d][Im ; P] = cH e, portanto, [Im ; P] = H .
• Aqui a notação [A; B] é usada para indicar que as submatrizes são
concatenadas verticalmente como no Octave.

10/ 15
Comunicação com Erros

ESTI008-
17SA - Teoria
da Informação
e Códigos -
ECE Comunicação com erros sempre ocorre na prática
Prof. Irineu E este seria o fim dos sistemas de comunicação (confiáveis) não fosse a
Antunes
Júnior
codificação de canal feita, por exemplo, pelos códigos aqui estudados.

Tratamento de erros
• Nos LBC, a paridade p que é uma informação redundante sobre os dados e
permite verificar se uma n-upla recebida r é uma palavra do código ou não.
(Detecção de erro)
• E, se a redundância for suficiente, a paridade ainda permite estimar o que
foi transmitido, corrigindo alguns padrões de erro. (Correção de erro)

11/ 15
Uso de síndrome

ESTI008- Matriz de verificação


17SA - Teoria
da Informação T
A matriz H pode ser usada para detectar e corrigir erros.
e Códigos -
ECE
Suponha uma n-upla recebida de um canal com erro aditivo: r = c + e, em que r é
o que foi recebido e e o erro adicionado.
Prof. Irineu
Antunes Vale
T T T T
Júnior rH = (c + e)H = cH + eH = 0 + s, onde s é a síndrome.

Interpretação da síndrome
Aqui o termo síndrome se refere à diagnóstico:
• Uma palavra válida tem síndrome nula.
• Uma n-upla inválida tem síndrome não nula.

Síndrome e tratamento de erro


O uso da síndrome deve ser feito com cuidado:
• Várias n-uplas mais padrões de erro produzem a mesma síndrome.
• A correção do erro deve considerar qual o melhor padrão de estimativa
segundo algum critério: mínima probabilidade de erro a posteriori, máxima
verossimilhança etc.

12/ 15
Atividade Individual

ESTI008- Atividade
17SA - Teoria
da Informação Utilizando o Octave, escrever os programas (arquivos.m) solicitados a seguir,
e Códigos - juntando-os num diretório de ferramentas (seu_nome_toolbox) a ser usado por
ECE
você ao longo do curso.
Prof. Irineu
a. Escrever uma função (gera_palavra.m) que fornece a palavra de código,
Antunes
Júnior dados a matriz geradora e o dado.
b. Escrever uma função (gera_síndrome.m) que fornece a síndrome definida
como o produto de uma n-upla qualquer com uma matriz de verificação de
paridade dada.
c. Escrever uma função (imprime_erros_e_sindromes.m) que imprime todas
as n-uplas (possíveis padrões de erro) e respectiva síndrome.
d. Escrever um código que toma uma palavra do código de hamming (k=3),
adiciona um padrão de erro simulando uma n-upla recebida de um canal.
Em seguida, calcula a síndrome dessa n-upla e usa a tabela de síndromes
para encontrar o padrão de erro mais provável e fazer a correção obtendo
uma n-upla estimada.
e. Quais padrões de erro esse código é capaz de detectar e corrigir? E de
apenas detectar?

13/ 15
Atividade Individual (Cont.)

ESTI008-
17SA - Teoria
da Informação
e Códigos -
ECE

Prof. Irineu
Antunes
Júnior Instruções
Deposite um arquivo compactado (.zip, .7z etc.) com a sua
solução da atividade no tidia em
Atividades/02_Cod_de_Blocos

14/ 15
Estudo Individual

ESTI008-
17SA - Teoria
da Informação Livos da coleção Schaum
e Códigos -
ECE

Prof. Irineu
Antunes
Júnior

para o conteúdo visto até o momento:


• Leia o capítulo sobre o conteúdo visto nesta aula.
• Resolva alguns exemplos utilizando seu pacote de
ferramentas para o Octave.

15/ 15

Você também pode gostar