III-2 Cyclic Redundancy Check 1 Dezembro de 2010 ISEL-DEETC- 1
Sumário 1. Códigos cíclicos 2. Polinómio gerador. CRC 1. Cálculo dos bits de paridade 2. Verificação dos bits de paridade 4. Divisão de polinómios 1. Utilização do MATLAB 5. Aplicações 6. Bibliografia 7. Exercícios ISEL-DEETC- 2
Códigos Cíclicos Os códigos cíclicos são uma sub-classe dos códigos lineares de bloco Linear: o vector nulo pertence ao código; a soma modular de duas palavras do código é ainda uma palavra do código Bloco: todas as palavras têm a mesma dimensão de n bits Nos códigos cíclicos tem-se que qualquer rotação cíclica de qualquer ordem sobre uma palavra de código é ainda uma palavra de código m c 00 000 Exemplo: código de bit de paridade par,2 01 011 10 101 11 110
Códigos Cíclicos Os códigos lineares de bloco são estabelecidos pela matriz geradora G A partir de k palavras de código geram-se as 2 k palavras que constituem o código c é vector de dimensões 1x n; m é vector 1x k G é matriz k x n; c = m G No código cíclico todas as palavras c são geradas a partir do polinómio gerador g do código c = mg Todas as palavras de código são obtidas através do polinómio gerador
Códigos Cíclicos Tem-se c = mg em que: cx é a palavra de código polinómio de grau n-1 mx depende da mensagem polinómio de grau k-1 gx polinómio gerador de grau q As palavras de código c=[c n-1 c n-2. c 1 c o ] podem ser analisadas como polinómios: c = c n-1 n-1 + c n-2 n-2 +. +c 1 +c o O número de bits redundantes de paridade corresponde ao grau do polinómio gerador
Polinómio Gerador Determinado polinómio g de grau q é gerador de um código n,k, com q=n-k, caso seja factor de n +1 Ser factor de n +1 implica queresto 1 g n 0 Assim, a factorização do polinómio n +1 é importante, neste contexto Através desta factorização, conseguimos obter polinómios geradores para códigos de diferentes dimensões
Factorização de n +1 n +1 +1 Factorização =+1 2 ++1 Exemplos: +1, gera código,2 2 + +1, gera código,1 5 +1 =+1 4 + + 2 ++1 7 +1 =+1 + 2 +1 + +1 9 +1 =+1 2 + +1 6 + +1 +1, gera código 5,4 4 + + 2 ++1, gera código 5,1 + 2 +1 gera código 7,4 + +1 gera código 7,4......
Polinómios Geradores Código CRC4 Polinómio gerador g 4 + + 2 ++1 CRC7 7 + 6 + 4 +1 CRC12 12 + 11 + + 2 ++1 CRC16 16 + 15 + 2 +1 CRC-CCITT 16 + 12 + 5 +1 CRC2 2 + 26 + 2 + 22 + 16 + 12 + 11 + 10 + 8 + 7 + 5 + 4 + 2 ++1
Polinómios Geradores outros exemplos Polinómios Geradores
CRC Cyclic Redundancy Check Num código cíclico sistemático, as palavras têm a seguinte organização Os bits b, que constituem um polinómio de grau q-1 designam-se por CRC-Cyclic Redundancy Check A palavra de código é dada por resto g m m b m c q q q
CRC Cyclic Redundancy Check O CRC resulta do resto da divisão de polinómios entre: A mensagem deslocada de q bits para a esquerda O polinómio gerador do código CRC b m resto g q Dado que g tem grau q, resulta que b terá grau q-1, sendo constituído por q bits Assim, temos palavra de código com n bits k de mensagem e q de paridade
CRC Cyclic Redundancy Check Exemplo de cálculo do CRC para código 7,4 m= +1=[1 0 0 1] g= + 2 +1=[1 1 0 1] 1 resto 1 1 resto resto 2 6 2 g m b CRC q 1. 1 b m c 1 011] [10 01 1 6
CRC Cyclic Redundancy Check Exemplo de cálculo do CRC para código 7,4 m= +1=[1 0 0 1] g= + 2 +1=[1 1 0 1] 6 CRC b resto 2 1 Em MATLAB: uso da função deconv que realiza a divisão de polinómios 1 >> mq = [1 0 0 1 0 0 0]; >> g = [1 1 0 1]; >> [q, r] = deconv mq, g; >> modq,2 ans = 1 1 1 1 >> modr,2 ans = 0 0 0 0 0 1 1
CRC Cyclic Redundancy Check O descodificador, em modo de detecção calcula o síndroma s Dado que c=mg, tem-se que qualquer palavra de código é factor do polinómio gerador Seja y = c + e a palavra recebida, em que e é o padrão de erro Caso e seja nulo o síndroma é nulo Caso e seja não nulo o síndroma é não nulo e depende do valor de e 0 resto resto resto g g m g c g y s resto resto resto g e g e g m g y s
CRC Cyclic Redundancy Check Na descodificador temos divisão de polinómios c s resto Recorrendo ao MATLAB, podemos usar a função deconv g Sejam c 6 1 g [10 01 011] [11 01] 2 1 >> c = [1 0 0 1 0 1 1]; >> g = [1 1 0 1]; >> [q, s] = deconvc, g; >> mods,2 ans = 0 0 0 0 0 0 0 Síndroma nulo Ausência de erros
CRC Cyclic Redundancy Check Introduzindo 1 erro no penúltimo bit na palavra c temos y c e 6 1 6 1 [10 01 0 01] g 2 1 >> c = [1 0 0 1 0 0 1]; >> g = [1 1 0 1]; >> [q, s] = deconvc, g; >> mods,2 ans = 0 0 0 0 0 1 0 Síndroma não nulo Erros detectados [11 01]
CRC - Cyclic Redundancy Check Tipicamente é utilizado em modo de detecção de erros Quando a distância mínima do código for maior ou igual a, também pode ser usado em modo correcção Tipicamente temos um número reduzido de bits de paridade calculado para elevado número de bits de mensagem n >> q > 1 O CRC tem elevada capacidade de detecção de erros, especialmente de burst de erros rajada de erros Um burst ou rajada de erros define-se como um bloco contíguo de bits recebidos em erro; o primeiro e último bit distam B bits entre si, sendo B o comprimento do burst
CRC - Cyclic Redundancy Check Elevada capacidade de detecção de erros: todos os burst de dimensão q ou menor uma fracção dos burst de dimensão q+1; a fracção é 1-2 -q-1 uma fracção dos burst de dimensão superior a q+1; a fracção é 1-2 -q todas as combinações de d min ou menos erros todos os padrões com número ímpar de erros, quando o gerador tem número par de coeficientes não nulos Por exemplo, para o código CRC7 com g= 7 + 6 + 4 +1 temos todos os burst de dimensão 7 ou menor 1-2 -q-1 = 1-2 -7-1 = 98,44 % dos burst de dimensão 8 1-2 -q = 1-2 -7 = 99,22 % dos burst de dimensão superior a 8 todos os padrões com número ímpar de erros
Aplicações Norma Ethernet 802. Rede Local - LAN Usa CRC2 2 bits / 4 bytes para verificação da integridade da trama; g= 2 + 26 + 2 + 22 + 16 + 12 + 11 + 10 + 8 + 7 + 5 + 4 + 2 ++1 O campo FCS-Frame Check Sequence no header da trama tem sempre 2 bits, independentemente da dimensão da trama A dimensão máxima da trama é 1518 bytes 12144 bits
Aplicações Norma Ethernet 802. g= 2 + 26 + 2 + 22 + 16 + 12 + 11 + 10 + 8 + 7 + 5 + 4 + 2 ++1 Existem sempre 2 bits de paridade A trama tem dimensão mínima e dimensão máxima; esta última é 1518 bytes 12144 bits; temos um código n, n-2 Distância mínima em função da dimensão da trama n n d min 007 12144 4 01-006 5 204-00 6 124-20 7 90-12 8 Fonte: J. Moreira and P. Farrell, Essentials of Error-Control Coding, 2006, John Wiley and sons. [Pág. 9]
Aplicações Codificador de fonte WinRar Usa CRC2 para verificação da integridade de cada ficheiro comprimido Antes de descomprimir o ficheiro, verifica a integridade do ficheiro comprimido cálculo do síndroma CRC2
Bibliografia Folhas de apoio A. Ferreira, Códigos detectores e correctores de erros C. Meneses Ribeiro, Comunicação de Dados, disponíveis na página da unidade curricular http://www.deetc.isel.ipl.pt/sistemastele/cm/ Livro J. Moreira and P. Farrell, Essentials of Error- Control Coding, 2006, John Wiley and sons. 22
Exercícios Considere o polinómio gerador g = 4 + + 2 + + 1 de código 10,6. a Apresente a palavra de código c, quando a mensagem é 1 0 0 0 0 1. b A palavra 1111111111 pertence ao código? Considere o polinómio gerador g = ++1 do código 7,4. a Quais das palavras 0000000, 1011000 e 0000011 pertencem ao código? b Apresente todas as palavras de código. ISEL-DEETC- 2
Exercícios Suponha uma transmissão digital em que são enviados os bits de informação 1010. Considere que o controlo de erros é realizado através de CRC com polinómio gerador g = + + 1. a Apresente a sequência binária transmitida. b Provoque um erro nesta sequência binária e ilustre o funcionamento da detecção de erros. Quanto tempo demora a transmissão de um ficheiro com 1 024 000 bytes, considerando a utilização de modulação 16-QAM, com tempo de símbolo Ts =10 μs, nos cenários: a ausência de códigos detectores e correctores de erros? b detecção de erros com código CRC7, estabelecido por g = 7 + 6 + 4 + 1, aplicado a blocos de mensagem com dimensão 1024 bits? ISEL-DEETC- 24