본문내용
==================crc_16========================
for(i=0;i
Crc_data[i]=crc_16[0];
//data 뒤2-byte를 crc_16[0],[1]으로 채움
Crc_data[i+1]=crc_16[1];
for(i=0;i
//data_size*8만큼 연산(bit_size)
{
if((int)Crc_data[0]>=128)
//data의 맨 앞bit가 1인지 판단
{
for(j=0;j
//data를 byte단위로 1bit씩 shift
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
//1로 채움
else Crc_data[j]=(Crc_data[j]<<1)&0xfe; //0으로 채움
}
Crc_data[0]=Crc_data[0]^crc[0]; //crc 연산
Crc_data[1]=Crc_data[1]^crc[1]; //crc 연산
}
else //data의 맨 앞bit가 0이면
{
for(j=0;j
//data를 byte단위로 1bit씩 shift
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
else Crc_data[j]=(Crc_data[j]<<1)&0xfe;
}
}
}
crc_16[2]=Crc_data[0];//crc_16 결과 저장
crc_16[3]=Crc_data[1];//crc_16 결과 저장
//=====================crc_2========================
for(i=0;i
//crc_data로 errer_data이동
Crc_data[i]=crc_2[0];
//data 뒤2-byte를 crc_2[0],0x00으로 채움
Crc_data[i+1]=0x00;
for(i=0;i
{
if((int)Crc_data[0]>=128)
//data의 맨 앞bit가 1인지 판단
{
for(j=0;j
//data를 byte단위로 1bit씩 shift
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
//1로 채움
else Crc_data[j]=(Crc_data[j]<<1)&0xfe; //0으로 채움
}
Crc_data[0]=Crc_data[0]^crc[2];//crc 연산
}
else //data의 맨 앞bit가 0이면
{
for(j=0;j
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
else Crc_data[j]=(Crc_data[j]<<1)&0xfe;
}
}
}
crc_2[1]=Crc_data[0]; //crc_2 결과 저장
//================parity bit check==================
for(i=0;i
for(i=0;i
for(i=0;i
check_bit=0x00;
for(j=0;j<8;j++)
check_bit+=((enc[i]>>j)&0x01);
if((check_bit%2)==1){ //error검사
dec[i]=(enc[i]);
dec[i]=dec[i]>>1;
}
else
{
dec[i]=\'X\'; //error 발견된 곳에 \'X\'치환
parity_num[0]=parity_num[0]+1;
}
}
//======================print=======================
printf(\"\\n===== input data =====\\n\");
//input data를 비트단위로 출력
for(i=0;i
{
if((int)sentence[i/8]>=128)printf(\"1\");
else printf(\"0\");
sentence[i/8]=sentence[i/8]<<1;
}
printf(\"\\n===== error data =====\\n\");
//error data를 비트단위로 출력
for(i=0;i
{
if((int)Error_data[i/8]>=128)printf(\"1\");
else printf(\"0\");
Error_data[i/8]=Error_data[i/8]<<1;
}
printf(\"\\n===== crc-16 =====\\n\"); //crc-16
if((int)crc_16[2]==0)
{
if((int)crc_16[3]==0)printf(\"No error \\n\");
else printf(\"error2 \\n\");
}
else printf(\"error1 \\n\"); //error발견시 error1 출력
printf(\"\\n ===== crc-2 =====\\n\");
if((int)crc_2[1]==0)printf(\"No error \\n\"); //crc-2
else printf(\"error \\n\"); //error발견시 error 출력
printf(\"\\n===== parity bit =====\\n\");
for(i=0;i
printf(\"\\n\");
printf(\"\\n전체 에러 %d byte중 %d byte 에러 발견\\n\",parity_number, parity_num[0]);
}
float Uniform()
{
float rv;
rv=(float)rand()/(float)RAND_MAX;
return rv;
}
결과 1
결과 2
for(i=0;i
//data 뒤2-byte를 crc_16[0],[1]으로 채움
Crc_data[i+1]=crc_16[1];
for(i=0;i
{
if((int)Crc_data[0]>=128)
//data의 맨 앞bit가 1인지 판단
{
for(j=0;j
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
//1로 채움
else Crc_data[j]=(Crc_data[j]<<1)&0xfe; //0으로 채움
}
Crc_data[0]=Crc_data[0]^crc[0]; //crc 연산
Crc_data[1]=Crc_data[1]^crc[1]; //crc 연산
}
else //data의 맨 앞bit가 0이면
{
for(j=0;j
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
else Crc_data[j]=(Crc_data[j]<<1)&0xfe;
}
}
}
crc_16[2]=Crc_data[0];//crc_16 결과 저장
crc_16[3]=Crc_data[1];//crc_16 결과 저장
//=====================crc_2========================
for(i=0;i
Crc_data[i]=crc_2[0];
//data 뒤2-byte를 crc_2[0],0x00으로 채움
Crc_data[i+1]=0x00;
for(i=0;i
if((int)Crc_data[0]>=128)
//data의 맨 앞bit가 1인지 판단
{
for(j=0;j
{
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
//1로 채움
else Crc_data[j]=(Crc_data[j]<<1)&0xfe; //0으로 채움
}
Crc_data[0]=Crc_data[0]^crc[2];//crc 연산
}
else //data의 맨 앞bit가 0이면
{
for(j=0;j
if((int)Crc_data[j+1]>=128)Crc_data[j]=(Crc_data[j]<<1)|0x01;
else Crc_data[j]=(Crc_data[j]<<1)&0xfe;
}
}
}
crc_2[1]=Crc_data[0]; //crc_2 결과 저장
//================parity bit check==================
for(i=0;i
for(j=0;j<8;j++)
check_bit+=((enc[i]>>j)&0x01);
if((check_bit%2)==1){ //error검사
dec[i]=(enc[i]);
dec[i]=dec[i]>>1;
}
else
{
dec[i]=\'X\'; //error 발견된 곳에 \'X\'치환
parity_num[0]=parity_num[0]+1;
}
}
//======================print=======================
printf(\"\\n===== input data =====\\n\");
//input data를 비트단위로 출력
for(i=0;i
if((int)sentence[i/8]>=128)printf(\"1\");
else printf(\"0\");
sentence[i/8]=sentence[i/8]<<1;
}
printf(\"\\n===== error data =====\\n\");
//error data를 비트단위로 출력
for(i=0;i
if((int)Error_data[i/8]>=128)printf(\"1\");
else printf(\"0\");
Error_data[i/8]=Error_data[i/8]<<1;
}
printf(\"\\n===== crc-16 =====\\n\"); //crc-16
if((int)crc_16[2]==0)
{
if((int)crc_16[3]==0)printf(\"No error \\n\");
else printf(\"error2 \\n\");
}
else printf(\"error1 \\n\"); //error발견시 error1 출력
printf(\"\\n ===== crc-2 =====\\n\");
if((int)crc_2[1]==0)printf(\"No error \\n\"); //crc-2
else printf(\"error \\n\"); //error발견시 error 출력
printf(\"\\n===== parity bit =====\\n\");
for(i=0;i
printf(\"\\n전체 에러 %d byte중 %d byte 에러 발견\\n\",parity_number, parity_num[0]);
}
float Uniform()
{
float rv;
rv=(float)rand()/(float)RAND_MAX;
return rv;
}
결과 1
결과 2
소개글