将浮点模型转换为定点模型
在此示例中,学习如何:
将浮点系统转换为等效的定点表示。
定点工具自动执行在系统中指定定点数据类型的任务。在此示例中,工具为模型对象收集范围数据,或者来自您为信号和参数显式指定的设计最小值和最大值,或者来自仿真期间出现的记录的最小值和最大值。该工具基于这些值来建议最大化精度并覆盖范围的定点数据类型。该工具允许您查看数据类型建议,然后有选择地将其应用于模型中的对象。
用查找表逼近替换转换不支持的模块。
在转换的准备阶段,定点工具通过将任何不支持定点转换的模块放置在由 Data Type Conversion 模块包围的子系统内来隔离这些模块。您可以使用查找表优化器用查找表逼近替换不支持的模块。
有关这些步骤的演示,请观看视频:
设置模型
打开模型并为定点转换配置该模型。
open_system('ex_fixed_point_workflow')

该模型由源、要转换为定点的控制器子系统以及用于可视化子系统输出的示波器组成。以这种方式配置模型有助于您确定定点数据类型对系统的影响。使用这种方法,您仅转换子系统,因为这是感兴趣的系统。无需将源或示波器转换为定点。
此配置允许您修改输入并收集多个激励的仿真数据。然后,您可以检查子系统在使用不同输入范围时的行为,并定标定点数据类型以提供最大精度,同时适应整个仿真范围。
要对转换前后的行为进行比较,请在在设系统的输出端启用信号记录。
ph = get_param('ex_fixed_point_workflow/Controller Subsystem','PortHandles'); set_param(ph.Outport(1),'DataLogging','on') set_param(ph.Outport(2),'DataLogging','on')
准备转换系统
要将模型转换为定点,请使用定点工具。
在
ex_fixed_point_workflow模型的 App 库中,选择定点工具。在定点工具中,在新建工作流下,选择迭代定点转换。
在在设系统(SUD) 下,选择要转换为定点的子系统。在此示例中,选择控制器子系统。
在范围收集模式下,选择仿真范围作为范围收集方法。
在仿真输入下,您可以指定
Simulink.SimulationInput对象以在整个工作范围内测试您的设计。在此示例中,将仿真输入设置为使用默认模型输入。要为系统指定容差,请在信号容差下的表中,为模型中启用信号记录的任何信号指定容差。有关详细信息,请参阅指定信号容差。
将您记录的信号的相对容差(相对容差)设置为 15%。

在工具条中,点击准备。定点工具检查在设系统与转换过程的兼容性,并报告在模型中发现的任何问题。定点工具会尽可能自动更改不兼容的设置。有关详细信息,请参阅Use the Fixed-Point Tool to Prepare a System for Conversion。

在设子系统包含 Exp 模块,该模块不支持定点数据类型。定点工具用 Data Type Conversion 模块包围此模块,并将此模块放置在一个子系统内。当您完成将子系统其余部分转换为定点后,可以用
exp函数的查找表逼近替换该子系统。
收集范围
默认情况下,定点工具使用在模型上设置的当前数据类型覆盖。对于此示例,使用双精度覆盖模型中的数据类型以进行范围收集运行。
展开收集范围按钮箭头并选择双精度。
点击收集范围
 以仿真模型。 
BaselineRun 的运行中。您可以在电子表格的 SimMin 和 SimMax 列中或在结果详细信息窗格中查看收集的范围。仿真数据的可视化窗格提供仿真结果的另一种视图。选择定点工具的浏览选项卡,获取用于排序和过滤电子表格中的数据和可视化的其他工具。

转换数据类型
使用定点工具基于存储在运行 BaselineRun 中的双精度仿真结果为适当配置的模块建议定点数据类型。
在工具条的转换部分中,点击建议数据类型按钮。
定点工具分析未选择锁定输出数据类型设置以防止被定点工具更改参数的所有定点模块的定标。
定点工具使用默认建议设置建议具有 16 位字长和最佳精度小数长度的数据类型,并更新电子表格中的结果。
您可以在建议类型之前,通过点击工具条的转换部分中的设置按钮来编辑建议设置。
工具在电子表格的 ProposedDT 列中显示建议的数据类型。
默认情况下,对于建议的数据类型与对象的当前数据类型不同的每个结果,它会选中接受复选框。如果应用数据类型,工具会将这些建议的数据类型应用于在设系统。
检查结果以解决任何问题,并确保您要对每个结果接受建议的数据类型。仿真数据的可视化窗格分别用红色或黄色三角形指示将包含上溢或下溢的结果。下溢可能是造成数值问题的根源,但有时可以忽略而不会出现安全问题。
定点工具用红色图标
 指示建议的数据类型与另一种类型冲突的结果。在此示例中,没有结果包含冲突。有关详细信息,请参阅Examine Results to Resolve Conflicts。在查看结果并确保没有问题后,您就可以将建议的数据类型应用于模型。点击应用数据类型以将建议的数据类型写入模型。
定点工具将数据类型建议应用于在设系统中的模块。
验证新设置
接下来,使用新定点设置再次仿真模型。然后,您可以使用仿真数据检查器的绘图功能来比较浮点 BaselineRun 运行的结果与定点结果。
点击用嵌入类型进行仿真。定点工具使用新定点数据类型仿真模型,并将运行信息存储在名为
EmbeddedRun的新运行中。之后,定点工具显示有关记录定点数据的模块的信息。该运行的 CompiledDT 列显示使用新定点数据类型的 Controller Subsystem 模块。
检查仿真数据的可视化窗格中的直方图以验证没有溢出或饱和。溢出及饱和用红色三角形
 进行标记。工作流浏览器指示您指定了容差的所有信号均通过。

点击比较结果以打开仿真数据检查器。在仿真数据检查器中,选择记录的信号之一以查看定点仿真行为。

用查找表逼近替换不支持的模块
在工作流的准备转换系统步骤中,定点工具将转换不支持的 Exp 模块放在由 Data Type Conversion 模块包围的一个子系统内。在此步骤中,您用查找表逼近替换该子系统。
要获取定点工具为转换而解耦的所有子系统的列表,请在命令行中输入:
decoupled = DataTypeWorkflow.findDecoupledSubsystems('ex_fixed_point_workflow')decoupled = 1×2 table ID BlockPath __ ____________________________________________________ 1 {'ex_fixed_point_workflow/Controller Subsystem/Exp'}DataTypeWorkflow.findDecoupledSubsystems函数返回一个表,其中包含定点工具为隔离不支持的模块而创建的任何子系统的模块路径。打开查找表优化器。在 App 库中,选择查找表优化器。
在查找表优化器的目标页上,选择 Simulink 模块或子系统。点击下一步。
在模块信息下,从命令行复制并粘贴定点工具创建的子系统的路径。
点击从模型中收集当前值按钮以更新模型图,并允许查找表优化器自动收集优化过程所需的信息。点击下一步。

指定在优化中要使用的约束。对于此示例,使用默认值。要创建查找表,请点击优化。点击下一步。
点击替换原始函数。查找表优化器将 Math Function
exp模块替换为包含查找表逼近的新可变子系统。
验证具有查找表逼近的系统的行为
现在,在设系统已完全转换,验证系统是否仍满足您在转换前指定的容差。
在定点工具中,在工具条的验证部分中,点击用嵌入类型进行仿真。
定点工具仿真现在包含查找表逼近的模型,并将结果保存为
EmbeddedRun_2。工作流浏览器显示,在使用查找表逼近的模型中指定了容差的信号通过。
