使用命令行将模型转换为定点
这个例子展示了如何使用MATLAB细化模型的数据类型®命令行。
打开
fxpdemo_feedback
模型。fxpdemo_feedback
的
控制器
子系统使用定点数据类型。创建一个
DataTypeWorkflow。转换器
对象的数据类型来细化控制器
子系统fxpdemo_feedback
模型。converter = DataTypeWorkflow。转换器(“fxpdemo_feedback /控制器”);
模拟模型并将结果存储在
InitialRun
.若要记录模拟范围,请使用MinMaxOverflowLogging
参数必须设置为MinMaxAndOverflow
.在本例中,参数已经设置为正确的值。转换器。CurrentRunName =“InitialRun”;converter.simulateSystem ();
确定是否有任何溢出
InitialRun
.饱和=转换器。饱和溢出(“InitialRun”)
饱和=结果与属性:ResultName: 'fxpdemo_feedback/Controller/Up Cast' SpecifiedDataType: 'fixdt(1,16,14)' CompiledDataType: 'fixdt(1,16,14)' ProposedDataType: " Wraps: [] saturations: 23 SimMin: -2 SimMax: 1.9999 DerivedMin: [] DerivedMax: [] RunName: 'InitialRun' Comments: "
wrapped = converter.wrapOverflows(“InitialRun”)
Wraps = []
饱和发生在了把块
控制器
子系统。没有包装溢出。细化模型的数据类型,这样就不会出现饱和。使用快捷方式配置转换模型。控件来查找系统可用的快捷方式
ShortcutsForSelectedSystem
转换器对象的属性。转换器。ShortcutsForSelectedSystem
ans = '使用双重覆盖的范围收集' '使用指定数据类型的范围收集' '使用单一覆盖的范围收集' '禁用范围收集'
为模型收集一个浮点基准测试。应用快捷方式中的设置,用double覆盖整个模型并启用插装。
converter.applySettingsFromShortcut (“使用双重覆盖的范围收集”)
此快捷方式还会更新
CurrentRunName
转换器对象的属性。转换器。CurrentRunName
ans = DoubleOverride
再次模拟模型以收集新的范围信息。将这些结果存储在
DoubleOverride
.converter.simulateSystem ();
创建一个
ProposalSettings
对象来控制数据类型建议设置。propSettings = DataTypeWorkflow.ProposalSettings;
propSettings =带有属性的提议设置:ProposeSignedness: true ProposeWordLength: false ProposeFractionLength: true ProposeForInherited: true ProposeForFloatingPoint: true SafetyMargin: 0 UseSimMinMax: true UseDerivedMinMax: true浮点和继承类型默认值:DefaultWordLength: 16 DefaultFractionLength: 4
控制器
子系统。使用提议设置对象中指定的设置为系统提议数据类型,
propSettings
和范围信息收集在“DoubleOverride”
运行。converter.proposeDataTypes (“DoubleOverride”, propSettings);
类建议的数据类型
DoubleOverride
跑到模型那里。converter.applyDataTypes (“DoubleOverride”)
通过对模型应用配置设置来关闭数据类型覆盖。
converter.applySettingsFromShortcut (“指定数据类型的范围集合”)
设置一个新的运行并使用新的定点数据类型模拟模型。
转换器。CurrentRunName =“FixedRun”;converter.simulateSystem ();
创建两个
结果
对象,用于比较理想的浮点行为和定点行为。DoubleOverrideResult = converter.results(“DoubleOverride”@ (r) (strcmp (r。ResultName,“fxpdemo_feedback /控制器/下来投”)))
DoubleOverrideResult = Result with properties: ResultName: 'fxpdemo_feedback/Controller/Down Cast' SpecifiedDataType: 'fixdt(1,16,12)' CompiledDataType: 'double' ProposedDataType: 'fixdt(1,16,12)' Wraps: [] Saturations: [] SimMin: -2.4135 SimMax: 4.3270 DerivedMin: [] DerivedMax: [] RunName: 'DoubleOverride' Comments: {}
FixedRunResult = converter.results(“FixedRun”@ (r) (strcmp (r。ResultName,“fxpdemo_feedback /控制器/下来投”)))
FixedRunResult =带有属性的结果:ResultName: 'fxpdemo_feedback/Controller/Down Cast' SpecifiedDataType: 'fixdt(1,16,12)' CompiledDataType: 'fixdt(1,16,12)' ProposedDataType: " Wraps: [] Saturations: [] SimMin: -2.4211 SimMax: 4.3496 DerivedMin: [] DerivedMax: [] RunName: 'FixedRun' Comments: "
比较
结果
对象的DoubleOverride
跑到结果
对象的FixedRun
.diff = converter.compareResults(DoubleOverrideResult,FixedRunResult);
把两个信号的差画出来。
F =数字;情节(diff.tol);持有在情节(diff.diff);
相关的话题
这个话题有用吗?