文档

使用命令行将模型转换为定点

这个例子展示了如何使用MATLAB细化模型的数据类型®命令行。

  1. 打开fxpdemo_feedback模型。

    fxpdemo_feedback

    控制器子系统使用定点数据类型。

  2. 创建一个DataTypeWorkflow。转换器对象的数据类型来细化控制器子系统fxpdemo_feedback模型。

    converter = DataTypeWorkflow。转换器(“fxpdemo_feedback /控制器”);

  3. 模拟模型并将结果存储在InitialRun.若要记录模拟范围,请使用MinMaxOverflowLogging参数必须设置为MinMaxAndOverflow.在本例中,参数已经设置为正确的值。

    转换器。CurrentRunName =“InitialRun”;converter.simulateSystem ();

  4. 确定是否有任何溢出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 = []

    饱和发生在了把控制器子系统。没有包装溢出。细化模型的数据类型,这样就不会出现饱和。

  5. 使用快捷方式配置转换模型。控件来查找系统可用的快捷方式ShortcutsForSelectedSystem转换器对象的属性。

    转换器。ShortcutsForSelectedSystem
    ans = '使用双重覆盖的范围收集' '使用指定数据类型的范围收集' '使用单一覆盖的范围收集' '禁用范围收集'
  6. 为模型收集一个浮点基准测试。应用快捷方式中的设置,用double覆盖整个模型并启用插装。

    converter.applySettingsFromShortcut (“使用双重覆盖的范围收集”

    此快捷方式还会更新CurrentRunName转换器对象的属性。

    转换器。CurrentRunName
    ans = DoubleOverride

  7. 再次模拟模型以收集新的范围信息。将这些结果存储在DoubleOverride

    converter.simulateSystem ();

  8. 创建一个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
    类的数据类型可使用默认建议设置来细化控制器子系统。

  9. 使用提议设置对象中指定的设置为系统提议数据类型,propSettings和范围信息收集在“DoubleOverride”运行。

    converter.proposeDataTypes (“DoubleOverride”, propSettings);

  10. 类建议的数据类型DoubleOverride跑到模型那里。

    converter.applyDataTypes (“DoubleOverride”

  11. 通过对模型应用配置设置来关闭数据类型覆盖。

    converter.applySettingsFromShortcut (“指定数据类型的范围集合”

  12. 设置一个新的运行并使用新的定点数据类型模拟模型。

    转换器。CurrentRunName =“FixedRun”;converter.simulateSystem ();
    该模型现在使用改进的定点类型。

  13. 创建两个结果对象,用于比较理想的浮点行为和定点行为。

    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: "

  14. 比较结果对象的DoubleOverride跑到结果对象的FixedRun

    diff = converter.compareResults(DoubleOverrideResult,FixedRunResult);

  15. 把两个信号的差画出来。

    F =数字;情节(diff.tol);持有情节(diff.diff);

相关的话题

这个话题有用吗?