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

这篇具有很好参考价值的文章主要介绍了数字信号处理篇之浮点数与定点数的转换(MATLAB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、写在前面

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

二、十进制与二进制

  对于二进制数,大家应该都很熟悉,在学习数电的过程中,我们知道,十进制转二进制,我们一般采用 “除2取余,逆序排列” 法,而二进制转十进制,我们一般采用“乘2累加”法(具体的转换过程可以参考阎石的《数字电子技术基础》第五版)。那么,任意一个十进制浮点数,均可以用B位整数位和b位小数据进行表示。假设二进制数为 a B a_B aB a B − 1 a_{B-1} aB1 a 1 a_1 a1 a 0 a_0 a0 Δ \Delta Δ a − 1 a_{-1} a1 a − 2 a_{-2} a2 a − b a_{-b} ab,其中, Δ \Delta Δ表示小数点的位置, a B − 1 a_{B-1} aB1为最高有效位(Most Significant Bit,MSB), a − b a_{-b} ab为最低有效位(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=bB1ai2i

  其中, 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} aB1 a 1 a_1 a1 a 0 a_0 a0 Δ \Delta Δ a − 1 a_{-1} a1 a − 2 a_{-2} a2 a − b a_{-b} ab,其对应的十进制表示为:
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)aB1i=bB2ai2i
  其中, a B − 1 a_{B-1} aB1为符号位, a B − 2 a_{B-2} aB2为整数位的最高位, a 0 a_0 a0为整数位的最低位, a − 1 a_{-1} a1为小数位的最高位, a − b a_{-b} ab为小数位的最低位。
  以-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,但其只支持整数转二进制,如下。
数字信号处理篇之浮点数与定点数的转换(MATLAB)
  所以,我们需要在进行进制转换前对齐进行放大处理,乘以 2 b 2^b 2b,其中,b为定点数设置的小数部分占用的位数。比如前面我们讲到的8bit(符号位1位,整数位3位,小数位4位),那么对2.75进行放大 2 b = 16 2^b=16 2b=16倍以后,得到的数值为44,那么再使用函数dec2bin对其进行转换,同时设置转换后的位宽8bit,即可得到转换以后的定点数,如下。
数字信号处理篇之浮点数与定点数的转换(MATLAB)
  这里乘以 2 b 2^b 2b实际上是对原来的数值进行移位处理。
  上面是对正数求其定点数原码,那么如果要求负数的定点数原码,直接使用dec2bin则会出错,dec2bin会给出其补码形式的二进制结果,如下:
数字信号处理篇之浮点数与定点数的转换(MATLAB)
  在这里,我们需要将其符号位与数值位进行分开,对其数值的绝对值进行定点数转换,然后与符号位进行拼接,即可得到定点数原码,如下:
数字信号处理篇之浮点数与定点数的转换(MATLAB)

五、写在后面

  在本文中,我们学习了定点数的概念以及在MATLAB中如何将浮点数转换为定点数。如果有疑义的地方欢迎评论区友好探讨学习!!!!!(浮点数转定点数MATLAB代码!!!!
数字信号处理篇之浮点数与定点数的转换(MATLAB)文章来源地址https://www.toymoban.com/news/detail-505229.html

到了这里,关于数字信号处理篇之浮点数与定点数的转换(MATLAB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字信号处理6

    昨天简单的复习了一下离散时间信号是什么以及系统的概念、系统要做的工作和系统中几个简单的原件,今天跟着昨天的内容继续学习。 一、离散时间系统的分类: 为什么要对系统进行分类呢,这就像是我们对函数进行分类一样,有些函数有的性质其他函数没有,相同的,

    2024年02月06日
    浏览(44)
  • 数字信号处理学习1

    基本上算是没怎么学过数字信号处理这门课,因为本科的时候,专业方向用不上,现在没法子了,专业使然,只能自己自学了,但是我又不知道该从何学起,就买了一本现代数字信号处理,结果发现人家把第一章基础知识给删了,这我就斯巴达了。。。所以就又搞了本绿皮的

    2024年02月02日
    浏览(51)
  • 【数字信号处理课程设计】基于MATLAB实现语音信号的采集与处理(偏重滤波)

    目录 一、目标与任务 二、原理介绍 2.1 录音原理 2.2 滤波器的设计原理及设计方法 2.3 IIR 数字滤波器设计原理 2.4 双线性变换法 三、GUI界面设计与实现 四、基于MATLAB仿真 4.1实验过程 4.2 结果分析 五、总结 5.1 函数用法总结 5.2 心得体会 六、参考文献 这个项目在我的B站上有专

    2024年01月18日
    浏览(53)
  • 实时频谱-2.2数字信号处理

    数字信号处理 (digital signal processing),是以数字运算方法实现信号变换、滤波、检测、估值、调制解调以及快速算法等处理的一门学科。数字信号处理具有高精度、高可靠性、可程序控制、可时分复用、便于集成化等优点。其应用领域十分广泛。 图 2-3 显示了泰克 RSA 系列中使

    2024年02月06日
    浏览(54)
  • 数字信号处理实验:数字滤波器的设计与应用

    一. 实验目的         1.掌握模拟滤波器的设计方法,以及脉冲响应不变法和双线性变换法设计IIR数字滤波 器的方法,针对实际信号能设计相应的 IIR 数字滤波器,并按要求进行滤波。         2.掌握用窗函数法设计FIR数字滤波器的方法,并通过实验了解各种窗函数对滤

    2024年02月03日
    浏览(47)
  • 使用matlab进行回声处理(三重回声)-数字信号处理课设

    1.录制一段声音信号,作为原音频信号,生成频域与时域图形,观察与分析其时域 与频域图形。 2.对该音频信号进行时域处理,并且实现对该声音信号添加第一层回声。 3.对该音频信号再继续一次进行时域处理,实现对该声音信号添加第二层回声。 4.将三段音频信号进行合成

    2024年02月03日
    浏览(46)
  • matlab函数转C++(数字信号处理)

    近期主要利用QT完成一个本科的通信教学软件,其中涉及大量matlab转C++的工作,本来是想利用matlab的Coder模块进行转换的,本人小白不太会用,还是自己按着matlab内置函数的代码进行转换,函数写的比较笨,希望大家能够多多指导. 使用的是C++的armadillo矩阵库进行矩阵的运算,

    2024年02月06日
    浏览(39)
  • 数字信号处理实验:IIR数字滤波器设计及软件实现

    目录 一、实验目的 二、实验原理 三、实验设备 四、实验内容及步骤 五、实验结果及分析 六、实验主程序框图及程序清单 七、实验总结 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具FDATool)设

    2024年02月12日
    浏览(39)
  • 数字信号处理----数字上变频和下变频都FPGA实现

    数字上变频器(DUC)和数字下变频器(DDC)广泛应用于通信系统,用于信号采样速率的转换。当信号从基带转换至中频( IF )带,需要使用数字上变频器。而数字下变频器是用于将信号从中频( IF )带转换为基带。DUC和DDC通常包括使用混频器进行频率转换,此外还有采样率

    2024年01月16日
    浏览(54)
  • 【数字信号处理2】IIR 滤波器设计

    1.掌握冲激响应法和双线性变换法设计IIR滤波器的原理及具体设计方法,熟悉用双线性设计法设计低通、带通和高通IIR数字滤波器的计算机程序; 2.熟悉模拟Butterworth滤波器的设计,掌握冲激响应法和双线性变换法设计数字IIR滤波器的方法。 1、不同阶次模拟巴特沃兹滤波器的

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包