MATLAB Simulink数据的小数点设计

这周新一篇技术文章来袭,今天要分享的技术文章是《MATLAB Simulink数据的小数点设计》


嵌入式软件开发会经常受到电力消耗和成本等资源制约。因此,开发人员在开发时就会考虑到软件运行目标环境中的资源约束。在这种资源有限的环境中,在确定变量的数据类型时应考虑到运算速度、复杂度和精度等,使用适合该环境的小数点表示方法。若没有足够考虑这些条件,就会发生数据溢出或数据精度过低导致数据丢失或因不必要的高精度造成性能下降等问题。在MATLAB Simulink环境中设计模型时,利用与小数点运算相关的toolbox,便可轻易解决上述问题。

本篇技术文章将介绍实数的表现方式,并对MATLAB Simulink中设计小数点的方法进行讲解

1.实际数字的两种表现方式

1.1 定点数(Fixed point)方式

● 优点: 容易实现且运算速度快,可大大降低系统的复杂度

● 缺点: 可表达的范围很小

将小数点固定在特定位置,小数点前的便为整数部分,之后的便为小数部分。整体由符号部分、小数、整数构成,能够实现快速运算,但也具有表达范围小,精度低的不足之处。因此它不适合需要高精度的系统。

MATLAB Simulink数据的小数点设计_第1张图片
<用定点数表达32bit实数的示意图>

12.25 由[符号部分1bit + 整数部分 15bit + 小数部分16bit]组成的32位固定小数点方式来表现。
符号位是0时为正数,是1时则为负数。小数点之前的整数12表达为1100(2),小数0.25部分是0010(2),剩下的位则用0来填充,最终结果如下图所示。
MATLAB Simulink数据的小数点设计_第2张图片
<在32位中用定点数方式表达12.25 >

1.2 浮点数(Floating point)方式
● 优点: 表达范围广,能保障高精度
● 缺点: 系统的复杂度提高,随之运算时间延长

浮点数方式与定点数不同,正如其字面意思表达的一样,在表达实数时小数点是浮动的。整体由符号部分、整数部分、小数部分构成,运算速度慢但表达范围广,且精度相对较高。因此,它主要用在需要高精度的科学和工程领域,在大多数电脑中一般使用的浮点数方法来表示实数。

MATLAB Simulink数据的小数点设计_第3张图片
<用浮点数方式表达32位实数的示意图>

将21.125用[符号部分1bit +指数部分8bit +尾数部分23bit]组成的32位浮点数方式表达的结果如下。

小数点前的整数21变为10101(2),小数部分0.125则是001(2)。即21.125 = 10101.001(2), 正规写法就是1.0101001(2) * 2^4。 符号位为 0(正数),表示指数符的值通过使用bias表达法来表示负数形态的指数。8bit指数部分使用127(2^(n-1)-1作为偏置常数,这个值再加上指数4,则为131,即1000 0011(2)。

通过规范化后的数值首位总是1,因此通常省略首位的1,只使用小数部分。在小数部分保存省略1的值,剩余位置用0填满,具体表达形式如下。
MATLAB Simulink数据的小数点设计_第4张图片
<在32中用浮点数的方式表达21.125 >

2.MATLAB Simulink的定点算法的设计

MATLAB Simulink的各数据利用fixdt函数来设定数据类型的工作其实并不困难,Simulink 提供 Data Type Assistant的功能,能够使此过程更加容易。通过 Simulink block的Block Parameter - Signal Attributes tap,可以设定存储block是否需要输出定点数信号,以及固定小数点输出的大小、换算和其他属性的参数。点击>>按钮可激活Data Type Assistant。

MATLAB Simulink数据的小数点设计_第5张图片

如果将Mode选择为Fixed point, 则显示用于指定定点数数据类型信息的字段。
MATLAB Simulink数据的小数点设计_第6张图片
<使用Data Type Assistant设置小数点的option >

① Signedness

用于指定用Signed表达定点数还是用Unsigned表达。初始值为Signed。

*singed:使用MSB(Most Significant Bit)作为符号位,表示正数和负数

为0时则是负数,为1时则为正数

*unsiged:不使用符号位,仅表示正数

可以表达相当于Signed型2倍的正数。

② Word length

指定数据的bit大小。bit越大就越能表达出更大的值和精密度。

以上所述的定点数的符号部分、整数部分、小数部分的大小之和均符合这个规律。字长范围为0和32之间的整数,初始值是16。

③ Scaling

为避免溢出或减少量子化错误,指定换算定点数的方法。初始值是Binary point。若选择Binary Point模式,Data Type Assistant则表示指定Binary Point位置的Fraction Length字段。这个值可能是正数或负数。若为正数,Binary Point 会从最右侧位移到相应值的左侧。相反,若为负数,则从最右侧位移到相应值的右侧。初始值为0。在Binary Point模式中,Output data type表达形式如下。

图片
如果选中Slope and bias模式,则显示可输入Slope和Bias的字段。Slope可能为正数,初始值为1.0。Bias可能是任意实数,初始值为0.0。在Slope and bias模式中,Output data type表达形式如下。
在这里插入图片描述
④ Data type override

使用Built in或Fixed Point模式时,您可以使用Data type override 选项来设定数据类型是否继承或忽略Contect,即Simulink 块、Signal 客体或 Stateflow chart的指定设置。

⑤ Calculate Best-Precision Scaling

点击此按钮,以指定的 Output minimum值和Output maximum值为基准计算最佳精密度值,显示Binary Point和 Slope及Bias的换算 。

⑥ Fixed-point details

展开项目,即可确认当前数据的表达范围和精密度的计算结果。
MATLAB Simulink数据的小数点设计_第7张图片
<数据表达范围和精密度的详细信息>

上文针对表达实数的两种方法和在MATLAB Simulink中设置小数点的方法进行了说明。此外,使用名为Fixed-Point Designer的 MATLAB Simulink Toolbox,也可模拟运算小数点数据的模型,收集数据,并根据结果计算最有效的数据类型,自动设定。使用此种toolbox可以更便捷的设置小数点。

最近,随着软件产业在相关领域中的占比不断提高,软件故障引发的事故危险也在增加。由此也加深了人们对于嵌入式软件功能安全的关注,同时开发及验证的重要性也在不断提高。SureSoft 20年来不断积累技术能力,深耕于嵌入式软件的logic设计与开发及验证领域。今后也会从用户的角度,为提供更方便、更简单的技术而竭尽全力。

[参考资料]

MathWorks - https://kr.mathworks.com/help/fixedpoint/index.html?s_tid=CRUX_lftnav

往期精彩回顾

何为次时代技术B2V(Brain-to-Vehicle)

软件优化方法介绍

MISRA–C 2012修改指南说明

上海汽检与青岛硕索达成战略合作,为智能网联汽车关键软件保驾护航

基于设计需求的单元测试和单元测试详细说明书

青岛硕索福特与中汽研(天津)汽车工程研究院有限公司 签署战略合作协议

你可能感兴趣的:(技术文章,静态检测,测试)