奇偶校验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验项目四:数据的校验(2学时)

一、实验目的:

1.了解数据的校验机制。

*2.掌握海明码校验实施过程(选做)。

*3.掌握循环冗余码校验实施过程(选做)。

二、实验要求:

1.设计一个程序模拟奇偶校验实施过程(提示:主函数、发送函数、传输函数、校验函数)。

首先奇偶校验过程的基本过程:奇偶校验位有两种类型:偶校验位与奇校验位。如果一组给定数据位中 1 的个数是奇数,那么偶校验位就置为1,从而使得总的 1 的个数是偶数。如果给定一组数据位中 1 的个数是偶数,那么奇校验位就置为1,使得总的 1 的个数是奇数。偶校验实际上是循环冗余校验的一个特例,通过多项式x + 1 得到1 位CRC。

*2.设计一个程序模拟海明码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。

*3.设计一个程序模拟循环冗余码校验实施过程(提示:主函数、发送函数、传输函数、校验函数、纠错函数)。

三、实验报告:

1.给出源程序和执行结果。

#include

#include

#include

void product();

void trans();

void pop();

int p1,p2;

int a[8]={0};

int main()

{

product();//产生一个随机的八位二进制的数

trans();//设置传输出错一位或者没有出错的情况

pop();//判断有无出错的情况

return 0;

}

void product()

{

int i,data;

int count1=0;

srand((unsigned)time(0));

data=0+rand()%128;//产生0-127的随机数

printf("随机的产生一个128以内的十进制数为%d\n",data); for(i=0;i<7;i++)

{

a[i]=data%2;

data=data/2;

}

for(i=0;i<7;i++)

{

if(a[i]==1)

count1++;

}

if(count1%2==0)//奇校验奇数个1校验位为0,偶数个1为1 a[7]=1;

else

a[7]=0;

p1=a[7];

printf("初始二进制校验位放在最高位它为:%d\n",p1);

printf("产生随机二进制数为");

/*

while(i>=0)

printf("%d",a[--i]);*/

for(i=7;i>=0;--i)

{

printf("%d",a[i]);

}

printf("\n");

}

void trans()

{

int i;

srand((unsigned)time(0));

i=0+rand()%9;//产生0-8的随机数

if(i==0)

printf("机器内部设置传输过程中没有出错\n");

else

{

a[i-1]=(a[i-1]==0)?1:0;

printf("传输过程将机器内部的数据进行了一位改动,改动位

为%d\n",i);

}

}

void pop()

{

int i,count2=0;

printf("接收数据为:");

for(i=7;i>=0;i--)

{

printf("%d",a[i]);

}

printf("\n");

//求接收数据的偶校验位

for(i=6;i>=0;i--)

{

if(a[i]==1)

count2++;

}

if(count2%2==0)

p2=1;

else

p2=0;

printf("接收数据计算出的校验位为:%d\n",p2);

if(p2!=a[7])

printf("通过校验位P1与P2的比较得出传输过程中数据出错了。

\n");

else

printf("通过校验位P1与P2的比较得出在传输的过程中数据没有出错!\n");

}

相关文档
最新文档