Redes de Computadores
Codificação de Linha e Controle de Erro
Profa. Priscila Solís Barreto
Dado Digital, Sinal Digital
Sinal Digital Discreto, pulsos de voltagem discontínua Cada pulso é um elemento do sinal Dados binários codificados dentro de elementos
do sinal
Alguns termos Unipolar – todos os elementos do sinal tem o mesmo
sinal Polar – um estado lógico representado pro uma
voltagem positiva e outro estado representado por uma voltagem negativa
Taxa de transmissão (R) em bits por segundo Duração ou tamanho de um bit (1/R) Taxa de modulação taxa com que o sinal muda de nível
– baud: elementos do sinal por segundo Marca (binário 1) e espaço (binário 0)
O Que é Codificação de Linha Mapeamento de sequencias de informação binária no
sinal digital que entra no canal Ex. “1” mapeia pulso +A; “0” para pulso –A
O código de linha é selecionado conforme requerimentos do sistema: Potencia transmitida: Consumo de potência = $ Temporização de bits: Transições no sinal ajudam na
recuperação da temporização Eficiência de largura de banda: Transições excessivas
desperdiçam largura de banda Conteúdo de baixas frequencias: Alguns canais bloqueiam
baixas frequencias Períodos longos de +A ou –A causam quedas de sinal A forma de onda não deve ter conteúdo de baixas frequencias
Deteção de erros: ajuda Complexidade/custo: implementação do código
Interpretação de Sinais
O receptor precisa saber timing of bits – quando um bit começa e termina Níveis de sinal
Fatores que afetam a interpretação Relação sinal ruído Taxa de transmissão Largura de banda Esquema de codificação
Comparando Esquemas de Codificação
Espectro do sinal clocking Detecção de erros Interferência do sinal e imunidade ao ruído Custo e complexidade
Exemplos de código de linha
NRZ-inverted (differential
encoding)
1 0 1 0 1 1 0 0 1
Unipolar NRZ
Bipolar encoding
Manchester encoding
Differential Manchester
encoding
Polar NRZ
Densidade Espectral de Potência de um código de Linha
O motivo para não utilizar a transformada de Fourier para encontar o espectro de um
código de linha é que os sinais de informação que geram o código de linha são estocásticos
(não determinísticos) e a transformada de Fourier não pode ser aplicada. A PSD
mostra a distribuição da potência do sinal em relação à frequencia.
Espectro dos códigos de linha Assumir 1s e 0s independentes e equiprovaveis
NRZ tem alto conteúdo nas baixas frequencias
Manchester tende a desperdiçar largura de banda
A PDS dá o espectro de sinais aleatórios em que a máxima frequencia em que a PSD de um sinal é diferente de zero pode ser considerada como a
largura de banda desse sinal.
Unipolar e Polar Non-Return-to-Zero (NRZ)
Unipolar NRZ “1” mapeado para pulso +A “0” mapeado não pulso Alta potência média
0.5*A2 +0.5*02=A2/2 Strings longos de A ou 0
Temporização pobre Conteúdo de baixas
frequencias Simples
Polar NRZ “1” mapeado para pulso +A/2 “0” mapeado para pulso –A/2 Melhor potência média
0.5*(A/2)2 +0.5*(-A/2)2=A2/4 Strings longos de +A/2 ou –A/2
Temporização pobre Conteúdo de baixas
frequencias Simples
1 0 1 0 1 1 0 0 1
Unipolar NRZ
Polar NRZ
Código Bipolar
Três níveis de sinais: {-A, 0, +A} “1” mapeado para +A ou –A em alternância “0” mapeado para não pulso
Cada pulso + corresponde a um pulso -, pouco conteúdo nas baixas frequencias
String de 1 produz uma onda quadrada Espectro centrado em T/2
Strings longos causam que o receptor perda sincronismo
Zero códigos de substituição
1 0 1 0 1 1 0 0 1
Bipolar Encoding
Código Manchester e Códigos mBnB
“1” mapeia em A/2 primeiro T/2, -A/2 último T/2
“0” mapeia em -A/2 primeiro T/2, A/2 último T/2
Cada intervalo tem transições no meio Recuperação da
temporização é fácil Usa o dobro da banda
mínima Simples para implementar Usado em 10-Mbps Ethernet e
outros padrões LAN
Código de linha mBnB Mapeia blocos de m bits em
n bits Código de Manchester é
1B2B Código 4B5B usado em
FDDI LAN Código 8B10b usado em
Gigabit Ethernet Código 64B66B usado em
10G Ethernet
1 0 1 0 1 1 0 0 1
Manchester Encoding
Codificação Diferencial
Erros em alguns sistemas causam transposição na polaridade +A se converte em –A e viceversa Todos os bits subsequentes na codificação Polar NRZ estariam errados
Codificação diferencial dá robustes a esse tipo de erro “1” mapeado na transição do nivel de sinal “0” mapeado na não transição do nível de sinal Mesmo espectro que NRZ Os erros ocorrem em pares Também usado na codificação Manchester
NRZ-inverted (differential
encoding)
1 0 1 0 1 1 0 0 1
Differential Manchester
encoding
Taxa de Modulação (baud)
Baud Rate – Taxa com que o sinal muda
Termos (1)
Unipolar Todos os símbolos tem o mesmo “sinal” numérico
Polar Um estado lógico representado por um pulso
positivo e outro por pulso negativo
Taxa de dados Taxa de transmissão em bits / segundo
Duração ou comprimento do bit Tempo gasto para transmissão de um bit
Termos (2)
“Mark” e “Space” Bits 1 e 0, respectivamente
Taxa de modulação Taxa na qual o nível do sinal muda Medida em “baud” = símbolos por segundo
Taxa de bits por segundo = baud multiplicada pelo número de bits por símbolo
Baud versus bit rate A largura de faixa restringe o número de
símbolos que se pode enviar por segundo (baud)
Por exemplo, o canal telefônico tem BW = 3100 Hz e permite por volta de 2400 baud
Tática para aumentar a taxa de bits: aumentar o número de bits / símbolo
Modem V.32, 9600 bps, obtidos usando 2400 baud com 4 bits/símbolo
Interpretando Sinais
Informação útil Temporização dos bits – quando eles iniciam e
terminam Nívels do sinal (dos símbolos)
Fatores que afetam a correta interpretação (decodificação) dos sinais Razão Sinal / Ruído (Signal to noise ratio) Taxa de dados Largura de faixa (Bandwidth)
Comparação de esquemas de codificação(1)
Espectro do sinal Ausência de freqüências altas reduz a largura de
faixa Ausência de componente DC (freq. zero) permite
“acoplamento AC” via transformador, permitindo isolamento
Concentração de potência no meio da largura de faixa
Clocking Sincronismo do transmissor e receptor Clock externo Mecanismo de Sync baseado no próprio sinal
Comparação de esquemas de codificação (2)
Detecção de erro Pode ser incorporada ao próprio sinal codificado
Imunidade à interferência e rúido Alguns códigos (esquemas) são melhores que os
outros
Custo e complexidade Taxa de sinal mais alta (e, consequentemente, taxa
de bits mais alta) implica em aumento de custo Alguns códigos requerem taxa de sinal mais alta
que a de bits
Controle de Erro Os sistemas de transmissão digital introduzem erros As aplicações precisam de certos níveis de confiabilidade
Aplicações de Dados precisam de tranferências sem erros Aplicações de Voz & video toleram alguns erros
O controle de erro é utilizado quando o sistema de transmissão não alcança os requerimentos da aplicação
O controle de erro garante que um fluxo de dados seja transmitido com um certo nível de precisão a pesar dos erros
Existem dois enfoques básicos: Error detection & retransmission (ARQ) Forward error correction (FEC)
Dado Digital, Sinal Analógico
Sistema público de telefonia Largura de faixa: 300Hz a 3400Hz Use modem (modulator-demodulator)
Modulações: Amplitude shift keying (ASK) Frequency shift keying (FSK) Phase shift keying (PK)
Modem versus driver de linha
Driver de linha apenas aplica um “código de linha”, como HDB3, etc.
Modem é diferente:
Modulation Techniques
Amplitude Shift Keying
Informação representada por diferentes amplitudes
Usualmente, uma amplitude é zero Ou seja, usa-se presença e ausência da portadora
Susceptível a mudanças bruscas no ganho Ineficiente Até 1,2 kbps em linhas telefonicas “voice
grade” Usado em fibra óptica
Frequency Shift Keying
Forma mais comum é o binary FSK (BFSK) 2 valores binários representados por 2
frequencias diferentes (próximas à da portadora)
Mais robusto a erros do que ASL Até 1,2 kbps em linhas telefonicas “voice
grade” Rádio de alta frequencia Usado em LANs com cabo coaxial
Multiple FSK
Usa mais do que 2 frequencias Mais eficiente em termos de largura de faixa Menos robusto a erros Cada símbolo representa mais de 1 bit
FSK em linhas telefonicas (Voice Grade Line)
Phase Shift Keying
Informação é representada pela fase do sinal Binary PSK
Duas fases representam 2 dígitos binários Differential PSK
Fase é deslocada em relação a um valor anterior, e não em relação a algum sinal de referência
Modulação em fase
Differential PSK
Síntese
Quadrature PSK
Cada símbolo representa mais de 1 bit Informação codificada em deslocamentos de fase
de π/2 (90o) Pode-se usar diferentes ângulos (fase) e mais de
uma amplitude Modem 9600bps usa 12 angles , dos quais quatro
têm duas possíveis amplitudes Offset QPSK (orthogonal QPSK)
Esquema moderno
Moduladores QPSK e OQPSK
Exemplos de formas de onda da QPSK e OQPSK
Performance de esquemas de modulação
Bandwidth ASK e PSK bandwidth diretamente relacionada à
taxa de bits FSK é mais complicada
Na presença de ruído, bit error rate (BER) de PSK e QPSK são 3dB superior a ASM e FSK
BER (bit error rate) por SNR
Quadrature Amplitude Modulation
QAM é uma técnica moderna usada em modems asymmetric digital subscriber line (ADSL) e alguns sistemas wireless
Combina ASK e PSK Envia 2 sinais digitais usando uma mesma
portadora Uma cópia da portadora é deslocada de 90°
Cada portadora é modulada com ASK
Constelações do QAM
Constelação do QAM
Modulador QAM
Modems comerciais
Padrão ITU Máxima Baud Máxima BPS Modulação V.21 300 300 2 FSK V.22 600 1200 4 FSK V.22bis 600 2400 16 QAM V.27ter 1600 4800 8 PSK V.29 2400 9600 16 QAM V.32 2400 9600 32 QAM V.32bis 2400 14400 128 QAM V.34 3229 33600 960 QAM
Cable modem
Dado analógico, sinal digital
Conversão A/D Pulse code modulation (PCM) Delta modulation (DM) ADPCM, etc.
Digitalizando sinal analógico
Dado analógico, sinal analógico
Por que modular sinais analógicos Maior frequencia pode tornar atenuação menor Permite multiplexar sinais
Tipos de modulação Amplitude Frequency Phase
Idéia principal Todos os blocos de dados transmitidos (“codewords”)
satisfazem um padrão Se o bloco recebido não satisfaz o padrão, é um erro Redundancia: somente um conjunto de blocos
possíveis podem ser codewords Mancha cega: quando o canal transforma um
codeword em outro codeword
Channel Encoder Informação usuário
Pattern checking
Todos os inputs no canal Satisfazem um padrão de entrada
Saída do canal
Entregar informação ou avisar erro
Checagem de Paridade Única Adicionar ao final um bit de checagem de paridade
para k bits Info Bits: b1, b2, b3, …, bk
Check Bit: bk+1= b1+ b2+ b3+ …+ bk modulo 2
Codeword: (b1, b2, b3, …, bk,, bk+1)
Todos os codewords tem um número par de 1s O receptor checa para ver se o número de 1s é par
Todos os padrões que mudam um número impar de bits são detectados
Todos os padrões com número par não são detectados Bit de paridade é usado no código ASCII
Exemplo de Código de Paridade Única Informação (7 bits): (0, 1, 0, 1, 1, 0, 0) Bit de Paridade : b8 = 0 + 1 +0 + 1 +1 + 0 = 1 Codeword (8 bits): (0, 1, 0, 1, 1, 0, 0, 1)
Se um erro único no bit 3 : (0, 1, 1, 1, 1, 0, 0, 1) # de 1’s =5, ímpar Erro detectado
Erros no bits 3 e 5: (0, 1, 1, 1, 0, 0, 0, 1) # de 1’s =4, par Error não detectados
Checkbits & Deteção de Erro
Calcuar check bits
Canal
Recalcular check bits
Comparar
Bits informação Received information bits
Enviar Check bits
Informação aceita se os k check bits correspondem
Receber check bits
k bits
n – k bits
Quanto é eficiênte um código de paridade única?
Redundancia: o código adiciona um bit redundante k para k bits de informação : overhead = 1/(k + 1)
Abrangência: todos os padrões de erro com um número ímpar de erros são identificados Um padrão de erro é um tupla binária (k + 1) com 1s ode
ocorrem erros e 0’s em outras partes De 2k+1 (k + 1) tuplas binarias, ½ são ímpares, então 50%
de erros podem ser detectados É possível identificar mais erros se são adicionados
mais check bits? Sim, com os códigos corretos
Por que os erros de bits são aleatórios? Muitos canais de transmissão introduzem erros de bits de forma
aleatória, independente de cada um, com probabilidade p Alguns padrões de erro são mais prováveis que outros :
Em qualquer canal comum p < 0.5, então p/(1 – p) < 1 Seque que os padrões com 1 erro são mais comuns que os
padrões com 2 erros e assim por diante Qual é a probabilidade de ocorrer um erro que não seja
detectado?
P[10000000] = p(1 – p)7 = (1 – p)8 p/(1-p) e
P[11000000] = p2(1 – p)6 = (1 – p)8 [p/(1-p)]2
Checagem de paridade simples com erros aleatórios de bits Erro não detectável quando ocorre um erro em número
par de bits
Exemplo: Avaliar para n = 32, p = 10-3
Neste exemplo, mais ou menos 1 em 2000 padrões de erro são não detectáveis
P[falha na deteção erro] = P[erro padrão não detectável] = P[padrões de erro com número par de bits]
= p2(1 – p)n-2 + p4(1 – p)n-4 + … n 2
n 4
P[erro não detectável] = (10-3)2 (1 – 10-3)30 + (10-3)4 (1 – 10-3)28
≈ 496 (10-6) + 35960 (10-12) ≈ 4.96 (10-4)
32 2
32 4
x = codewords o = noncodewords
x
x x
x
x
x
x
o
o o
o o
o o
o o o
o
o
o x
x x x
x x
x
o o
o o
o o o o o
o
o Poor distance
properties
Que é um bom código? Muitos canais tem
preferência de padrões de erro que tem um número baixo de erros
Estes padrões de erro mapeiam codewords transmitidos por n-tuplas
Se os codewords são próximos entre eles, falhas na deteção devem ocorrer
Bons códigos devem maximizar a separação entre os codewords
Good distance
properties
Checagem de paridade bidimensional
1 0 0 1 0 0
0 1 0 0 0 1
1 0 0 1 0 0
1 1 0 1 1 0
1 0 0 1 1 1
Fila final consiste de bits de checagem para cada coluna
Última coluna tem bits de checagem para cada fila
Mais bits de paridade para melhorar a abrangência Acomodar a informação como colunas Adicionar paridade simples a cada coluna Adicionar uma coluna final de paridade
1 0 0 1 0 0
0 0 0 1 0 1
1 0 0 1 0 0
1 0 0 0 1 0
1 0 0 1 1 1
1 0 0 1 0 0
0 0 0 0 0 1
1 0 0 1 0 0
1 0 0 1 1 0
1 0 0 1 1 1
1 0 0 1 0 0
0 0 0 1 0 1
1 0 0 1 0 0
1 0 0 1 1 0
1 0 0 1 1 1
1 0 0 1 0 0
0 0 0 0 0 1
1 0 0 1 0 0
1 1 0 1 1 0
1 0 0 1 1 1
Dois erros Um erro
Tres erros 4 erros(undetectable)
Capacidade de detectar erro
1, 2, ou 3 erros são sempre
detectados; não todos os padrões
>4 podem ser detectados
Outros erros de deteção Muitas aplicações requerem taxas baixas de erro São necessários códigos que identifiquem a maioria
dos erros Os codigos de paridade simples não identificam
erros suficiêntes Códigos bidimensionais requerem muitos bits de
checagem Na prática são usados os seguintes códigos :
Internet Check Sums CRC Polynomial Codes
Internet Checksum Vários protocolos de Internet (e.g. IP, TCP, UDP)
usam bits de checagem para detectar erros no cabeçalho IP
Um checksum é calculado para conteúdos do cabeçalho é colocado em um campo
O Checksum é recalculado em cada roteador – fácil de implementar em sw
Seja o header com L 16-bit words, b0, b1, b2, ..., bL-1
O algoritmo adiciona um checksum de 16-bit bL
O checksum bL é calculado assim: Cada palavra de16-bit é um inteiro, encontrar x = b0 + b1 + b2+ ...+ bL-1 modulo 216-1 O checksum é dado por: bL = - x modulo 216-1 Então, os cabeçalhos devem satisfazer o seguinte
padrão : 0 = b0 + b1 + b2+ ...+ bL-1 + bL modulo 216-1 O calculo do checksum é feito em software usando-se
aritmética de complemento a um
Cálculo do checksum
Internet Checksum: Exemplo Usando aritmética módulo Assuma palavras 4-bit Usar aritmética mod 24-1 b0=1100 = 12 b1=1010 = 10 b0+b1=12+10=7 mod15 b2 = -7 = 8 mod15 Então b2=1000
Usando aritmética binária Notar que 16 =1 mod15 Então: 10000 = 0001 mod15 Bit inicial
b0 + b1 = 1100+1010 =10110 =10000+0110 =0001+0110 =0111 =7 Fazendo complemento a 1s b2 = -0111 =1000
Códigos Polinômicos
Polinomios em vez de vetores ou codewords Aritmética polinômica em vez de check sums Implementada usando-se circuitos shift-
register Também chamados de cyclic redundancy
check (CRC) Muitos padrões de comunicação usam
códigos polinômicos para deteção de erro Os códigos polinômicos são usados como
base para correção de erros
Adição
Multiplicação
Aritmética Binária polinômica Vetores binários mapeados em polinômios
(ik-1 , ik-2 ,…, i2 , i1 , i0) ik-1xk-1 + ik-2xk-2 + … + i2x2 + i1x + i0
(x7 + x6 + 1) + (x6 + x5) = x7 + x6 + x6 + x5 + 1
= x7 +(1+1)x6 + x5 + 1
= x7 +x5 + 1 dado que 1+1=0 mod2
(x + 1) (x2 + x + 1) = x(x2 + x + 1) + 1(x2 + x + 1)
= (x3 + x2 + x) + (x2 + x + 1)
= x3 + 1
Divisão Divisão com números decimais
32
35 ) 1222 3
105 17 2
4
140 divisor
quociente
resíduo
dividendo 1222 = 34 x 35 + 32
dividendo = quociente x divisor +resíduo
Divisão polinômial x3 + x + 1 ) x6 + x5
x6 + x4 + x3
x5 + x4 + x3
x5 + x3 + x2
x4 + x2
x4 + x2 + x x
= q(x) quociente
= r(x) residuo
divisor dividendo
+ x + x2 x3
Note: Grau de r(x) é menor que o grau do divisor
Codificação Polinômial O código tem um polinômio gerador de grau n–k
k bits de informação definem o grau do polinômio k – 1
Encontrar o residuo de maior grau n – k – 1
g(x) ) xn-k i(x) q(x)
r(x) xn-ki(x) = q(x)g(x) + r(x)
Definir um código polinômico de grau n – 1
b(x) = xn-ki(x) + r(x) n bits k bits n-k bits
g(x) = xn-k + gn-k-1xn-k-1 + … + g2x2 + g1x + 1
i(x) = ik-1xk-1 + ik-2xk-2 + … + i2x2 + i1x + i0
Codeword transmitido: b(x) = x6 + x5 + x b = (1,1,0,0,0,1,0)
1011 ) 1100000 !1110!
1011!1110!1011!1010!1011!
010!
x3 + x + 1 ) x6 + x5
x3 + x2 + x
x6 + x4 + x3
x5 + x4 + x3
x5 + x3 + x2
x4 + x2
x4 + x2 + x
x!
Exemplo: k = 4, n–k = 3 Gerador polinomial: g(x)= x3 + x + 1 Informação: (1,1,0,0) i(x) = x3 + x2
Codificador: x3i(x) = x6 + x5
O Padrão em codificação polinômica
Todos os codewords satisfazem o padrão seguinte :
Todos os codewords são múltiplos de g(x)! Receptor deve dividir a n-tupla recebida por g(x) e
verificar se o resíduo é zero Se o resíduo não é zero, a n-tupla não é um código
válido
b(x) = xn-ki(x) + r(x) = q(x)g(x) + r(x) + r(x) = q(x)g(x)
Implementação com shift-registers
1. Aceitar bits de informação ik-1,ik-2,…,i2,i1,i0
2. Adicionar n – k zeros aos bits de informação
3. Alimentar a sequencia para um circuito shift-register circuit que execute divisão polinomial
4. Depois de n shifts, o shift register contém o resíduo
Clock Input Reg 0 Reg 1 Reg 2 0 - 0 0 0 1 1 = i3 1 0 0 2 1 = i2 1 1 0 3 0 = i1 0 1 1 4 0 = i0 1 1 1 5 0 1 0 1 6 0 1 0 0 9 0 0 1 0 Check bits: r0 = 0 r1 = 1 r2 = 0
r(x) = x
Circuito de divisão
Reg 0 + +
Codificador para g(x) = x3 + x + 1
Reg 1 Reg 2 0,0,0,i0,i1,i2,i3
g0 = 1 g1 = 1 g3 = 1
Padrões não detectáveis
e(x) tem 1s em locais de erro & 0s em outras partes Receptor divide o polinomio recebido R(x) por g(x) Mancha cega: Se e(x) é múltiplo de g(x), que é, e(x)
um codework não zero, então R(x) = b(x) + e(x) = q(x)g(x) + q’(x)g(x) O conjunto de polinômios de erro não detectáveis é
um conjunto de códigos polinômicos não zero Escolher o gerador polinômico de tal forma que os
padrões de erro sejam detectados
b(x)
e(x)
R(x)=b(x)+e(x) + (Receptor) (Transmissor)
Erro polinômial (Canal)
Projetando bons códigos polinômicos Selecionar o gerador polinomial de tal forma que os
padrões de erro não sejam múltiplos de g(x) Detectar erros simples
e(x) = xi para um erro no local i + 1 Se g(x) tem mais de um termo, não pode ser dividido por xi
Detectando erros duplos e(x) = xi + xj = xi(xj-i+1) em que j>i Se g(x) tem mais de um termo, não pode ser dividir xi
Se g(x) é uma primitiva polinomial, não pode dividir xm+1 para todos os m<2n-k-1 (É preciso manter o tamanho do codeword menor que 2n-k-1)
Polinomios primitivos podem ser encontrados em livros de teoria de codificação
Projetando bons códigos polinomiais
Deteção de número impar de erros Suponha que todos os codewords polinomiais tem
um número par 1s, então todos os erros ímpares podem ser identificados
Da mesma forma, b(x) é avaliado em x = 1 e é zero pois b(x) tem um número par de 1s
Isto implica que x + 1 deve ser um fator para todos os b(x)
Escolha g(x) = (x + 1) p(x) em que p(x) é primitiva
Gerador Padrão de Polinomios
CRC-8:
CRC-16:
CCITT-16:
CCITT-32:
CRC = cyclic redundancy check
HDLC, XMODEM, V.41
IEEE 802, DoD, V.42
Bisync
ATM = x8 + x2 + x + 1
= x16 + x15 + x2 + 1 = (x + 1)(x15 + x + 1)
= x16 + x12 + x5 + 1
= x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1