谈谈小数的表示方法之定点数

本文介绍了定点数在数字信号处理中的重要性,特别是在硬件芯片上的高效运算。定点数是一种固定小数点位置的数字表示方法,包括无符号和有符号定点数,涉及原码、反码和补码的概念。通过Q表示法和S表示法来描述定点数的规则,并举例说明如何将小数转换为定点数。定点数在工程应用中的优势在于其运算效率高和节省存储资源。

在数字信号处理中往往都需要进行大量的数字运算,比如,数字信号的解调,需要采集大量的IQ数据对其进行解调运算。在实际的研究和学习中我们一般会在操作系统中利用丰富的软件给我们提供的便捷的计算工具进行计算(Matlab、Python等),这可以很方便的处理我们所研究的数字信号。然而,学过计算机原理或者汇编语言的同学会清楚,数据的运算的最终是在计算机硬件上来完成的,我们在操作系统层面的数据运算往往意味着需要进行大量的资源的调度。虽然现在的计算机的性能已经非常的强大,但是对于面向应用的产品来说,其处理器性能往往和计算机不能相提并论。通常,在通信、图像等数字信号处理中,会采用硬件芯片的方式进行数据运算(DSP、FPGA等),通过这种硬件芯片上进行数字信号运算,可以很好的提高运算效率,这也在工程应用中广为采用的一种方式。在这些处理器中往往各种数据都是通过整数形式存储(比如,通信中的IQ数值的存储)。实际上,我们需要进行运算的数据大多都是小数,那么,该怎么解决呢?一般的我们可以通过定点数这种方式来表示小数。

什么是定点数

定点数英文名叫Fixed Point Number,其关键地方就在这两个字上面,即在表示小数数据时,把小数点的位置已经约定好固定在某个位置。与之对应的是浮点数,其小数点的位置不是固定的,关于浮点数先不做展开。

定数表示

在定点数中,小数点可以将数据分为整数和小数部分,因此我们可以约定小数点在数据中的不同位置,就可以表示不同大小和精度的小数。例如,当小数点位置约定在符号位和数值位之间,就表示纯小数;当小数点约定在最末尾位置时,就可以表示纯整数。

纯小数

纯整数

如何描述定点数的这种规则呢?其实,我们可以使用两种方法来表示:

  • Q来表示法Qx,x表示小数的位数。
  • S表示法Sx.y,x表示整数位数,y表示小数位数。

我们知道在计算机中根据是否存在符号位可以分成无符号整数和有符号整数,当然,对于定点数也可以根据有无符号位分为:

  • 无符号定点数:无符号位
  • 有符号定点数:有符号位

无符号定点数

无符号定点数,数值在机器中字长的全部二进制位中没有符号位,全都是数值位。例如,小数1.2转换成16位的定数,小数点的位置约定在第14位和第15位之间。

无符号Q14

x∗2n=1.2∗214=19660.8=19661 x*2^n = 1.2*2^{14} = 19660.8 = 19661 x2n=1.2214=19660.8=19661

### 小数定点数乘法的实现方法 在 FPGA 开发中,由于硬件平台对小数运算的支持有限,通常会采用定点数来近似表示小数并完成相关运算。以下是关于 FPGA 中小数定点数乘法的具体实现方法及其示例。 #### 1. 定点数的基本概念 定点数是一种用于替代浮点数的数据表示形式,在 FPGA 上具有更高的效率和更低的资源消耗。它通过固定的小数点位置来定义数值范围和精度。例如,Qm.n 表示 m 位整数部分和 n 位小数部分组成的定点数[^2]。 #### 2. 定点数乘法规则 当两个 Qm1.n1 和 Qm2.n2 的定点数相乘时,其结果是一个 Q(m1+m2).(n1+n2) 的定点数。这意味着乘积的结果会有更多的比特位,因此需要考虑截断或舍入策略以适应目标数据宽度的要求[^4]。 #### 3. Verilog 实现示例 以下是一段基于 Verilog 的定点数乘法器代码示例: ```verilog module fixed_point_multiplier ( input signed [7:0] a, // 输入 A (8-bit 定点数) input signed [7:0] b, // 输入 B (8-bit 定点数) output reg signed [15:0] result // 输出结果 (16-bit 定点数) ); always @(*) begin result = a * b; // 执行乘法操作 end endmodule ``` 上述模块实现了两个 8 位定点数 `a` 和 `b` 的乘法,并返回一个 16 位的结果 `result`。此设计适用于 Q3.4 或其他类似的定点格式配置[^3]。 #### 4. 截断与量化误差处理 实际应用中可能需要将高精度的乘积累加结果映射回较低位宽的目标格式。这一过程可能导致量化误差,可以通过简单的截断或者更复杂的四舍五入技术加以缓解。例如,如果希望保留特定数量的小数位,则可以在最终输出前执行右移操作。 #### 5. 资源优化技巧 为了减少逻辑门的数量以及提高运行速度,可以采取多种手段简化乘法电路的设计,比如利用分布式算术结构、查找表(LUTs)、专用 DSP Slice 等硬件特性加速计算流程。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值