奇偶校验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");
}