Simulink中浮点数的优化表示法

本次内容【思想】将带大家认识Simulink定点数,下面将分别介绍定点数的理论基础、Simulink中实现过程及定点数的应用场合。

1

理论基础

在介绍定点数之前,需要先科普下计算机中的数据(整形、浮点型)的存储方式。

从最简单的8位整型开始,不考虑正负数的情况下,二进制数从0000 0000~1111 1111(8个位)表示0~255。如何考虑正负符号,就需要引入补码,用最高位来标记正负号。0000 0000 ~0111 1111表示0~127;1000 0000~11111111表示-1~-128。整型数据的表达很好理解,浮点型数据就稍微麻烦点。根据IEEE(电气和电子工程师协会)对32位浮点数的定义如下:

在一个32位的内存空间中,最高位用来表示正负符号,接下来的8位用来表示整数部分,最后的23位用来表示小数部分。

计算的方法就是把8位整数部分的值与23位小数部分的值共同表达浮点型数据。

定点数的原理就是根据上面的方法,定义不同内存空间中整数与小数部分的长度来实现浮点型数据的表达。假设我们可以试图利用8位的内存空间来表示浮点数:

正数形式

如果用最低1位来表示小数位,则0111 1111代表的是+63.5

如果用最低2位来表示小数位,则0111 1111代表的是+31.75

如果用最低3位来表示小数位,则0111 1111代表的是+15.875

如果用最低4位来表示小数位,则0111 1111代表的是+7.9375

负数形式

如果用最低1位来表示小数位,则1111 1111代表的是-0.5

如果用最低2位来表示小数位,则1111 1111代表的是-0.25

如果用最低3位来表示小数位,则1111 1111代表的是-0.125

如果用最低4位来表示小数位,则1111 1111代表的是-0.0625

2

Simulink中的实现

Simulink专门用于数据类型转换的模型,Data Type Converison

在输出的数据类型中可以看到除了常见的int/float/double类型外还有fixdt的定点数据类型,支持三种类型的定点数。

可以通过Matlab强大的帮助文件了解fixdt的使用。例如:fixdt(1,16,8),其中第一个参数1表示是否有符号【1:有、2:没有】;第二个参数16表示当前用来表述整个浮点数的数据长度为16位;最后一个参数8表示用来表述小数部分的数据长度为8位。定点数的存储可以为策略工程师提供灵活的浮点数管理方式。

3

定点数的应用场合

如果看过之前纯电动仿真控制策略文章《AVL-CRUISE纯电动仿真策略提高教程》的朋友肯定对这个有印象。仿真工程师将输入的信号统一转换为double数据类型,再进行策略逻辑运算。但是,在嵌入式工程师看来,这种行为简直是【败家子】。在复杂的控制算法模型中,一方面,如果所有的浮点型数据都直接用double或者float,单片机内存堆栈根本无法放下这么多内容。另一方面,实际的控制工程不需要使用到double这么高的数据精度。

例如在Simulink中同样表示0.5数值,可以用8位、16位甚至32位,但是它们占用内存的大小却有所不同!

根据前面生成代码的建模方式《Simulink代码生成应用教程》,创建一个简单的算法,同时对这个算法生成C语言代码。

可以看到在生成的结果中,模型中常量模块中的0.5浮点型数据已经被整型数据所取代。

4
总结一下

其实在实际应用过程中,数据精度并不是越高越好,数据精度高意味着付出的内存资源更多。因此,在内存紧张的嵌入式系统中,工程师可以通过定点数的方式找到一个精度和资源之间的平衡点。

(0)

相关推荐

  • float和double有什么区别?

    float和double在游戏行业肯定是用的很多的,虽然这是个很基础的问题,但是面试时被问到还是感觉说的不是很好. 所以还是总结一下: float 单精度浮点数在机内占 4 个字节,用 32 位二进制 ...

  • 小数在计算机中的存储形式

    本篇的目的就是为了让更多的人了解浮点数存储的基本原理,还是那句话,学习的同时带着思考.同样这里不讨论浮点数的精度损失和数值的计算理论.直接讲实质的表现. 上节讲到,C语言中的小数可以使用指数形式来表示 ...

  • 定点数和浮点数

    在选择计算机的数据表示方式时,通常需要考虑4点因素:要表示的数据类型(整数,小数,实数和复数)数值范围精确度数据存储和处理所需要的硬件代价计算机处理的数据多带有小数点,小数点在计算机中可以有两种方法表 ...

  • 【精选博文】FPGA定点小数计算(一)

    所谓定点小数,就是小数点固定地隐含在某一位置上的数据.由于小数点的位置是固定的,所以就没有必要储存它(如果储存了小数点的位置,那就是浮点数了).而小数的具体位置则完全是由程序设计者自己决定的,因此,对 ...

  • JS的7种数据类型以及它们的底层数据结构

    年纪大了记性不好(其实是脑子不好使,但又不想承认),有些东西总是容易忘,所以为了便于之后查看干脆记下来,用自己的语言再把一些概念整理一下,都是自己写的,以后再看这些文字也会有亲切感(好像很有道理的亚子 ...

  • 整数、浮点数在内存中的存储规则

    为什么我们代码将浮点数.整数进行强制转换,或打印输出时会出精度损失,或出错的情况? 想要搞明白这个问题,就需要了解一下整数.浮点数的存储规则. 嵌入式专栏 1 浮点数存储规则 根据国际标准IEEE(电 ...

  • 【精品博文】FPGA定点小数计算(Verilog版)第五篇——浮点小数转换为定点小数

    用FPGA实现定点运算,相对于浮点运算来说,开销要小很多(时间上和空间上的).但是在某些特定的场合,如多机协同处理等,要求FPGA的输入数据(或者是输出数据)为浮点形式的数据,这是就需要我们来做一个浮 ...

  • 八字中的取象断法明细

    一般在八字预测中,取象是一个非常关键的问题,需要命理师将干支五行的含义.概念.范畴,联合.组织在一起,反复琢磨推演. 所以让很多人感到八字的力量无处不在充溢了神秘莫测,不只充溢了时间性,而且也充满了空 ...

  • 功夫揭秘 中国武术硬功中铁沙掌练习法

    功夫揭秘 中国武术硬功中铁沙掌练习法

  • 【实务】审查调查中如何用好纪法威慑

    2021年如果遇见,99%的纪检监察干部会做同样的决定! 2021年我们都是担当人有奖征集原创文章,分享是一种力量! 纪委监委小说<梅山会>隆重出版 来源:中国纪检监察报,作者:江西省新余 ...

  • 书法中毛笔切翻之法【详细图解】

    用柔软的毛笔书写成三角形的点是比较困难的,经过多年我们对魏楷方笔技巧的猜解.探讨和实践,寻找到一种比较方便简捷的应该是很科学的方法--切翻之法. 我们的理念.理由和依据是:用最简单.最轻松.最便捷.最 ...

  • 中蜂强群十法及操作技巧

    中蜂(中华蜜蜂)是我国独有的优良蜂种,不但对我国的自然气候有着极强的适应性,而且善于利用零星蜜源来度过蜜源匮乏期,但相对意蜂而言中蜂较难发展成为强群,下面一起来看一看中蜂强群十法及操作技巧吧! 一.调 ...

  • 『中国古代房中养生秘笈』中卷→真仙秘传火候法

    <真仙秘传火候法>,收入<道藏>洞真部众术类,不署撰人,可能是南宋时的著作.此篇专论火候,是内丹修炼中之一环.分<时中火候>.<行水>.<方便真人 ...

  • 中医治恶性肿瘤 软坚散结法

    恶性肿瘤非手术时或放化疗.介入等方法治疗前.中.后,在中医辨证的前提下,合理恰当运用软坚散结药会极大地增强治疗效果及带瘤生存的时间. 恶性肿瘤其肿块坚硬如石,形态各异,多在脏腑.气血.津液功能失调的情 ...

  • 人体经络走向中的补泻之法

    [本篇是:彭博士讲<黄帝内经>系列-精华篇-之二百零五.] "帝曰:余聞上古聖人,論理人形,列別藏腑,端絡經脈,會通六合,各從其經,氣穴所發,各有處名:溪谷屬骨,皆有所起.分部逆 ...

  • 特别篇:你相信命运吗?古书中的改命之法

    特别篇:你相信命运吗?古书中的改命之法