基于FPGA的数字信号处理(2)--什么是定点数?

news2024/10/3 16:48:26

在实际的工程应用中,往往会进行大量的数学运算。运算时除了会用到整数,很多时候也会用到小数。而我们知道在数字电路底层,只有「高电平1」和「低电平0」的存在,那么仅凭 0和1 该如何表示小数呢?

数字电路中,小数可以用两种形式来表示:「定点数」和「浮点数」。浮点数的内容我们下篇文章再讲,本文只讲定点数。

什么是定点数?

首先要明确的是,「定点数」的说法是相对「浮点数」来说的。要理解什么是定点数,可以先从要理解它的名字开始–定是什么?点又是什么?

定点数」是英语「fixed-point number」的中文翻译,fixed的意思是固定的point的意思是小数点,所以「定点数」其实也可以叫「固定小数点的数」。同样的,「浮点数」自然就是「浮动小数点的数」。

在10进制中,小数的表示是通过小数点和它所在位置来实现的。比如12.5,它表示的值是十二点五;而1.25则是一点二五。尽管12.5和1.25都用了「1 2 5」这3个数来表示,但由于小数点位置的不同,使得前者的数值是后者的十倍。

遗憾的是,电路只能表示1和0,无法直接表示小数点,所以上面的方法在电路中是行不通的。

假如你现在收到一条信息「我传一个小数过来,10100111」,看到这样一条信息,你恐怕只会觉得莫名其妙!10100111是哪门子小数?慢着,10100111如果直接转换成10进制数就是167,167当然不是小数,因为它没有小数点。但是仔细想想?它真的没有小数点吗?如果把167看做是167.0呢?也就是默认它的小数点是在最右边呢?

image-20240407204338665

接着你很快又收到了第二条信息「我再传一个小数过来,10100111,它的小数点在从右往左数第1位」。这次你终于能看懂了 ,这不就是1010011.1吗?也就是10进制数83.5。那么直接说83.5不就完事了吗?说这么多干吗?

image-20240407204521135

然后是第三条消息「我再传一个小数过来,10100111,它的小数点在从右往左数第2位」。这次传的是101001.11,即10进制数41.75。

image-20240407204616934

······(省略后面的10086条消息)······

看到这是不是清晰很多了–尽管我们无法直接用小数点来表示2进制小数,但可以通过指定小数点的位置来说明这是一个小数啊!

约定小数点的位置,且这个位置固定不变,小数点前、后的数字,分别用2进制表示,组合起来就可以用来表示和使用2进制小数了。用这种方式表示的数就叫做「定点数」。

定点数如何表示数字?

很容易想到,定点数除了能表示小数外,也可以表示整数。因为你可以把小数点的位置约定在最右面,这样其实相当于没有小数点,所以表示的都是整数;同样的,你也可以把小数点规定在最左边,这样表示的就是一个整数部分为0的小数。

所以定点数的表示可以分为三种情况:

纯整数

这种情况约定小数点在最右边。例如10进制数85用8位无符号2进制数表示就是0101_0101,因为小数点在最右边,所以可以看做是0101_0101.0 。

image-20240407205843367

纯小数

定点纯小数是指整数部分为0的小数。根据是无符号数还是有符号数,分为两种情况:

(1)无符号数

无符号数的最高位不表示符号,仅表示数值。这种情况约定小数点的位置在最左边。例如10进制数0.125用8位无符号2进制数表示就是0.0010_0000,因为小数点在最左边,所以是0010_0000。

image-20240407210804688

(2)有符号数

有符号数的最高位表示符号,不表示数值。这种情况约定小数点的位置在次高位。例如10进制数-0.125用8位无符号2进制数表示就是1.0010_000,因为小数点在次高位,所以是1010_0000。

image-20240407211159470

整数 + 小数

除了纯整数和纯小数这两种情况外,其实定点数主要是用来表示 「整数 + 小数」的情况,例如3.14、1.5、25.125等等。这种情况需要确定以下信息才能正确表示该数:

  • 整数部分长度
  • 小数部分长度
  • 是否有符号位

image-20240407211936944

整数和小数的长度之和确定了用多大的电路来表示定点数,而二者的长度之比则确定了小数点的位置。符号位则确定了该数是一个有符号数还是一个无符号数。

光说不练云玩家,接下来看几个例子。

(1)1.25 的定点数表示

首先约定用无符号数来表示,然后约定5 位为整数部分,3 位为小数部分。所以有:

1.25(D) = 1.01(B) = 00001.010 = 00001010

(2)-9.5 的定点数表示

首先需要用有符号数来表示,因为整数9需要4位来表示,而小数0.5仅需1位就可表示。为此可以约定5位为整数部分(注意最高位为符号位),3 位为小数部分。所以有:

-9.5(D) = 10110.1(B) = 10110.100 = 10110100

定点数的数值范围

定点数用来表示小数很方便,但是它也有个很大的问题–它的表示范围很小。

以5 位表示整数部分,3 位表示小数部分的无符号定点数为例,它的整数部分可以表示的范围是00000-11111,即0-31,步长是1;小数部分的范围是0.000-0.111,即0-0.875,步长是0.125。综合起来范围是0-31.875,步长为0.125。

有符号数的因为是用补码表示,所以它的范围取值比较特殊。以5 位表示整数部分,3 位表示小数部分的有符号定点数为例,它能表示的最小值是10000_000,即-32,它能表示的最大值是01111_111,即15.875。

若以m表示定点数的整数位宽(m不包含符号位),以n表示定点数的小数位宽,则有符号数和无符号数的定点数的表示范围为:

有符号数-2^m ~ (2^m - 2^-n)
无符号数0 ~ (2^m - 2^-n)

如果想表示更大范围、更高精度的值,怎么办?

  • 扩大整体位宽:比如使用 16位、32位来表示, 这样相应地整数部分和小数部分的宽度都可以增加,自然表示范围也就变大了。但是位宽的增加,也会带来更多的硬件开销
  • 改变小数点的位置:小数点向后移动,那么整个数字范围就会扩大,但是小数部分的精度就会越来越低。小数点向前移,表示的精度会变高,但是数字的表示范围又会降低。所以说定点数小数点位置的确定是一个范围和精度的trade off(权衡)

一些定点数的表示格式

除了可以用类似「以5 位表示整数部分,3 位表示小数部分的无符号定点数」的语言来描述定点数的格式外,还有多种定点数的表示格式。常见的有以下几种:

Q格式(Q notation)

Q格式的一般形式是:

Qm.n

默认情况下,用Q格式描述的都是有符号定点数。其中m表示整数部分的长度(这个值不包括符号位),n表示小数部分的长度。所以用Q格式描述的定点数的整体长度为:

w = m + n + 1 //整数部分长度 + 小数部分长度 + 符号位长度

例如 「 Q3.12 」描述的是一个整体长度为16位的2进制有符号定点数,它的整数部分长度是3,而小数部分长度是12。根据小数部分的长度,可以推断出分辨率为 2^-12。

在Q前面加一个 U 即可用来表示无符号的2进制定点数。例如 「 UQ1.15」描述的就是一个整数部分长度为1,小数部分长度为15的无符号的2进制定点数。

整数部分的长度值和小数点可以被省略,而只描述小数部分的长度。例如「 Q12 」描述的就是一个小数部分长度是12的2进制有符号定点数,但是它的整体长度是不确定的,你可以额外指定整体长度,或者说整体长度就取决于存储这个定点数的寄存器。

如果这个定点数存储一个16位的寄存器,那它的值就是:

xxxx . xxxx_xxxx_xxxx

如果这个定点数存储一个32位的寄存器,那它的值就是:

xxxx_xxxx_xxxx_xxxx_xxxx_xxxx . xxxx_xxxx_xxxx

其实也可以看出来,这种表示方法就是把它的值乘以 2^-12 。

这种整数长度m不包括符号位的Q格式主要是TI公司的DSP在使用,ARM公司也有一种类似的Q格式,但是它的整数长度m是包含符号位的。表示方式的不同不是什么大不了的事,只要是使用过程中确定好了就行,为此你甚至也可以自己创造一套定点数表示方式(只要不怕没人用就行,嘿嘿)。

S表示法

S表示法的一般形式是:

Sm.n

其中S表示这是一个有符号的定点数,m表示整数位数(m不包括符号位),n表示小数位数。这种方法其实跟Q格式很像,只不过它的表示无符号定点数的方法不是在前面加 U ,而是去掉 S,像这样:

m.n

例如「 2.4 」表示的就是一个整数位数为2,小数位数为4的无符号定点数。

总结

总的来说,用定点数表示的小数,不仅数值的范围表示有限,而且其精度也很低。要想解决这 2 个问题,人们就提出了使用「浮点数」的方式表示数字,关于浮点数的表示方法,我们会在下一篇文章进行讲解。

定点数和浮点数都可以表示小数,而定点数的精度固定,表现范围比较有限;但是,定点数在硬件上比较容易实现,在实际的数据算法中,定点数运算效率比浮点数的运算效率高很多,同时定点数使用的资源也比较少。因此,定点数被广泛地应用在数字信号处理的各种应用场景中。

  1. 定点数是在计算机中表示数字的一种方式,它既可以表示整数,也可以表示小数
  2. 在固定 bit 下,约定小数点的位置,然后把整数部分和小数部分分别转换为二进制,就是定点数的结果
  3. 受限于小数点的位置,用定点数表示小数时,数值的范围和小数精度是有限的
  4. 在现代计算机中,定点数通常用来表示整数,对于高精度的小数,通常用浮点数表示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1634603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.3--Cortex-A7寄存器介绍

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

C#应用程序实现多屏显示

前言 随着业务发展,应用程序在一些特定场景下,只在一个显示器上展示信息已经不能满足用户需求。我们如何把主屏运行程序中多个窗体移动到各个扩展屏幕位置显示呢?C# 是通过什么方式来实现的,下面介绍 C# 使用 Screen 类的方式来实…

maven多模块创建-安装配置

1、前提 许久没有写文章了,荒废了2年多的时间,在整理的时候,发现Maven还差一篇安装配置的文章,现在开始提笔完善它,参考:https://blog.csdn.net/m0_72803119/article/details/134634164。 —写于2024年4月…

使用量排名前50的GPTs趋势和特征

Chatgpt的gpt商店已经有几千gpts了。目前哪些gpts比较受欢迎呢?有哪些趋势和投资呢? 根据whatplugin.ai(截止日期为2024年3月),使用量最多的50个gpts数据分析结果如下: GPTs类型的分布情况如下: 图像生成…

智慧能源数据监控平台

随着科技的飞速发展,能源管理已逐渐从传统的粗放型向精细化、智能化转变。在这个转型过程中,HiWoo Cloud平台的智慧能源数据监控平台以其独特的技术优势和创新理念,正引领着能源管理的新潮流。 一、智慧能源数据监控平台的概念 智慧能源数据…

记录一次大数据量接口优化过程

问题描述 记录一次大数据量接口优化过程。最近在优化一个大数据量的接口,是提供给安卓端APP调用的,因为安卓端没做分批次获取,接口的数据量也比较大,因为加载速度超过一两分钟,所以导致接口超时的异常,要让…

【论文阅读】IPT:Pre-TrainedImageProcessingTransformer

Pre-TrainedImageProcessingTransformer 论文地址摘要1. 简介2.相关作品2.1。图像处理2.2。 Transformer 3. 图像处理3.1. IPT 架构3.2 在 ImageNet 上进行预训练 4. 实验4.1. 超分辨率4.2. Denoising 5. 结论与讨论 论文地址 1、论文地址 2、源码 摘要 随着现代硬件的计算能…

python数据可视化:雷达图

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python数据可视化: 雷达图 选择题 关于以下代码输出的雷达图中,以下说法正确的是? import numpy as np import matplotlib.pyplot as plt from pylab impor…

【酱浦菌-爬虫项目】爬取学术堂宏观经济学论文原文

前言 首先给大家放出完整代码,然后下面就是用jupyter写的代码。实际上在写的时候用的是jupyter写的,因为感觉jupyter写的时候更加的流畅,每一步运行的细节都能保存下来,更方便学习理解。 完整代码: import os impo…

智能售货机:塑造未来零售新貌

智能售货机:塑造未来零售新貌 随着科技的飞速跃进,零售业态经历了一场深刻的转型,其中,智能售货机凭借其创新技术和灵活应用,正逐步成为新零售领域的焦点。本文旨在探讨智能售货机的市场演进路径、最新趋势&#xff0…

【AIGC调研系列】LLaVA++整合Phi-3和Llama-3能够实现什么

LLaVA能够为Phi-3和Llama-3带来的主要好处包括: 视觉处理能力的增强:通过整合Phi-3和Llama-3模型,创建了具备视觉处理能力的Phi-3-V和Llama-3-V版本,这意味着这些模型现在能够理解和生成与图像相关的内容[1]。这种能力的增加&…

智慧旅游驱动行业革新:智能技术引领服务全面升级,匠心打造高品质、个性化旅游新体验

一、引言 随着科技的飞速发展和信息化程度的不断提高,智慧旅游正逐渐成为旅游业发展的新趋势。智慧旅游,顾名思义,是以智能化技术为支撑,通过大数据、云计算、物联网、人工智能等先进技术的应用,实现旅游服务的全面升…

Web前端一套全部清晰 ⑤ day3 列表 表格 表单标签 综合案例

人生是一直向前无法倒退的旅程&#xff0c;所以可以偶尔回头&#xff0c;但一定要往前看 —— 24.4.29 一、综合案例1-体育新闻列表 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport…

2024-04学习笔记

1.sql优化-子查询改为外连接 1.改之前 改之前是这样&#xff0c;那针对查出来的每一条数据&#xff0c;都要执行一次箭头所指的函数 执行的sql很慢 2.改之后 改之后是这样&#xff0c;整体做外连接&#xff0c;不用每一条都再执行一次查询 执行时间缩短了好几倍 2.Mybatis中…

21.Nacos集群搭建

模拟Nacos三个节点&#xff0c;同一个ip,启动三个不同的端口&#xff1a; 节点 nacos1, 端口&#xff1a;8845 节点 nacos2, 端口&#xff1a;8846 节点 nacos3, 端口&#xff1a;8847 1.搭建数据库&#xff0c;初始化数据库表结构 这里我们以单点的数据库为例 首先新建一…

Facebook全攻略:从注册到养号再到防封,一篇搞定!

作为海外热门的社交媒体平台之一&#xff0c;Facebook已经成为品牌营销的重要渠道。很多新手小白在拿到Facebook账号后还是不知道如何操作&#xff0c;今天为大家准备了一份Facebook操作全攻略&#xff0c;从注册、养号到防封号&#xff0c;让你的Facebook跨境之旅更加顺畅&…

小程序地理位置接口怎么开通?

小程序地理位置接口有什么功能&#xff1f; 如果我们提审后驳回理由写了“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;如果你也碰到类似问题&#xf…

Ansys Speos|进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光&#xff0c;是在光学设计中无意产生的&#xff0c;会降低相机系统的光学性能。 在本例中&#xff0c;光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计&#xff0c;并使用…

使用 GitHub Actions 实现项目的持续集成(CI)

目录 什么是 GitHub Actions 基础概念 Workflow 文件 Workflow 语法 实例&#xff1a;编译 OpenWrt 什么是 GitHub Actions GitHub Actions 是 GitHub 推出的持续集成&#xff08;Continuous Integration&#xff0c;简称 CI&#xff09;服务它允许你创建自定义工作流&am…

源码编译framework.jar 并成功导入android studio 开发

一、不同安卓版本对应路径 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar Android R: 11以上 out/so…