第一节 数据编码 二、浮点数的编码 构成:阶码E,尾数M,符号位S,基数R N = (-1)S×M×RE
规格化:为了在尾数中表示最多的有效数据位,为了数据表示的唯一性。 E的编码:移码 M的编码:原码或补码(尾数为补码时的规格化要求) R进制的含义:多个二进制位构成一组,代表一个R进制位(R为2的幂次) 机器零:尾数部分为0,特殊的数据编码(非规格) 浮点数的表示范围: 例:以R为基数,有p位阶码和m位二进制尾数代码的浮点数,阶码采用二进制正整数编码表示,求数值表示范围及可表示的数据个数。 解:最小规格化尾数:1/R 最大规格化尾数:1 - 2-m 最大阶码:2p - 1 最小阶码:0 最小值:1/R 最大值:![](http://master.csai.cn/fxzd/images/No00309_1_clip_image002_0000.gif) 规格化尾数个数为2m×(R-1)/R 可表示的数据个数为2p+m(R-1)/R +1。 注:本例中没有符号位,也没有考虑阶码为负的情况。如果考虑这些因素就要考虑阶码和尾数的编码方式。 浮点数的溢出:
![](http://master.csai.cn/fxzd/images/No00309_1_clip_image004_0000.gif) 浮点数标准(IEEE754) 三种格式:短实数、长实数、临时实数 无定义数据:发信号的S,不发信号的Q 无穷大:+INF, -INF 规格化数: (-1)s×1.f×2e-127 尾数为原码,阶码为特殊移码 非规格化数:(逐级下溢) (-1)s×0.f×2e-126 数值范围: IEEE754浮点数的范围如下表 表2-5 IEEE754浮点数的数值范围
格式 | 最小值 | 最大值 | 单精度 | E=1, M=0, 1.0×21-127 = 2-126 | E=254, f=.1111…, 1.111…1×2254-127 = 2127×(2-2-23) | 双精度 | E=1, M=0, 1.0×21-1023 =2-1022 | E=2046, f=.1111…, 1.111…1×22046-1023 =21023×(2-2-52) |
习题:15、16、19 三、检错码 数据校验码:分组码、卷积码 奇偶校验码 码距:两个合法代码对应位上编码不同的位数 奇偶校验码的原理:在编码中引入一定的冗余,增加代码的最小码距,使得编码中出现一个错误时就成为非法代码。 四、纠错码 线性码:任意两个合法码字求和可得到另一个合法码字。(奇偶校验码不是线性码) 海明码: 码长n=2m - 1 信息位数k=2m - m - 1 校验位数m= n - k 最小码距d = 3 例: 一种(7,4)海明码的定义为: c1 = x1 + x2 + x3 c2 = x2 + x3 + x4 c3 = x1 + x2 + x4 将这些信息位和校验位构成码字w,即 w = {x1,x2,x3,x4,c1,c2,c3}={w1,w2,w3,w4,w5,w6,w7}。 校验方程: w1 + w2 + w3 + w5 = 0 w2 + w3 + w4 +w6 = 0 w1 + w2 + w4 + w7 = 0 矩阵表示: H×W = ![](http://master.csai.cn/fxzd/images/No00309_1_clip_image006_0000.gif) = 0 H称为校验矩阵。 校正子: S = H×Y = H (W+E) = H×E 其中Y为接收的码字 校正表: 表2-6 (7,4)海明码校正表
e1 | e2 | e3 | e4 | e5 | e6 | e7 | s1 | s2 | s3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
循环码:线性码中若一个n位编码V = {v0,v1,v2,…,vn-1}是码C的一个码字,那么V向 右循环移动一位后的n位编码 V1 = {vn-1,v0,v1,…,vn-2}也是码C的一个码字。 码字多项式表示: V(x) = vn-1xn-1 + … + v1x + v0 循环码的特性:生成多项式可整除循环码多项式。 编码方法一:给定一个码字,生成相同信息位循环码的方法(求余法)
= Q(x) + ![](http://master.csai.cn/fxzd/images/No00309_1_clip_image012_0000.gif) xrB(x) = Q(x)G(x) + R(x) 等式两边加上R(x) xrB(x) + R(x) = Q(x)G(x) 见教材的例子 编码方法二:给定全部代码,求循环码的方法(生成多项式法) 例 对四位信息码1010进行CRC编码,生成多项式是G(x) = x3 + x + 1。 解:(1) 将4位信息码表示为多项式B(x): B(x) = x3 + x (2) 将信息码多项式与生成多项式相乘,得码字多项式: V(x) = B(x)G(x) = (x3+x)(x3+x+1) = x6 + x3+x2+x (3) 将码字多项式转换成代码表示,得CRC编码结果: 1001110 编码方法三:生成矩阵法
![](http://master.csai.cn/fxzd/images/No00309_1_clip_image014_0000.gif) 例:G(x) = x3 + x + 1,其生成矩阵是 G = ![](http://master.csai.cn/fxzd/images/No00309_1_clip_image016_0000.gif)
|