嵌入式系统设计师学习笔记⑨:校验码
嵌入式系统设计师学习笔记⑨:校验码
码距的定义:
一个编码系统的码距就是整个编码系统中任意(所有)两个码字(合法编码)的最小距离。
例如:要对A,B两个字母进行编码
若用1位长度的二进制编码,若A=1,B=0。这样A,B之间的最小码距为1。(因为只有1位不同) 若用2位长度的二进制编码,若A=11,B=00。这样A,B之间的最小码距为2。(因为有2位不同) 若A=11,B=01,则A,B之间的码距为1。(因为只有一位不同) 用竖式分析: A = 1 1 B = 0 1 对应位只有最高位不同(1位不同) 所以是1位码距 若A=100,B=011,则AA,B之间的码距为3。(因为有3位不同) 用竖式分析: A = 1 0 0 B = 0 1 1 对应位各不相同 所以是3位码距
码距存在的意义是为了检错和纠错。
若甲乙通信,采用A=1,B=0的编码方式。
甲发送给乙:AB→1,0,由于出错,编码变成了1,1或者0,0,此时乙方收到的信息就可能是AA或BB。
由于是1位码制,1,0在此系统中均合法,所以乙不知道系统出错,仍接收。
(无法检错和纠错)
若甲乙通信,采用A=11,B=00的编码方式。
甲发送给乙:AB→11,00,由于出错,编码变成了10,01。
由于是2位码制,10,01编码在此系统中均非法,所以乙知道系统出错了,但是乙不知道是A的编码出错还是B的编码出错,因为对于10来说A的第二位出错可以变成10,B的第一位出错也可以变成10。
(码距为2时,能够检1位错误,但是无法纠错即不知道是哪位出错)
若甲乙通信,采用A=111,B=000的编码方式。
甲发送给乙:AB→111,000,由于出错,编码可能变成了110,101,100,001,010,011。
由于是3位码制,110,101,100,001,010,011编码在此系统中均非法,所以乙知道系统出错了会丢弃该数据包,由于出错2位的概率较小,因此110,101,011码制都可被纠正为111码,100,001,010码制都可被纠正为000码。
(码距为3时,能够检1位错误,同时可以纠错1位)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
奇偶校验码:
通过在编码中增加一位校验码来使编码中的1的个数增加为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2
仅可检错,可检测1(奇数)位错
CRC(循环冗余校验码):
利用生成多项式为K个数据位产生r个校验位来进行编码其编码长度为:k + r
仅可检错,可检测多位错误
用到了模2运算法
海明码(汉明码):
①在数据位之间插入K个校验位,通过扩大码距来实现检查和纠错
②设数据位是n位,校验码是k位,则n和k必须满足以下关系:
2^k -1 >= n +k
可检错,且可纠1位错