主要内容

提出基于定点数据类型派生的范围

这个例子展示了如何提出基于静态范围使用定点数据类型codegen函数。提出了基于派生数据类型范围的优势是,您不需要提供测试文件,锻炼你的算法对其完整的操作范围。运行这些测试文件通常需要很长时间,这样你就可以节省时间范围而派生出来的。

请注意

派生的范围分析不支持非标量变量。金宝app

先决条件

完成这个例子中,您必须安装以下产品:下载188bet金宝搏

创建一个新的文件夹,复制相关文件

  1. 例如,创建一个本地工作目录c: \ dti

  2. 改变docroot \工具箱\ fixpoint \例子文件夹中。在MATLAB命令行,输入:

    cd (fullfile (docroot,“工具箱”,“fixpoint”,“示例”))

  3. 复制dti.mdti_test.m文件下载到本地工作目录。

    类型 的名字 描述
    函数代码 dti.m MATLAB函数入口点
    测试文件 dti_test.m MATLAB脚本测试dti.m

唯一的功能

dti_test函数

设置定点配置对象

创建一个定点配置对象和配置测试文件的名字。

fixptcfg = coder.config (“fixpt”);fixptcfg。TestBenchName =“dti_test”;

指定设计范围

指定设计范围信息贸易工业部函数输入参数u_in

fixptcfg.addDesignRangeSpecification (“唯一”,“u_in”,-1.0,1.0)

启用策划使用模拟数据检查员

选择运行测试文件来验证所生成的定点MATLAB代码。日志输入和输出比较的策划,并选择使用仿真数据检查员绘制结果。

fixptcfg。TestNumerics = true;fixptcfg。LogIOForComparisonPlotting = true;fixptcfg。PlotWithSimulationDataInspector = true;

建立了C代码生成配置对象

创建一个配置对象的代码生成一个静态库。使代码生成报告。

cfg = coder.config (“自由”);cfg。GenerateReport = true;

范围和生成定点代码

使用codegen函数将浮点MATLAB函数,贸易工业部,定点C代码。设置的默认字长16定点数据类型。

fixptcfg。ComputeDerivedRanges = true;fixptcfg。ComputeSimulationRanges = false;fixptcfg。DefaultWordLength = 16;%获得范围和生成定点代码codegen-float2fixedfixptcfg配置cfg贸易工业部

codegen分析了浮点代码。因为你没有指定的输入类型贸易工业部函数,转换过程推断类型通过模拟测试文件。然后转换过程中范围的变量算法。它使用这些派生的范围提出定点类型变量。转换完成后,它生成一个类型的建议报告。

查看导出范围信息

单击链接类型的建议报告贸易工业部函数,dti_report.html

报告在web浏览器中打开。

视图生成的定点MATLAB代码

codegen生成一个定点的版本贸易工业部函数,dti_fxpt.m,包装器函数调用dti_fxpt。这些文件生成的codegen \ dti \ fixpt文件夹在您的本地工作目录。

函数[y, clip_status] = dti_fixpt (u_in) % # codegen %离散时间积分器在MATLAB % %向前欧拉方法,也称为矩形,或左%近似。结果表达式的输出块' n ' %一步(n) = y (n - 1) + K * u (n - 1) %调频= get_fimath ();init_val = fi (1 0 1 0 fm);gain_val = fi (1 0 1 0 fm);limit_upper = fi (500 0 9 0, fm);limit_lower = fi(0 -500, 10日,fm);%变量来保存状态之间连续调用这个街区持久u_state;如果isempty (u_state) u_state = fi (init_val + fi (1 0 1 0 fm), 1, 16日6日fm);%计算输出如果(u_state > limit_upper) y = fi (fm limit_upper 1 16日6日);clip_status = fi(2, 1, 16日,13日,fm); elseif (u_state >= limit_upper) y = fi(limit_upper, 1, 16, 6, fm); clip_status = fi(-1, 1, 16, 13, fm); elseif (u_state < limit_lower) y = fi(limit_lower, 1, 16, 6, fm); clip_status = fi(2, 1, 16, 13, fm); elseif (u_state <= limit_lower) y = fi(limit_lower, 1, 16, 6, fm); clip_status = fi(1, 1, 16, 13, fm); else y = fi(u_state, 1, 16, 6, fm); clip_status = fi(0, 1, 16, 13, fm); end % Update State tprod = fi(gain_val * u_in, 1, 16, 14, fm); u_state(:) = y + tprod; end function fm = get_fimath() fm = fimath('RoundingMethod', 'Floor', 'OverflowAction', 'Wrap', 'ProductMode', 'FullPrecision', 'MaxProductWordLength', 128, 'SumMode', 'FullPrecision', 'MaxSumWordLength', 128); end

比较浮点和定点运行

因为你选择记录输入和输出比较情节和使用仿真数据检查员对这些情节,检查员打开仿真数据。

您可以使用模拟数据检查员将浮点和定点运行信息和比较结果。例如,比较浮点和定点值输出y,在比较选项卡上,选择y,然后单击比较这两种

仿真数据检查显示一个基线浮点和定点跑的情节以及它们之间的区别。

视图生成的定点C代码

查看代码生成C代码生成报告,单击查看报告链接如下类型的建议报告。

代码生成报告打开并显示生成的代码dti_fixpt.c

另请参阅

|

相关的话题