奇偶校验_校验和实验

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

实验5-1纠错与检错

1.实验内容

读程序,在所有红色的“#”后面添加解释,说明程序的作用

2.实验题目

(1)奇偶校验码

在原始模式上增加一个附加比特位,即奇偶校验位,使最后整个模式中1的个数为奇数(奇校验)或偶数(偶校验)。

本程序用到列表、字符串合并、取模等概念。

code=input("Please input a 7-bit-binary code:")

a=0

# for 循环作用是什么

for i in range(0,6,1):

if code[i]=='1':

a=a+1

print("After odd parity checking the code is:")

if a%2==0:

print(code+'1') # 这句做了什么

else:

print(code) # 这句做了什么

print("After even parity checking the code is:")

# 下面 if .. else …作用是什么

if a%2==0:

print(code)

else:

print(code+'1')

(2) 垂直水平奇偶校验

如下图所示,14个字符纵向排列形成一个数据块,每个字符占据一列,低位比特在上,高位比特在下,用b8(第8位)作为垂直奇偶校验位,各字符的同一比特位形成一行,每一行的最右边一位作为水平奇偶校验位,这里在垂直和水平方向均采用偶校验。

# 下面的函数做了什么 def oddeven(l): a=0

for i in range(0,len(l),1): if l[i]=='1': a=a+1 if a%2==0: return '0' else:

return '1'

block=[['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['

0']*15]

for i in range(0,14,1):

vcode=input("Please input a 7-bit-binary code:") for j in range(0,7,1): block[j][i]=vcode[j]

block[7][i]=oddeven(vcode) # 这句做了什么 hcode=['0']*14

for j in range(0,8,1):

for i in range(0,14,1): hcode[i]=block[j][i]

block[j][14]=oddeven(hcode) # 这句做了什么 print(block)

(3)循环冗余校验

任何一个二进制位串都可以用一个多项式来表示,多项式的系数只有0和1,n 位长度的码C 可以用下述n -1次多项式表示:

()n 1n 210C x C x C x C x C --=++

++n-1n-21

例如位串1010001可以表示为x 6

+x 4

+1。

数据后面附加上冗余码的操作可以用多项式的算术运算来表示。例如,一个k 位的信息码后面附加上r 位的冗余码,组成长度为n=k+r 的码,它对应一个(n -1)次的多项式C(x),信息码对应一个(k -1)次的多项式K(x),冗余码对应一个(r -1)次的多项式R(x),C(x)与K(x)和R(x)之间的关系满足:

()()()r C x x K x R x =+ 由信息码生成冗余码的过程,即由已知的K(x)求R(x)的过程,也是用多项式的算术运

算来实现。其方法是:通过用一个特定的r 次多项式G(x)去除x r

K(x),即:

()

()

r x K x G x 得到的r 位余数作为冗余码R(x)。其中G(x)称为生成多项式(generator polynomial ),是由通信的双方预先约定的。除法中使用模2减法(无借位减,相当于作异或运算)。要进行的多项式除法,只要用其相对应的系数进行除法运算即可。

本例中,10位二进制信息位串对应K(x)=x 9+x 8+ x 6+x 4+ x 3

+ x+1;CRC_4对应的G(x)=

x 4+ x +1,r=4,则生成位串为10011B=19。则x r K(x)= x 13+x 12+ x 10+x 8+x 7+x 5+x 4 ,对应位串

11010110110000,R(x)的计算如错误!未找到引用源。所示,得出的4位余数1110作为冗余码,于是实际传输的位串为11010110111110。

参考程序:(本程序用到函数,列表、字符串合并、取整、取模等概念。) # 这个函数做了什么

def c2n(l): a=0

for i in range(0,len(l),1):

a=a+int(l[i])*(2**(len(l)-1-i)) return a

# 下面这个函数做了什么 def n2c(d): b = ''

while d!=0:

b = str(d%2)+b d = d//2 return b

informationcode=input("Please input a 10-bit-binary code:") code=informationcode+'0000' producecode=19 p=0 j=0

xorcode='' while p<14:

j=5-len(xorcode) # 下面语句做了什么

xorcode=n2c(c2n(xorcode+code[p:p+j-1])^producecode) p=p+j

print(informationcode+xorcode)

(4)校验和

校验和的算法流程如下: 发送方算法:

将待发送的数据划分成若干长度为16位的位串,每个位串看成是一个二进制数。 对这些16位的二进制数进行1的补码和累加运算,累加的结果再取反作为校验和,附

1 1 0 0 0 0 1 0 1 0

1 1 0 1 0 1 1 0 1 1 0 0 0 01 0 0 1 1

1 0 0 1 1 1 0 0 1 1 1 0 0 1 1

0 0 0 0 0 1 0 1 1 0

1 0 0 1 1

1 0 1 0 0 1 0 0 1 1

1 1 1 0

余数

相关文档
最新文档