差错控制
差错的产生
- 信道所固有的、持续存在的随机热噪声
- 外界特定短暂原因产生的冲击噪声(主要)
编码技术实现差错控制主要分成两类
- 自动重传请求ARQ:接收端检测出差错的时候就设法通知发送端重发,直到接受到正确的码字为止
- 前项纠错FEC:接收端不仅仅可以发现错误,还可以知道哪里错了,进而进行纠错
检错编码
循环校验码CRC
循环校验码根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。
生成多项式:G(X)=X4+X3+1,要求出二进制序列10110011的CRC校验码。
1.G(X)=X4+X3+1,二进制比特串为11001;(有X的几次方,对应的2的几次方的位就是1)
2.因为校验码4位,所以10110011后面再加4个0,得到101100110000,用“模2除法”(其实就是亦或^)即可得出结果
3.CRC^101100110000得到101100110100。发送到接收端;
4.接收端收到101100110100后除以11001(以“模2除法”方式去除),余数为0则无差错
奇偶校验码
奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。奇偶校验码是奇校验码和偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个。
例:
原编码 | 奇校验 | 偶校验 |
---|---|---|
0000 | 0000 1 | 0000 0 |
0010 | 0010 0 | 0010 1 |
1100 | 1100 1 | 1100 0 |
1010 | 1010 1 | 1010 0 |
如果发生奇数个位传输出错,那么编码中1的个数就会发生变化. 从而校验出错误,要求从新传输数据
纠错编码
海明码
汉明码是一种具有纠错功能的校验码.本文简单地介绍汉明码的计算方法.
汉明码的目的是能够纠正一位误码.假设信息码共有 n 位,汉明码共有 r 位,那么总共的码长为 n + r 位.为能检测出 n + r 位编码中其中一位的错误,汉明码必须能够表示至少 n + r + 1 种状态,其中 n + r 种表示 n + r 位编码中有一位错误,另外还需要一种来表示整个编码正确无误.则汉明码的长度需要满足下列关系:
2 r >= n + r + 1
校验位的确定
k个校验位是通过对m+k位复合码字进行奇偶校验而确定的。
其中:P1位负责校验海明码的第1、3、5、7、…(P1、D1、D2、D4、…)位,(包括P1自己)
P2负责校验海明码的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括P2自己)
P3负责校验海明码的第4、5、6、7、…(P3、D2、D3、D4、…)位,(包括P3自己)
3、5、7、9、11的二进制编码的第一位为1,所以3、5、7、9、11号位参加第一位校验位,
类似:3、6、7、10、11号位参加2号位校验,5、6、7号位参加4号位校验,9、10、11号位参加8号位校验
汉明码的纠错方式实际上是对传送后的汉明码形成新的检测位P 根据P的状态 直接找出错误
因此可得到三个校验方程及确定校验位的三个公式:(根据规则进行校验 如果是配偶原则P=0 配奇原则P=1)
P1=B1⊕B3⊕B5⊕B7
P2=B2⊕B3⊕B6⊕B7
P3=B4⊕B5⊕B6⊕B7
例 唐 计原的一道例题
参考博客
1.https://www.cnblogs.com/attitudeY/p/6868899.html
2.https://www.cnblogs.com/bugutian/p/6221783.html
3.https://blog.csdn.net/u012532559/article/details/45307329