定点数概念与术语
定点数据类型
在数字硬件中,数值以二进制字的形式存储。二进制字是一段固定长度的比特序列(由 1 和 0 组成)。数据类型定义了硬件组件或软件函数如何解释这一串 1 和 0。
二进制数可以表示为浮点型或定点型数据类型。在本节中,我们将讨论许多与定点数、数据类型和数学相关的术语和概念。
定点数据类型的特征包括字长(以位为单位)、二进制小数点的位置,以及数值的符号性(可以是有符号的,也可以是无符号的)。有符号数值和数据类型可以表示正值和负值,而无符号数值和数据类型只能表示大于或等于零的值。
二进制点的位置是用于对定点值进行缩放和解释的依据。
例如,一个广义定点数(有符号或无符号)的二进制表示如下所示:

其中
bi 是第 i 个二进制位。
wl 表示二进制字的位数,也称为字长。
bwl –1 是最显著位 (MSB) 的位置。在带符号的二进制数中,该位是符号位,用于指示该数是正数还是负数。
b0 表示最低有效位 (LSB) 的位置。二进制字中的这一位可以表示最小的值。LSB 的权重由以下公式给出:
其中,fractionlength 表示小数点右侧的位数。
小数点左侧的位是整数位和/或符号位,小数点右侧的位是小数位。二进制小数点左侧的位数称为整数长度。在此示例中,二进制小数点位于最低有效位 (LSB) 左侧四个位置处。因此,该数值被认为具有四个小数位,即小数长度为四。
定点数据类型可以是有符号的,也可以是无符号的。
带符号的二进制定点数通常采用以下三种表示方式之一:
符号/绝对值 - 有符号定点数或浮点数的表示形式。在符号/绝对值表示法中,二进制字中的一个比特总是专用的符号位,而该字的其余比特则用于编码数的绝对值。使用符号/绝对值表示法进行取反,是指将符号位从 0(正)翻转为 1(负),或者从 1 翻转为 0。
一补码
二进制补码 - 二进制补码是带符号定点数最常见的表示法。有关详细信息,请参阅二进制补码。
无符号定点数只能表示大于或等于零的数值。
缩放
在 [斜率偏移] 表示法中,定点数可按照以下方案进行编码:
其中斜率可表示为
术语斜率调整有时被用作分数斜率的同义词。
在最简单的情况下,斜率 = 1,偏置 = 0。对于纯整数(如 int8)以及真正的浮点类型 single 和 double 而言,缩放操作总是非常简单的。
该整数有时被称为存储整数。这是原始二进制数,其中假定二进制小数点位于该二进制数的最右侧。在系统工具箱中,索引的负值通常被称为分数长度。
斜率和偏移量共同决定了定点数的缩放比例。在零偏移的数值中,只有斜率会影响缩放。仅通过二进制小数点位置进行缩放的定点数,等同于 Fixed-Point Designer™ [斜率偏移] 表示法中偏移量为零、斜率调整量为一的数值。这被称为“仅二进制点缩放”或“2 的幂缩放”:
或
在系统工具箱软件中,您可以通过指定量值的字长和小数位长,为许多模块的输出或参数定义定点数据类型和缩放比例。“字长”和“小数位数”共同定义了仅含二进制小数点的信号的全部数据类型和量程信息。
所有支持定点数据类型的系统工具箱模块均支持仅采用二进制点缩放的信号。许多不执行算术运算、仅对数据进行重新排列的定点模块(例如“延迟”和“矩阵转置”),也支持采用 [斜率偏移] 缩放方式的信号。
精度与范围
在仿真中为各模块选择定点数据类型和缩放因子时,必须注意其精确率和范围,以便判断是否会调用舍入方法,或者是否会发生溢出。
范围
范围是指固定小数点数据类型和缩放比例所能表示的数值范围。下图展示了字长为 wl、缩放因子为 S、偏移量为 B 的二进制补码定点数所能表示的数值范围:

对于任何数据类型的有符号和无符号定点数,不同的位模式数量均为 2wl。
例如,在二进制补码中,除了零之外还必须表示负数,因此最大值是 2wl–1。由于零只有一种表示形式,因此正数和负数的个数是不相等的。这意味着 -2wl–1 存在表示,但 2wl–1 则不存在:

全范围是指某种数据类型的最大范围。对于浮点类型,其取值范围为 –∞ 到 ∞。对于整数类型,其完整范围是指该类型所能表示的最小整值到最大整值(有限)之间的范围。例如,对于有符号的 8 位整数,其取值范围为 -128 到 127。
溢出处理. 由于定点数据类型表示的数值属于有限范围,因此如果运算结果大于或小于该范围内的数值,就会发生溢出。
System 工具箱软件不允许您在运行时向数据类型添加保护位以避免溢出。保护位是指在硬件寄存器或软件仿真中,添加在二进制字高位端的额外位,用于确保在发生溢出时不会丢失任何信息。任何保护位都必须在模型初始化时进行分配。不过,该软件确实允许您对溢出数据进行饱和或折行处理。饱和度将正数溢出表示为所用范围内的最大正数,将负数溢出表示为所用范围内的最大负数。循环溢出利用模运算,将溢出的数值重新转换回该数据类型的可表示范围内。有关详细信息,请参阅模运算。
精度
定点数的精确率是指其数据类型和量纲所能表示的相邻值之间的差异,该差异等于其最低有效位的值。最低有效位的值,以及由此决定的该数的精确率,由小数位数决定。固定小数点值的表示精确率可达其数据类型和缩放因子精确率的半部分。“分辨率”一词有时被用作该定义的同义词。
例如,二进制小数点右侧有 4 位的定点表示法,其精确率为 2-4 或 0.0625,这正是其最低有效位的值。在此数据类型和量程范围内,任何数值均可表示为精确率 (2-4)/2 或 0.03125 的数值,即精确率的半部分。这是一个用有限精确率表示数的示例。
舍入模式. 当使用有限精确率表示数值时,并非可用范围内的每个数值都能被精确表示出来。如果某个数值无法通过指定的数据类型和精度精确表示,则将其四舍五入为一个可表示的数值。尽管在舍入运算中总会损失精确率,但该运算的开销以及由此引入的偏差程度取决于舍入模式本身。为了让您在成本与偏差之间的权衡中拥有更大的灵活性,DSP System Toolbox™ 软件目前支持以下舍入模式:
向上将计算结果向正无穷大方向舍入到最接近的可表示数值。
收敛将计算结果四舍五入为最接近的可表示数值。如果出现结值,收敛会将结果四舍五入到最接近的偶数。这是工具箱提供的偏置最小的舍入模式。
向下舍入相当于截断运算,它将计算结果向负无穷大方向舍入到最接近的可表示数值。截断运算会导致数值中一个或多个最低有效位被舍弃。
最接近值将计算结果四舍五入为最接近的可表示数值。出现结值时,最接近值会向正无穷大方向舍入到最接近的可表示数值。
舍入将计算结果四舍五入为最接近的可表示数值。当出现平局时,舍入会将正数向正无穷大方向舍入到最接近的可表示数值,并将负数向负无穷大方向舍入到最接近的可表示数值。
最简会使用那种向生成的代码中添加最少额外舍入代码的舍入模式(向下舍入或向零)对计算结果进行舍入。有关详细信息,请参阅Use Simplest Rounding for Efficient Generated Code (Fixed-Point Designer)。
向零将计算结果向零的方向四舍五入到最接近的可表示数值。
要了解这些舍入模式的详细信息,请参阅舍入模式 (Fixed-Point Designer)。