《奇偶校验_校验和实验_2.docx》由会员分享,可在线阅读,更多相关《奇偶校验_校验和实验_2.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、奇偶校验_校验和实验实验5-1纠错与检错1.实验内容读程序,在所有红色的“#后面添加解释,讲明程序的作用2.实验题目1奇偶校验码在原始形式上增加一个附加比特位,即奇偶校验位,使最后整个形式中1的个数为奇数(奇校验)或偶数(偶校验)。本程序用到列表、字符串合并、取模等概念。code=input(Pleaseinputa7-bit-binarycode:)a=0#for循环作用是什么foriinrange(0,6,1):ifcodei=1:a=a+1print(Afteroddparitycheckingthecodeis:)ifa%2=0:print(code+1)#这句做了什么else:pri
2、nt(code)#这句做了什么print(Afterevenparitycheckingthecodeis:)#下面if.else作用是什么ifa%2=0:print(code)else:print(code+1)(2)垂直水平奇偶校验如下列图所示,14个字符纵向排列构成一个数据块,每个字符占据一列,低位比特在上,高位比特在下,用b8第8位作为垂直奇偶校验位,各字符的同一比特位构成一行,每一行的最右边一位作为水平奇偶校验位,这里在垂直和水平方向均采用偶校验。#下面的函数做了什么defoddeven(l):a=0foriinrange(0,len(l),1):ifli=1:a=a+1ifa%2=
3、0:return0else:return1block=0*15,0*15,0*15,0*15,0*15,0*15,0*15,0*15foriinrange(0,14,1):vcode=input(Pleaseinputa7-bit-binarycode:)forjinrange(0,7,1):blockji=vcodejblock7i=oddeven(vcode)#这句做了什么hcode=0*14forjinrange(0,8,1):foriinrange(0,14,1):hcodei=blockjiblockj14=oddeven(hcode)#这句做了什么print(block)(3)循环
4、冗余校验任何一个二进制位串都能够用一个多项式来表示,多项式的系数只要0和1,n位长度的码C能够用下述n1次多项式表示:()n1n210CxCxCxCxC-=+n-1n-21例如位串1010001能够表示为x6+x4+1。数据后面附加上冗余码的操作能够用多项式的算术运算来表示。例如,一个k位的信息码后面附加上r位的冗余码,组成长度为n=k+r的码,它对应一个n1次的多项式C(x),信息码对应一个k1次的多项式K(x),冗余码对应一个r1次的多项式R(x),C(x)与K(x)和R(x)之间的关系知足:()()()rCxxKxRx=+由信息码生成冗余码的经过,即由已知的K(x)求R(x)的经过,也是
5、用多项式的算术运算来实现。其方法是:通过用一个特定的r次多项式G(x)去除xrK(x),即:()()rxKxGx得到的r位余数作为冗余码R(x)。其中G(x)称为生成多项式generatorpolynomial,是由通信的双方预先约定的。除法中使用模2减法无借位减,相当于作异或运算。要进行的多项式除法,只要用其相对应的系数进行除法运算即可。本例中,10位二进制信息位串对应K(x)x9+x8+x6+x4+x3+x+1;CRC_4对应的G(x)x4+x+1,r=4,则生成位串为10011B=19。则xrK(x)=x13+x12+x10+x8+x7+x5+x4,对应位串0,R(x)的计算如图2-26
6、所示,得出的4位余数1110作为冗余码,于是实际传输的位串为0。参考程序:本程序用到函数,列表、字符串合并、取整、取模等概念。#这个函数做了什么defc2n(l):a=0foriinrange(0,len(l),1):a=a+int(li)*(2*(len(l)-1-i)returna#下面这个函数做了什么defn2c(d):b=whiled!=0:b=str(d%2)+bd=d/2returnbinformationcode=input(Pleaseinputa10-bit-binarycode:)code=informationcode+0000producecode=19p=0j=0xo
7、rcode=whilep加到数据后面,一起发送到接收方。上述计算中,1的补码和就是指带循环进位endroundcarry的加法,最高位有进位应循环进到最低位。接收方算法:将接收的数据包括校验和进行1的补码和累加运算,累加的结果再取反。若结果为0,表明传输正确;否则,表明传输有过失。如下图,在该例中,a是发送方的计算,、是3个数据。是它们的1的补码和,是的反码,即校验和。发送方将和数据一同发送,b是接收方的运算,假如没有传输过失,最后的结果应该为0。a发送方的运算b接收方的运算由于输入的信息串是字符,要用到异或运算,而该运算只能针对数值,因而需要有将字符转换成数值,已经将数值转换成字符的相关运算
8、,这里分别写了两个类型转换函数。实现1的补码和的关键就是要判定最高位能否有进位,对于16进制无符号数来讲,就是判定能否大于65535。本程序只给出了发送方计算校验和的经过,用到函数、列表、字符串合并、取整、取模等概念。defc2n(l):a=0foriinrange(0,len(l),1):a=a+int(li)*(2*(len(l)-1-i)returnadefn2c(d):b=whiled!=0:b=str(d%2)+bd=d/2returnbs=0foriinrange(0,3,1):code=input(pleaseinputa16-bit-binarycode:)s=s+c2n(code)#这个语句做了什么ifs65535:#下面语句做了什么s=s-65536+1s=s65535#这个语句做了什么print(n2c(s)