Ciências da computação dia 19

um pouco mais sobre códigos, detecção e correção de erros

continuando códigos ponderados

código auto-complementável → quando um código ponderado tem o valor 1111 para o decimal 9 e quando você faz 9 --- n é só você inverter n (inverter 0 com 1 e 1 com 0)

ex:

pesos respectivos(3, -1, 1, 6)

1 | 0 0 1 0

2 | 1 1 0 0

7 | 0 0 1 1 (9--2 (2 é o n))

8 | 11 0 1 (9--1)

obs: soma dos pesos de um código ponderado precisa ser ≥ 9

Códigos não Ponderados

código excesso de 3

você pega o numero atual em binário e soma 3 em binário

1 em excesso de 3

0 0 0 1 + 0 0 1 1 = 0 1 0 0

código cíclico

código de Gray

criação com comprimento n

comprimento 1:

0

1

comprimento 2

0 | 0

0 | 1

--- --- (espelho)

1 | 1

1 | 0

os valores são espelhados e do lado esquerdo da | tudo que esta para cima do espelho é sempre 0 e tudo que está para baixo é 0

comprimento 3

0 | 0 0

0 | 0 1

0 | 1 1

0 | 1 0

--- --- --- (espelho)

1 | 1 0

1 | 1 1

1 | 0 1

1 | 0 0

repare que na parte direita acima do espelho é exatamente o resultado do código de tamanho n --- 1 ou seja código de tamanho 2, e isso se repete a todo os subsequentes

então um template geral

0 | código n --- 1

--- --- (espelho)

1 | código n --- 1 espelhado

binário para código Gray

para transformar binário em código Gray você deixa o bit mais significativo como 1 e o resto você vai somando com o antecessor e desconsiderando o carry

ex:

1 1 0 0 1 0 1(2)

1 (1 +1 ("desconsidera o carry")) (1 + 0) (0 + 0) (0 + 1) (1 + 0) (0+ 1)

1 0 1 0 1 1 1

código Gray para binário

para o caminho inverso você deixa o mais significativo como 1 e pega o resultado anterior menos binário atual (lembrando que 0--1 = 1)

1 0 1 0 0 0 0 1 1 1

1 (1--0) 1 1

1 1 (1--1) = 1 1 0

1 1 0 (0--0) = 1 1 0 0

1 1 0 0 (0--0) = 1 1 0 0 0

1 1 0 0 0 (0--0) = 1 1 0 0 0 0

1 1 0 0 0 0 (0--0) =1 1 0 0 0 0 0

1 1 0 0 0 0 0 (0--1) = 1 1 0 0 0 0 0 1

1 1 0 0 0 0 0 1 (1--1) = 1 1 0 0 0 0 0 1 0

1 1 0 0 0 0 0 1 0 (0--1) = 1 1 0 0 0 0 0 1 0 1(código Gray)

Detecção e correção de erros

Paridade → total de dígitos 1

Paridade par → total de dígitos 1 é par

Paridade ímpar → total de dígitos 1 é ímpar

Distância entre palavras → número de bits diferentes de uma palavra para outra

Distância entre códigos → menor distância entre palavras de um código

BCD paridade par → para deixar um BCD com paridade par, adicionamos uma coluna sem valor (0) que não implicará nas contas, apenas na sua paridade, e caso o numero de 1 for par adicionamos um 0 nessa coluna se não adicionamos 1 (para paridade ímpar é só fazer o inverso)

código ponderado 2 em 5 → código com pesos respectivos (0, 1, 2, 4, 7) → código com paridade par com todos os código com 2 números 1 e 5 bits, por isso 2 em 5, e como sua primeira coluna é 0 então ela não entra nas contas, apenas para paridade

códigos dectores e corretores de erros

detectar

caso uma informação seja enviada e não esteja na tabela ou não siga a paridade é então detectado um erro

No entanto caso mais de um bit seja modificado, provavelmente vai existir um valor desse na tabela de códigos e não será detectado um erro, e o valor enviado será considerado outro, esse fato é chamado de erro na interpretação

No geral os erros que ocorrem são erros únicos (apenas 1 bit de erro) por isso no geral são adicionados apenas um bit de paridade

Além disso com a paridade também aumenta-se a distância do código, sendo assim para detectar um erro, a distância do código precisa ser pelo menos n + 1 (n = numero de erros) = 2

corrigir

para corrigir o erro você precisa ter uma distância mínima de n * 2 + 1, no exemplo anterior 2 * 1 + 1 = 3

ou seja

digamos que nossa tabela de codigos é a seguinte

0 0 0

1 1 1

caso a gente envie 0 0 0 mas ocorra um erro no meio e o valor que vai chegar seja 0 0 1

então deverá ser necessário olhar na tabela e ver a menor distância de palavras entre a errada (001) e as que estão na tabela, a menor distância será o valor certo

então

distancia entre 001 e 000 = 1

distancia entre 001 e 111 = 2

então o valor correto é 000 e o valor foi corrigido