数字信号处理篇之浮点数与定点数的转换(MATLAB)

  • 一、写在前面
  • 二、十进制与二进制
  • 二、定点数的概念
  • 三、定点数的几种表示方法
    • 3.1 原码表示
    • 3.2 反码表示
    • 3.3 补码表示
  • 四、浮点数转定点数的MATLAB实现
  • 五、写在后面

一、写在前面

  对于计算机等数字信号处理器件,数字和信号变量都是用二进制进行表示的。在本文中,我们学习了定点数的概念、浮点数与定点数的转换以及在MATLABZ中实现浮点数与定点数的转换。

二、十进制与二进制

  对于二进制数,大家应该都很熟悉,在学习数电的过程中,我们知道,十进制转二进制,我们一般采用 “除2取余,逆序排列” 法,而二进制转十进制,我们一般采用“乘2累加”法(具体的转换过程可以参考阎石的《数字电子技术基础》第五版)。那么,任意一个十进制浮点数,均可以用B位整数位和b位小数据进行表示。假设二进制数为 a B a_B aB​ a B − 1 a_{B-1} aB−1​… a 1 a_1 a1​ a 0 a_0 a0​ Δ \Delta Δ a − 1 a_{-1} a−1​ a − 2 a_{-2} a−2​… a − b a_{-b} a−b​,其中, Δ \Delta Δ表示小数点的位置, a B − 1 a_{B-1} aB−1​为最高有效位(Most Significant Bit,MSB), a − b a_{-b} a−b​为最低有效位(Least Significant Bit,LSB)。那么该二进制数与十进制浮点数的关系可以由下面的公式给出:
D = ∑ i = − b B − 1 a i 2 i D= \sum_{i=-b}^{B-1} a_i{2^i} \quad D=i=−b∑B−1​ai​2i

  其中, a i a_i ai​的值为0或1,D表示十进制浮点数数值。
  在这里,对于不同大小的浮点数数值,其二进制表示的位宽是不一致的。例如:浮点数7.5可以用二进制数原码111 Δ \Delta Δ 1进行表示,所需的位宽为4bit,再比如浮点数1.25,可以用二进制数原码1 Δ \Delta Δ 01进行表示,所需的位宽为3bit。这里,我们可以看到,对于不同的数值,所需的二进制表示位宽也不一致,那么,如果要在硬件中实现简单的加减法,我们需要确保小数点对齐,才可保证计算结果的正确性,如下:
111 Δ 1 1 Δ 01 \begin{matrix} 111\Delta1\quad \\ \ \ 1\Delta01 \end{matrix} 111Δ1  1Δ01​
  此时计算得到结果 1000 Δ 11 1000\Delta11 1000Δ11,计算结果正确。如果小数点不对齐,则无法得到正确计算结果,如下:
111 Δ 1 1 Δ 01 \begin{matrix} 111\Delta1 \\ \ \ 1\Delta01 \end{matrix} 111Δ1  1Δ01​
  此时计算得到结果 10100 10100 10100,计算结果错误,且无法确定小数点 Δ \Delta Δ的位置。
  那么,有没有什么办法能够保证任意不同数值的二进制表示之间的小数点是对齐的呢?我们可以通过固定小数点 Δ \Delta Δ的位置,来确保任意数值的二进制表示是对齐的。于是,我们在这里引入定点数

二、定点数的概念

  那么在前面定点数(fixed-point number)就是小数点在数中位置是固定不变的二进制数,也就是说,小数点在数值的二进制表示中位置是固定的。以8bit的定点数为例,其符号位为1bit,整数位为3bit,小数位为4bit,那么小数点的位置就固定在第4bit和第5bit中间(从左往右数,即_ _ _ _ Δ \Delta Δ_ _ _ _ )。
  下面,我们给出几个按照8bit(符号位1位,整数位3位,小数位4位)进行浮点数—定点数转换的例子:
( − 2.78 ) f l o a t = ( 1010 Δ 1100 ) f i x e d ( + 7.19 ) f l o a t = ( 1111 Δ 0011 ) f i x e d \begin{matrix} (-2.78)_{float}=(1010\Delta1100)_{fixed} \\ \\(+7.19)_{float}=(1111\Delta0011)_{fixed} \end{matrix} (−2.78)float​=(1010Δ1100)fixed​(+7.19)float​=(1111Δ0011)fixed​​
  在这里,由于定点数表示所给的位宽不足,导致存在一定的精度误差。这里 1010 Δ 1100 1010\Delta1100 1010Δ1100所表示的数值实际上是-2.75,相比于原来的-2.78,存在0.03的误差。而 1111 Δ 0011 1111\Delta0011 1111Δ0011所表示的值实际上为+7.1875,与原来的+7.19存在0.025的误差。这里可以看到对于-2.78,符号位为负,即为1;整数位为2,用二进制表示即10,但是由于我们规定了其整数位位3bit,而这里只有2bit,所以在前面补0,即010;小数位为0.78,用二进制表示为 Δ 11 \Delta11 Δ11,但是由于我们规定了其小数位为4bit,所以需要在后面补0,即1100,于是,就得到了-2.78的定点数表示 1010 Δ 1100 1010\Delta1100 1010Δ1100,实现了所有按照该标准进行转换的定点数小数点 Δ \Delta Δ必然是对齐的。

三、定点数的几种表示方法

  定点数有三种表示方法:原码、反码、补码。在上面,我们举例都是以原码为例,下面降对这三种表示方法展开讲解。

3.1 原码表示

  原码表示法就是指符号位加绝对值的表示方法。对于一个(B+b)位的定点数 a B − 1 a_{B-1} aB−1​… a 1 a_1 a1​ a 0 a_0 a0​ Δ \Delta Δ a − 1 a_{-1} a−1​ a − 2 a_{-2} a−2​… a − b a_{-b} a−b​,其对应的十进制表示为:
D = ( − 1 ) a B − 1 ∑ i = − b B − 2 a i 2 i D= (-1)^{a_{ B-1}}\sum_{i=-b}^{B-2} a_i{2^{i}} \quad D=(−1)aB−1​i=−b∑B−2​ai​2i
  其中, a B − 1 a_{B-1} aB−1​为符号位, a B − 2 a_{B-2} aB−2​为整数位的最高位, a 0 a_0 a0​为整数位的最低位, a − 1 a_{-1} a−1​为小数位的最高位, a − b a_{-b} a−b​为小数位的最低位。
  以-2.75和2.75为例,其浮点数-定点数转换如下:
( − 2.75 ) 浮点数 = ( 1010 Δ 1100 ) 定点数 − 原码 ( 2.75 ) 浮点数 = ( 0010 Δ 1100 ) 定点数 − 原码 \begin{matrix} (-2.75)_{浮点数}=(1010\Delta1100)_{定点数-原码} \\ \\ (2.75)_{浮点数}=(0010\Delta1100)_{定点数-原码} \end{matrix} (−2.75)浮点数​=(1010Δ1100)定点数−原码​(2.75)浮点数​=(0010Δ1100)定点数−原码​​

3.2 反码表示

  正数的反码与正数的原码相同,而负数的反码可以通过将负数的原码除符号位以外的所有位取反得到。
( − 2.75 ) 浮点数 = ( 1101 Δ 0011 ) 定点数 − 反码 ( 2.75 ) 浮点数 = ( 0010 Δ 1100 ) 定点数 − 反码 \begin{matrix} (-2.75)_{浮点数}=(1101\Delta0011)_{定点数-反码} \\ \\ (2.75)_{浮点数}=(0010\Delta1100)_{定点数-反码} \end{matrix} (−2.75)浮点数​=(1101Δ0011)定点数−反码​(2.75)浮点数​=(0010Δ1100)定点数−反码​​

3.3 补码表示

  正数的补码与原码、反码均相同,而负数的补码可以通过在负数反码的最低有效位LSB处加1得到。
( − 2.75 ) 浮点数 = ( 1101 Δ 0100 ) 定点数 − 补码 ( 2.75 ) 浮点数 = ( 0010 Δ 1100 ) 定点数 − 反码 \begin{matrix} (-2.75)_{浮点数}=(1101\Delta0100)_{定点数-补码} \\ \\ (2.75)_{浮点数}=(0010\Delta1100)_{定点数-反码} \end{matrix} (−2.75)浮点数​=(1101Δ0100)定点数−补码​(2.75)浮点数​=(0010Δ1100)定点数−反码​​

四、浮点数转定点数的MATLAB实现

  在MATLAB中,对于十进制转二进制,提供了函数dec2bin,但其只支持整数转二进制,如下。

  所以,我们需要在进行进制转换前对齐进行放大处理,乘以 2 b 2^b 2b,其中,b为定点数设置的小数部分占用的位数。比如前面我们讲到的8bit(符号位1位,整数位3位,小数位4位),那么对2.75进行放大 2 b = 16 2^b=16 2b=16倍以后,得到的数值为44,那么再使用函数dec2bin对其进行转换,同时设置转换后的位宽8bit,即可得到转换以后的定点数,如下。

  这里乘以 2 b 2^b 2b实际上是对原来的数值进行移位处理。
  上面是对正数求其定点数原码,那么如果要求负数的定点数原码,直接使用dec2bin则会出错,dec2bin会给出其补码形式的二进制结果,如下:

  在这里,我们需要将其符号位与数值位进行分开,对其数值的绝对值进行定点数转换,然后与符号位进行拼接,即可得到定点数原码,如下:

五、写在后面

  在本文中,我们学习了定点数的概念以及在MATLAB中如何将浮点数转换为定点数。如果有疑义的地方欢迎评论区友好探讨学习!!!!!(浮点数转定点数MATLAB代码!!!!)

数字信号处理篇之浮点数与定点数的转换(MATLAB)相关推荐

  1. 数字信号处理篇(一) 采样定理

    1.奈奎斯特采样 如果信号的最高频率是 ,为了使抽样所得的离散值不丢失原信号的信息,那么至少以 的速率进行抽样.即当采样率 ,得到的离散信号   就可以完全恢复原模拟信号  . 2.带通采样 对于某些 ...

  2. 【数字信号处理】带通采样定理原理及其MATLAB仿真说明

    引言 平常我们所讲的采样定理(奈奎斯特采样定理)一般要求满足: f s ≥ 2 f H f_s≥2f_H fs

  3. 浮点数和定点数的相互转换(浮点数量化为定点)

    目录 1. 这篇博客将要讨论什么? 2. 浮点数的表示法 2.1 IEEE 754标准 2.2 浮点数的"浮"字体现在哪里? 3. 定点数的表示法 4. 浮点数 & 定点数 ...

  4. c语言定点数和浮点数的转换,浮点数和定点数的相互转换(浮点数量化为定点)...

    1. 这篇博客将要讨论什么? 说来惭愧,做为计算机科班出身的人,计算机基础知识掌握并不扎实,这里的基础指的是计算机体系结构中的内容,诸如数据的表示和处理,如float的表示和运算等.看<CSAP ...

  5. 经典数字信号处理图书的个人评述【转】

    在一网站上得到如下的很好的内容,故存放在此,以方便以后查看... http://emuch.net/html/201206/4595181.html 经典数字信号处理图书的个人评述         数 ...

  6. matlab音乐信号处理,数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析...

    数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析 1<数字信号处理>课程设计设计题目:基于 MATLAB 的音乐信号处理和分析一.课程设计的目的本课程设计通过对音乐信号的 ...

  7. matlab fft谱分析实验报告,数字信号处理实验报告-FFT算法的MATLAB实现.doc

    数字信号处理实验报告-FFT算法的MATLAB实现.doc 数字信号处理 实验报告实验二FFT算法的MATLAB实现一.实验目的通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其 ...

  8. matlab x(n)16点DFT,[基于MATLAB的数字信号处理实例分析.doc

    [基于MATLAB的数字信号处理实例分析 湖北文理学院理工学院 学生结业论文 课程名称:MATLAB教程 结业论文名称:基于MATLAB的数字信号处理实例分析 专业名称:通信工程 班级:1011 学号 ...

  9. 经典数字信号处理图书的个人评述

    经典数字信号处理图书的个人评述         数字信号处理是电子与信息专业的骨干课程,其应用非常广泛.这方面的图书正可谓是浩如烟海,有的侧重理论推导,有的侧重工程应用,有的侧重软件实现,真可谓是百花 ...

最新文章

  1. 5月书讯:流畅的Python,终于等到你!
  2. iphone桌面横屏设置在哪里_我和我各司其职的桌面们
  3. Linux学习笔记--导航(CentOS 7)
  4. springdata-jpa 八种查询方法
  5. Fizz Gateway API in Java
  6. php可输入的下拉框,JavaScript_可编辑下拉框的2种实现方式,可编辑下拉框-HTML 复制代码 代 - phpStudy...
  7. Ubuntu E: Sub-process /usr/bin/dpkg returned an error code (1)
  8. 微信小程序云开发教程-一文学会Json
  9. matlab显示 图注,Matlab图例注记乱码(2019a)
  10. R语言学习:缺失值处理
  11. 简单说明什么是网络的DMZ区域
  12. x265 编码一行,以及vbv上溢/下溢之后的处理
  13. 神经网络:ResNet 论文学习总结(二)-- 模型微调
  14. 笔记本双系统安装Ubuntu 20.04.3 LTS没有WIFI的解决方法
  15. C# 实现Excel单元格画边框
  16. win10右键卡顿原因_win10系统右键卡顿的解决方法
  17. [SV]SystemVerilog Constraints(1)
  18. MBO目标管理与SMART原则
  19. 洗衣店小程序,共享洗衣小程序,干洗店小程序毕设作品
  20. Linux 在终端中打开新的终端:gnome-terminal

热门文章

  1. 同花顺选股python开发_量化交易。最新版通用版同花顺客户端的Python3 API
  2. Android歌词秀设计思路歌词播放服务
  3. 微积分、概率与数理统计、线性代数谁更重要?
  4. 计算机组成原理及指令怎么反汇编,计算机组成原理课程设计-位同步时钟提取电路设计与实现.doc...
  5. java计算机毕业设计铝塑门窗的研制和生产管理源代码+数据库+系统+lw文档
  6. 利用OpenSearch API检索和下载数据 附Python代码实例
  7. 计算机主板电池电压,主板电池没电引发的电脑故障
  8. 11月最新纯净版XP系统999宝藏网GhostXP_SP3会员专用版V5.0
  9. Android跟随手指小球
  10. MATLB|分布式能源的选址与定容IEEE30节点实现