Академический Документы
Профессиональный Документы
Культура Документы
Introduc
ao
O presente trabalho tem como objectivo a geracao de uma sequencia binaria para Cyclic
Redundancy Check, ou simplesmente C.R.C., de uma sequencia binaria arbitraria.
Tendo em conta as liberdades concedidas no enunciado do trabalho e uma questao de
contexto realista, construiu-se a simulacao no seguinte contexto:
Para conferir realismo `a simulacao, utilizou-se a simulacao realizada num trabalho
anterior, o modulador para gerar a sequencia binaria que vai servir de base para o
calculo do C.R.C.;
No mesmo esprito do ponto anterior, o programa gera uma copia da sequencia original
introduzindo-lhe um n
umero de erros definido pelo utilizador em posicoes aleatorias
da cadeia binaria;
Por fim, as duas sequencias sao comparadas e apresentadas bem como a conclusao
dessa comparacao.
O algoritmo para gerar a sequencia binaria para C.R.C. e bastante simples na practica
mas algo complexo de explicar. Basicamente existe um polinomio binario escrito sob a forma
de modulo 2 a que podemos chamar o polinomio gerador ou polinomio C.R.C.. Atraves da
sequencia binaria que se quer analisar e deste polinomio realiza-se iterativamente o seguinte
conjunto iterativo de operacoes:
Sempre que o bit mais significativo da cadeia e igual a 1, o programa executa sequencialmente a operacao de XOR entre os bits da sequencia original e os bits da sequencia
do polinomio binario C.R.C.;
Caso contrario, a cadeia permanece inalterada, o polinomio desloca-se ao longo da
cadeira binaria e o processo comparativo recomeca com o proximo bit mais significativo;
O processo iterativo continua ate que o u
ltimo bit da cadeia binaria coincida com o
seu homonimo do polinomio C.R.C..
1
Como um exemplo vale mais do que mil palavras, vou colocar aqui o exemplo dado na
aula teorica para visualizar melhor o processo iterativo propriamente dito.
Cadeia Bin
aria: 1 1 0 1 0 0 1 1 1 0 1 1 0 0
Polin
omio CRC: 1 0 1 1
Algoritmo:
1 1 0 1
1 0 1 1
0 1 1 0
1 0 1
0 1 1
1 0
0 1
1
0
0 0 1 1 1 0 1 1 0 0
0
1
1
1
0
0
0
0 1 1 1 0 1 1 0 0
0
1
1
1
0
1 1 1 0 1 1 0 0
1 1 1
1
0 1 1
1 0
0 1
1
0
0 1 1 0 0
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1 0 0
1
1
0
1
1
0
1
0 0
0
1
1
1
0
0
0
1
1
Implementac
ao
2.1
Script principal
Listing 1: crc.m
% Sistemas de Aquisio de Dados, TPC n o 8
% Andr Cunha, n o 53757, LEFT
10
clear;
% Inicializao das variveis
15
i = 0;
j = 0;
s i z e = 0;
errors = 0;
20
25
30
binary_sequence = crc_deltasigma();
% Sequncia da aula terica para efeitos de teste. Comentar em
% cima e descomentar em baixo para usar.
35
% binary_sequence = [1,1,0,1,0,0,1,1,1,0,1,1,0,0];
% O programa pede ao utilizador o polinmio CRC sob a forma de um
% vector coluna.
40
crc_pol = ...
input(Qual o polinomio de CRC (vector coluna)? [1,0,1,0,0]);
% Polinmio CRC da aula terica para efeitos de teste. Comentar em
% cima e descomentar em baixo para usar.
45
% crc_pol = [1,0,1,1];
% O programa pede o nmero de erros aleatrios a introduzir
% na sequncia.
50
s i z e = numel(binary_sequence);
60
65
70
error_position = corruption(1:errors);
% Cria-se ento uma cpia da sequncia binria original.
75
processed_sequence = binary_sequence;
% Caso existam erros,
i f errors > 0,
80
85
f o r j = 1 : errors,
i f processed_sequence(error_position(j)) == 0,
processed_sequence(error_position(j)) = 1;
e l s e processed_sequence(error_position(j)) = 0;
end
end
90
95
e l s e processed_sequence = binary_sequence;
end
% O programa chama a funo que calcula o CRC para cada uma das
% sequncias binrias (a original e a com erros).
100
105
ps_crc = crc_gen(processed_sequence,crc_pol);
% Ciclo de verificao que compara os dois CRC obtidos.
110
i f bs_crc == ps_crc,
disp(A sequencia foi processada sem erros)
e l s e disp(A sequencia foi processada com erros)
end
2.2
Fun
c
ao geradora da cadeia bin
aria
Listing 2: crc deltasigma.m
% Sistemas de Aquisio de Dados, TPC n o 8
% Andr Cunha, n o 53757, LEFT
10
15
out_dac = 0;
out_intg = 0;
out_comp = 0;
i = 0;
intervalo = 0;
pontos = 0;
% Inicializao das matrizes e vectores.
20
25
v = [];
x = [];
sequence = [];
%
%
%
%
%
30
%
%
%
%
40
x = 0 : intervalo/pontos : intervalo;
v = 2*(sin(2* pi *x*frq*10) + sin(2* pi *x*frq*5) + sin(2* pi *x*frq*2)...
+ cos(2* pi *x*frq*9) + cos(2* pi *x*frq*6) + cos(2* pi *x*frq*4));
45
50
55
60
65
75
80
out_comp = 0;
out_dac = -vref;
end
% Gera a sequncia binria iterativamente, guardando os valores
% de sada do comparador num vector.
85
sequence(i) = out_comp;
90
end
2.3
Fun
c
ao geradora da cadeia C.R.C.
Listing 3: crc gen.m
% Sistemas de Aquisio de Dados, TPC n o 8
% Andr Cunha, n o 53757, LEFT
% Programa que gera sequncias CRC para uma dada sequncia binria
% e um dado polinmio CRC.
function crc = crc_gen(binary_sequence,crc_pol)
10
15
20
25
30
35
%
%
%
%
%
%
%
%
%
f o r l = 1 : s i z e - (crc_dim - 1),
% Sempre que o bit mais significativo for igual a 1,
i f y(l) == 1,
40
45
end
50
55
end
% Trunca-se a sequncia CRC obtida de acordo com o tamanho do
% polinmio CRC (eliminam-se os zeros esquerda).
60
crc = y( s i z e - (crc_dim - 1) : s i z e );
% Faz-se output do CRC obtido no ecr.
65
10