这周新一篇技术文章来袭,今天要分享的技术文章是《MATLAB Simulink数据的小数点设计》
本篇技术文章将介绍实数的表现方式,并对MATLAB Simulink中设计小数点的方法进行讲解
1.实际数字的两种表现方式
1.1 定点数(Fixed point)方式
● 优点: 容易实现且运算速度快,可大大降低系统的复杂度
● 缺点: 可表达的范围很小
将小数点固定在特定位置,小数点前的便为整数部分,之后的便为小数部分。整体由符号部分、小数、整数构成,能够实现快速运算,但也具有表达范围小,精度低的不足之处。因此它不适合需要高精度的系统。
12.25 由[符号部分1bit + 整数部分 15bit + 小数部分16bit]组成的32位固定小数点方式来表现。
符号位是0时为正数,是1时则为负数。小数点之前的整数12表达为1100(2),小数0.25部分是0010(2),剩下的位则用0来填充,最终结果如下图所示。
<在32位中用定点数方式表达12.25 >
1.2 浮点数(Floating point)方式
● 优点: 表达范围广,能保障高精度
● 缺点: 系统的复杂度提高,随之运算时间延长
浮点数方式与定点数不同,正如其字面意思表达的一样,在表达实数时小数点是浮动的。整体由符号部分、整数部分、小数部分构成,运算速度慢但表达范围广,且精度相对较高。因此,它主要用在需要高精度的科学和工程领域,在大多数电脑中一般使用的浮点数方法来表示实数。
将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填满,具体表达形式如下。
<在32中用浮点数的方式表达21.125 >
2.MATLAB Simulink的定点算法的设计
MATLAB Simulink的各数据利用fixdt函数来设定数据类型的工作其实并不困难,Simulink 提供 Data Type Assistant的功能,能够使此过程更加容易。通过 Simulink block的Block Parameter - Signal Attributes tap,可以设定存储block是否需要输出定点数信号,以及固定小数点输出的大小、换算和其他属性的参数。点击>>按钮可激活Data Type Assistant。
如果将Mode选择为Fixed point, 则显示用于指定定点数数据类型信息的字段。
<使用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中设置小数点的方法进行了说明。此外,使用名为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修改指南说明
上海汽检与青岛硕索达成战略合作,为智能网联汽车关键软件保驾护航
基于设计需求的单元测试和单元测试详细说明书
青岛硕索福特与中汽研(天津)汽车工程研究院有限公司 签署战略合作协议