海明码:
利用海明码检测并纠错,通过数据位后面增加几位比特验证数据有效性,指出数据出错时错误位置。
方法:
设信息位是K,冗余位是R,,构成K+R位码字,关系式有:2^r(2的r次方)>=k+r+1。
当k=7时,若要用海明码计算,则需要满足上式,r=4,,16>=7+4+1。。同理,知道冗余位,可以求得信息位。
当k=4时,即2^r=4+r+1,得r=3,需要三个冗余位,构成a6,![]()
a5,a4,a3,a2,a1,a0;在校验分别和时,a2,a1,a0分别和这些位构成不同的监督模式,若传输后没有错误,则三个监督模式的值与s2,s1,s0应该全为0,若传输有错,则其中某一位的差错可以和s2,s1,s0的对应关系:
s2s1s0 | 000 | 001 | 010 | 100 | 011 | 101 | 110 | 111 |
出错码 | 无措 | a0 | a1 | a2 | a3 | a4 | a5 | a6 |
当s2出错时:对应的有a2,,a4,a5,a6。s2=1,监督关系即:s2=a2+a4+a5+a6 注:+ 表示异或(后文一样)
当s1出错时:对应的有a1,,a3,a5,a6。。如上 s1=a1+a3+a5+a6
当s0出错时:对应的有a0,a3,a4,a6。。。如上 s0=a0+a3+a4+a6
当没有出错时:s2=0,s1=0,s0=0。。
有上得
a2=a4+a5+a6 a1=a3+a5+a6 a0=a3+a4+a6
知道信息位,,就可得冗余位,得到没海明码。
举例:
1.
信息码为:1010,根据2^r>=k+r+1得冗余位是3,a2=a4+a5+a6=0,,a1=a3+a5+a6=1,,a0=a3+a4+a6=0
因此海明码为:1010010.
2.
已知接受码为:0011101,,求发送端信息码。
冗余码是:101,,s2=a2+a4+a5+a6=0,s1=1,,s0=1;;即011,。通过上表对应关系查的a3处出错,所以信息码是:0010101。
crc循环冗余校验码:
crc是一种常用的检错码,在信息位的后面加一串冗余比特实现,将要发送的二进制比特当做当做多项式的系数,在发送前用预约的G(x)生成多项式对应的比特序列去除,在F(x)后面加0,求得余数多项式,这个多项式就是循环冗余校验码,然后把他附加到信息位,发送出去,在接收端同样用G(x)去除收到的比特序列,若能被整除,表示传输正确,否则,有错重传。
例子:
信息位:1011001,,可得F(x)=x^6+x^4+x^3+1..(其中,x^6表示x 的6次方)。。约定G(x)=x^4+x^3+1.。生成的比特序列为11001
然后用1011001除以11001可以得到1010,,冗余校验码为1010,,发送出去即:10110011010,,接收端接受到以后,把接收到的编码除以11001,,如果能整除,,表示接受没有出错,,反之,接受到的编码有错,需要重传。
注:学习视频资料来自:http://edu.51cto.com/lesson/id-7373.html