Simulink Data Type Conversion模块使用笔记
Data Type Conversion 是建模很常用的数据转换模块,在这里我想介绍一下在模型定标过程中Vonvert模块使用心得。
1.Output data type
这里设置的是Convert输出的数据类型,先了解一下Simulink一个特殊的数据格式fixdt,fixdt有三种形式:fixdt(A,B),fixdt(A,B,C),fixdt(A,B,D,E)。
fixdt(A,B) | A:符号位,1代表有符号,0代表无符号。B:数据长度。fixdt(A,B)只能表示整数,例如fixdt(0,8)表示的数据范围[0~255] |
fixdt(A,B,C) | A,B意义和上面相同,C表示小数位长度。例如fixdt(0,8,2),能够表示整数的只有6位,取值范围[0~63],小数取值范围1-2^-2=0.75,因此fixdt(0,8,2)表示的取值范围是[0~60.75] |
fixdt(A,B,D,E) | A,B意义和上面相同,D表示slope,E表示 bias。real world value=(slope×integer)+bias。例如fixdt(0,8,1,-40)表示的取值范围是 [-40,215] |
2.Input and Output to have equal
这里有两个选择:Real World Value(RWV)和Stored Integer(SI)。
要通过保留输入信号的真实值,将信号从一种数据类型转换为另一种数据类型,请选择默认值 “Real World Value (RWV)”。模块会解释由输入和输出的定标施加的限制,并尝试生成具有相等真实值的输出。
要通过对存储的整数值执行定标重新解释来更改输入信号的真实值,请选择 “Stored Integer (SI)”。在转换过程中,模块将尝试在指定的数据类型范围内保留为信号存储的整数值。最佳做法是使用相同的字长和符号指定输入和输出数据类型。这样做可确保模块仅更改信号的定标。为输入和输出指定不同的符号或字长可能会产生意外的结果,例如范围丢失或意外的符号扩展。
用法举例:
RWV:RWV在有效值范围内输出真实值,不会改变Inport Data 数值大小。例如Inport数据类型U8,Conversion数据类型fixdt(0,8,1,-40),选择RWV后,Conversion输出数据范围[-40,215],在这个范围内可以传递有效值。
SI: SI根据Conversion中指定的数据类型,对内存中存储的输入数据重新定标。
等价于以下用法。
注意:Convert(SI)不可以连续使用。
例如以下用法就得到了非期望的输出
如果一定要使用两个Convert(SI),则两个Convert(SI)之间必须添加一个Convert(RWV),
且Convert(RWV)输出数据类型必须定标,不能选择Inherit: Inherit via back propagation。
3.Integer rounding mode
Floor | 地板模式。将正值和负值都朝负无穷大方向舍入。 |
Celling | 天花板模式。将正值和负值朝正无穷大方向舍入。 |
Zero | 零值模式。相当于正值用地板模式,负值用天花板模式。从绝对值上看,直接抹掉小数部分。 |
Round | 圆整模式。正数和负数都是按绝对值舍入。如出现对等情况,则正数朝正无穷大方向舍入,负数朝负无穷大方向舍入。 |
Nearest | 最近模式。如果出现对等,朝正无穷大的方向舍入。 |
Convergent | 收敛模式。将数值舍入到最近的可表示值,如果出现对等,则舍入到最接近的偶数整数。再出现对等,正数朝正无穷大方向舍入,负数朝负无穷大方向舍入。 |
Simplest | 最简模式。自动选择是朝负无穷大方向舍入还是项零舍入,亦生成尽可能有效的舍入代码。 |
一笑琅然u: 牛,好文,其他作者写的我想骂他
流星奶香包: 同意,应该是[0~63.75].
满墙: fixdt(0,8,2)取值范围错了