固定点设计器™软件提供优化参数,用于定点净斜率计算的部门,控制软件如何处理净斜率计算。要了解如何启用此优化,请参见使用整数划分来处理净斜率计算.
当定点斜率的变化不是2的幂时,需要进行净斜率计算。一般情况下,净斜率计算是用整数乘法和移位来实现的。在一定条件下,可以用整数除法或对净斜率进行有理逼近来实现净斜率的计算。其中一个条件是净斜率可以精确地表示为有理数分数或整数的倒数。在这种情况下,除法的实现给出了更精确的数值行为。根据编译器和嵌入式硬件的不同,除法实现可能比乘法和移位实现更可取。为合理近似和/或整数除法实现生成的代码可能需要更少的ROM或提高模型执行时间。
如果:
净斜率可以用分数近似或是整数的倒数。
除法比乘法更有效,然后在目标硬件上移位。
请注意
定点设计器软件不知道目标硬件。在选择此选项之前,请验证在目标硬件上,除法是否比乘法之后的移位更有效。
如果以下情况,这种优化不起作用:
该软件无法使用生产目标执行该部门长
数据类型,因此必须使用多字操作。
使用多字除法不会产生适合嵌入目标的代码。因此,在使用多字运算的模型中,不要使用除法来处理净斜率计算。如果您的模型包含使用多字操作的块,请更改这些块的字长以避免这些操作。
净斜率是2的功率为2或净斜率的合理近似,其中净斜率包含2的电源。
仅限二值点缩放,其中净斜率为2的功率,涉及在固定点字内移动二进制点。该缩放模式已经最小化了处理器算术运算的数量。
启用此优化:
在配置参数对话框,在数学和数据类型>数据类型窗格中,设置用于定点净斜率计算的部门来在
,或使用划分仅为整数的互互替换
有关更多信息,请参见用于定点净斜率计算的部门.
在硬件实现>设备详细信息窗格中,设置签名整数分裂圆配置参数到地面
要么零
,适用于您的目标硬件。如果,优化不会发生签名整数分裂圆参数是未定义的
.
请注意
将该参数设置为适合目标硬件的值。如果不这样做,可能会导致符合上定义的除法运算硬件实现窗格,但不适合目标硬件。
设置整数舍入模式需要净斜率计算的块(例如,产品,获得, 和数据类型转换) 到最简单的
或者匹配目标硬件的舍入模式。
请注意
您可以使用模型顾问提醒您,如果您没有正确配置模型以进行此优化。打开模型顾问并运行确定有问题的定点操作检查。有关更多信息,请参见确定将调用净斜率计算的块.
此示例说明了如何设置数学和数据类型>用于定点净斜率计算的部门参数在
提高数值精度。打开ex_net_slope1.
模型,在matlab®命令行输入:
目录(fullfile (docroot,'工具箱','fixpoint','例子') ex_net_slope1
为了产品在这个模型中,
这些值由描述的一般[斜率偏置]编码方案表示扩展: .
因为输入或输出没有偏见:
要么
网斜率为:
净斜坡产品块是7/11
.因为净斜率可以表示为一个由小整数组成的小数值,所以可以使用在
设定的用于定点净斜率计算的部门优化参数如果您的型号和硬件配置合适。有关更多信息,请参见何时用除法进行定点网斜率计算.
要设置模型并运行模拟:
为了持续的堵塞VB.
,设置输出数据类型来Fixdt (1, 8, 0.7, 0)
.为了持续的堵塞vc.
,设置输出数据类型来Fixdt(1,8,0)
.
为了产品块,设置输出数据类型来Fixdt (1, 16, 1.1, 0)
.设置整数舍入模式来最简单的
.
在配置参数对话框,设置硬件实现>设备详细信息>签名整数分裂圆配置参数到零
.
设置数学和数据类型>用于定点净斜率计算的部门来离开
.
在你的模型金宝app®模型窗口,在模拟选项卡上,单击运行.
因为仿真使用乘法后跟换档来处理净斜率计算,因此发生净斜率精度损耗。这种精度损失导致数值不准确:计算的产品是306.9
,而不是308.
如你所料。
请注意
您可以设置定点设计器软件,以便在定点常量发生精度损失时提供警报。有关更多信息,请参见净斜坡和净偏置精度.
设置数学和数据类型>用于定点净斜率计算的部门来在
.
保存模型,并再次进行模拟。
该软件实现净斜率计算使用有理逼近,而不是乘法后的移位。计算得到的乘积为308.
如你所料。
优化适用于此模型,因为:
净斜率表示为分数和分母中的小整数的分数。
的硬件实现>设备详细信息>签名整数分裂圆配置参数设置为零
.
请注意
此设置必须匹配您的目标硬件舍入模式。
的整数舍入模式的产品模型中的块被设置为最简单的
.
该模型不使用多字操作。
此示例显示了如何设置优化参数数学和数据类型>用于定点净斜率计算的部门来在
提高了生成的代码的效率。
请注意
仅当除法比乘法更有效时,生成的代码才能效率更高,然后在目标硬件上偏移。
打开ex_net_slope2.
模型,在MATLAB命令行中输入:
目录(fullfile (docroot,'工具箱','fixpoint','例子') ex_net_slope2
为了产品在这个模型中,
这些值由描述的一般[斜率偏置]编码方案表示扩展: .
因为输入或输出没有偏见:
要么
网斜率为:
净斜坡产品块是9/10
.
同样,对于数据类型转换在这个模型中,
没有偏见。因此,网斜率是
.这个方块的净斜率也是9/10
.
因为净斜率可以表示为分数,所以您可以设置数学和数据类型>用于定点净斜率计算的部门优化参数到在
如果您的模型和硬件配置是合适的。有关更多信息,请参见何时用除法进行定点网斜率计算.
要设置模型并生成代码:
为了inport.堵塞va.
,设置输出数据类型来Fixdt(1,8,9 / 10,0)
;为了inport.堵塞VB.
,设置输出数据类型来int8
.
为了数据类型转换块,设置整数舍入模式来最简单的
.设置输出数据类型来int16
.
为了产品块,设置整数舍入模式来最简单的
.设置输出数据类型来int16
.
设置硬件实现>设备详细信息>签名整数分裂圆配置参数到零
.
设置数学和数据类型>用于定点净斜率计算的部门来离开
.
来自Simulin金宝appk.应用程序选项卡,选择嵌入式编码器.在C代码选项卡上,单击建造.
概念上,净斜率计算是9/10
要么0.9
:
Vc = 0.9 * Va;Vm = 0.9 * Va * Vb;
生成的代码使用了乘法和移位:
% For conversion Vc = (int16_T)(Va * 115 >> 7);% For the乘法Vm = (int16_T)((Va * Vb >> 1) * 29491 >> 14);
净斜率计算的理想值是0.9
.在生成的代码中,网络斜率计算的近似值是29491 >> 15 = 29491/2 ^ 15 = 0.899993896484375
.这种近似带来了数值上的误差。例如,使用带有常量输入的相同模型将产生以下结果。
在具有输入的原始模型中va.
和VB.
,设置数学和数据类型>用于定点净斜率计算的部门参数在
,更新图表并再次生成代码。
生成的代码现在使用整数句而不是乘法,然后换档:
转换Vc =(int16_t)的%(va * 9/10);乘法VM =(int16_t)的%(va * vb * 9/10);
在生成的代码中,Net斜率计算的值现在是理想的值0.9
.使用除法,结果在数值上是准确的。
在具有恒定输入的模型中,设置数学和数据类型>用于定点净斜率计算的部门参数在
并模拟模型。
优化为此模型工作,因为:
净斜率可以用分子和分母上各有小整数的分数表示。
硬件实现>设备详细信息>签名整数分裂圆配置参数设置为零
.
请注意
此设置必须匹配您的目标硬件舍入模式。
为了产品和数据类型转换块在模型中整数舍入模式被设置为最简单的
.
模型不使用多字操作。
设置数学和数据类型>用于定点净斜率计算的部门参数使用划分仅为整数的互互替换
仅在净斜率是整数的倒数的情况下触发优化。此设置导致单个整数划分以处理净斜率计算。