Sei sulla pagina 1di 9

/* Correcao de erros para dados de 16 bits (D), utilizando 5 bits de paridade (P) */

/* Dado
D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0 */
/* Sindrome P4P3P2P1P0 */
/* Dado transmitido
P4 P3 P2 P1 P0 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6
D5 D4 D3 D2 D1 D0 */
/* dado recebido
PR4PR3PR2PR1PR0DR15DR14DR13DR12DR11DR10DR9DR8DR7DR6DR5DR4DR3DR
2DR1DR0 */
/* dado gerado no receptor G4 G3 G2 G1 G0 */
/* Mapa de Hammings */
/* |-----D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0-|
|P0
X
X
X
X X X
X |
|P1
X
X
X
X
X
X X
X X |
|P2
X
X
X X
X
X X
|
|P3
X
X
X
X
X
X
X X
|
|P4
X
X
X
X X
X
X
|
|-----------------------------------------------------------| */
/* Exemplo P4=D15xorD14xorD12xorD9xorD8xorD6xorD3
*/

/* No receptor criado um sindrome (F)


PR4PR3PR2PR1PR0
xor G4 G3 G2 G1 G0
= F4 F3 F2 F1 F0
*/
/* Tabela do sindrome (F)
Sindrome BIT COM ERRO
------------------------0 00000 Sem erro
1 00001 PR0
2 00010 PR1
3 00011 DR0
4 00100 PR2
5 00101 DR4
6 00110 DR1
7 00111 DR10
8 01000 PR3
9 01001 DR5
10 01010 DR7
11 01011 DR13
12 01100 DR2
13 01101 Mais de um erro
14 01110 DR11
15 01111 Mais de um erro
16 10000 PR4
17 10001 DR6
18 10010 DR8
19 10011 DR14
20 10100 DR9
21 10101 Mais de um erro
22 10110 Mais de um erro
23 10111 Mais de um erro

24
25
26
27
28
29
30
31
*/

11000
11001
11010
11011
11100
11101
11110
11111

Mais de
Mais de
DR15
Mais de
DR12
Mais de
Mais de
Mais de

um erro
um erro
um erro
um erro
um erro
um erro

/* Dado transmitido de 16 bits */


short D0 = 0;
short D1 = 0;
short D2 = 1;
short D3 = 1;
short D4 = 0;
short D5 = 0;
short D6 = 1;
short D7 = 1;
short D8 = 0;
short D9 = 0;
short D10 = 1;
short D11 = 1;
short D12 = 0;
short D13 = 0;
short D14 = 1;
short D15 = 1;
/* Paridade transmitida de 5 bits */
short P0;
short P1;
short P2;
short P3;
short P4;
/*Paridade acumulativa temporaria*/
short P;
/* Dado recebido de 16 bits */
short DR0 = 0;
short DR1 = 0;
short DR2 = 0; /* ERRO RECEBIDO */
short DR3 = 1;
short DR4 = 0;
short DR5 = 0;
short DR6 = 1;
short DR7 = 1;
short DR8 = 0;
short DR9 = 0;
short DR10 = 1;
short DR11 = 1;
short DR12 = 0;

short DR13 = 0;
short DR14 = 1;
short DR15 = 1;
/*Paridade recebida de 5 bits*/
short PR0;
short PR1;
short PR2;
short PR3;
short PR4;
/*Paridade calculada no receptor*/
short G0;
short G1;
short G2;
short G3;
short G4;
/*sindrome gerado*/
short F0;
short F1;
short F2;
short F3;
short F4;
/*Programa principal*/
void main()
{
/*Paridades no transmissor*/
/*P0*/
if(D0==D4)
{P=0;}
else
{P=1;}
if(P==D5)
{P=0;}
else
{P=1;}
if(P==D6)
{P=0;}
else
{P=1;}
if(P==D10)
{P=0;}
else
{P=1;}
if(P==D13)
{P=0;}
else
{P=1;}
if(P==D14)
{P=0;}

else
{P=1;}
P0=P;
/*P1*/
if(D0==D1)
{P=0;}
else
{P=1;}
if(P==D7)
{P=0;}
else
{P=1;}
if(P==D8)
{P=0;}
else
{P=1;}
if(P==D10)
{P=0;}
else
{P=1;}
if(P==D11)
{P=0;}
else
{P=1;}
if(P==D13)
{P=0;}
else
{P=1;}
if(P==D14)
{P=0;}
else
{P=1;}
if(P==D15)
{P=0;}
else
{P=1;}
P1=P;
/*P2*/
if(D1==D2)
{P=0;}
else
{P=1;}
if(P==D4)
{P=0;}
else
{P=1;}
if(P==D9)
{P=0;}
else
{P=1;}

if(P==D10)
{P=0;}
else
{P=1;}
if(P==D11)
{P=0;}
else
{P=1;}
if(P==D12)
{P=0;}
else
{P=1;}
P2=P;
/*P3*/
if(D2==D3)
{P=0;}
else
{P=1;}
if(P==D5)
{P=0;}
else
{P=1;}
if(P==D7)
{P=0;}
else
{P=1;}
if(P==D11)
{P=0;}
else
{P=1;}
if(P==D12)
{P=0;}
else
{P=1;}
if(P==D13)
{P=0;}
else
{P=1;}
if(P==D15)
{P=0;}
else
{P=1;}
P3=P;
/*P4*/
if(D3==D6)
{P=0;}
else
{P=1;}
if(P==D8)
{P=0;}

else
{P=1;}
if(P==D9)
{P=0;}
else
{P=1;}
if(P==D12)
{P=0;}
else
{P=1;}
if(P==D14)
{P=0;}
else
{P=1;}
if(P==D15)
{P=0;}
else
{P=1;}
P4=P;
/*Paridades recebidas no receptor*/
PR0=P0;
PR1=P1;
PR2=P2;
PR3=P3;
PR4=P4;
/* Paridades calculadas utilizando os dados recebidos*/
/*G0*/
if(DR0==DR4)
{P=0;}
else
{P=1;}
if(P==DR5)
{P=0;}
else
{P=1;}
if(P==DR6)
{P=0;}
else
{P=1;}
if(P==DR10)
{P=0;}
else
{P=1;}
if(P==DR13)
{P=0;}
else
{P=1;}
if(P==DR14)
{P=0;}
else

{P=1;}
G0=P;
/*G1*/
if(DR0==DR1)
{P=0;}
else
{P=1;}
if(P==DR7)
{P=0;}
else
{P=1;}
if(P==DR8)
{P=0;}
else
{P=1;}
if(P==DR10)
{P=0;}
else
{P=1;}
if(P==DR11)
{P=0;}
else
{P=1;}
if(P==DR13)
{P=0;}
else
{P=1;}
if(P==DR14)
{P=0;}
else
{P=1;}
if(P==DR15)
{P=0;}
else
{P=1;}
G1=P;
/*G2*/
if(DR1==DR2)
{P=0;}
else
{P=1;}
if(P==DR4)
{P=0;}
else
{P=1;}
if(P==DR9)
{P=0;}
else
{P=1;}
if(P==DR10)

{P=0;}
else
{P=1;}
if(P==DR11)
{P=0;}
else
{P=1;}
if(P==DR12)
{P=0;}
else
{P=1;}
G2=P;
/*G3*/
if(DR2==DR3)
{P=0;}
else
{P=1;}
if(P==DR5)
{P=0;}
else
{P=1;}
if(P==DR7)
{P=0;}
else
{P=1;}
if(P==DR11)
{P=0;}
else
{P=1;}
if(P==DR12)
{P=0;}
else
{P=1;}
if(P==DR13)
{P=0;}
else
{P=1;}
if(P==DR15)
{P=0;}
else
{P=1;}
G3=P;
/*G4*/
if(DR3==DR6)
{P=0;}
else
{P=1;}
if(P==DR8)
{P=0;}
else

{P=1;}
if(P==DR9)
{P=0;}
else
{P=1;}
if(P==DR12)
{P=0;}
else
{P=1;}
if(P==DR14)
{P=0;}
else
{P=1;}
if(P==DR15)
{P=0;}
else
{P=1;}
G4=P;
/*Calculo do sindrome F4 F3 F2 F1 F0*/
/*F0*/
if(PR0==G0)
{F0=0;}
else
{F0=1;}
/*F1*/
if(PR1==G1)
{F1=0;}
else
{F1=1;}
/*F2*/
if(PR2==G2)
{F2=0;}
else
{F2=1;}
/*F3*/
if(PR3==G3)
{F3=0;}
else
{F3=1;}
/*F4*/
if(PR4==G4)
{F4=0;}
else
{F4=1;}
}

Potrebbero piacerti anche