主要内容

控件中以编程方式定义输入属性MATLAB文件

对于代码生成,您可以使用MATLAB®断言函数直接在MATLAB文件中定义主函数输入的属性。

如何用护肤品MATLAB编码器

使用断言函数调用标准MATLAB函数来指定主要函数输入的类、大小和复杂性。

属性指定输入属性时断言函数,请使用下列方法之一。使用提供的精确语法;不要修改它。

指定任何类

断言(ISA(参数,'class_name'))

设置输入参数参数MATLAB课程class_name.例如,设置输入类对于32位有符号整数,调用:

...断言(ISA(U,'Int32'));......

指定fi类

断言(ISFI(参数))断言(ISA(参数嵌入式。fi '))

设置输入参数参数MATLAB课程FI.(定点数字对象)。例如,设置输入类FI.,电话:

...断言(isfi (U));......

......断言(ISA(U,'嵌入式.FI'));......

您必须指定FI.类和numerictype.看到指定定点输入的数字类型.您也可以设置fimath属性,参见指定定点输入的FIMATH.如果不设置fimath属性,codegen使用MATLAB默认fimath价值。

指定结构类

断言(isstruct(参数))断言(ISA(参数,'struct'))

设置输入参数参数MATLAB课程塑造(结构体)。例如,设置输入类到一个塑造,电话:

...断言(isstruct (U));......

...断言(ISA(U,'STRUCT'));......

如果将输入参数的类设置为塑造,您必须按照它们在结构定义中显示的顺序指定所有字段的属性。

指定单元格数组类

断言(Iscell(参数)维护(isa (参数“细胞”))

设置输入参数参数MATLAB课程细胞(单元格阵列)。例如,设置输入类C到一个细胞,电话:

...断言(iscell (C));......

...断言(ISA(C,'Cell'));......

要指定单元格数组元素的属性,请参见指定单元格数组的属性

指定固定大小

Assert (all (size (参数) = =昏暗)))

设置输入参数参数尺寸的尺寸昏暗指定。例如,设置输入的大小对于一个3 × 2矩阵,调用:

...断言(所有(大小(u)== [3 2]));......

指定标量大小

Assert (isscalar (参数)) assert (all (size (参数)== [1]))

设置输入参数的大小参数标量。设置输入的大小标量,电话:

...断言(isscalar (U));......
...断言(所有(大小(U) = = [1]));......

指定可变大小输入的上界

断言(所有(大小(参数) < = (N0 N1…)));断言(所有(大小(参数) < [N0 N1…]));

设置输入参数的每个维度的上限大小参数.设置输入的上限大小要小于或等于一个3 × 2矩阵,调用:

断言((大小(U) < = 2 [3]));

笔记

您还可以指定使用可变大小输入的上限coder.varsize

使用固定和可变大小的尺寸指定输入

断言(所有(大小(参数)> = [m0 m1 ...]));断言(所有(大小(参数) < = (N0 N1…)));

当你使用断言(所有(大小(参数) > = [M0 M1…]))要指定输入参数的每个维度的较小绑定大小:

  • 还必须为输入参数的每个维度指定上限大小。

  • 对于每一个尺寸,K.,下界必须小于或等于上限吗Nk

  • 若要指定固定大小的维度,请将维度的上下边界设置为相同的值。

  • 边界必须是非负的。

来确定输入的第一个维度的大小,并将第2维设置为可变大小,上限为2,调用:

断言(所有(大小(U) > = 0 [3]));断言((大小(U) < = 2 [3]));

指定单个尺寸的大小

断言(大小(参数K.) = =Nk);断言(大小(参数K.) < =Nk);断言(大小(参数K.)<Nk);

您可以同时指定单个维度和所有维度。您还可以指定单个维度,而不是同时指定所有维度。以下规则适用:

  • 必须至少一次指定每个维度的大小。

  • 最后一个维度规范优先于前面的规范。

设置维度的上限大小K.的输入参数参数.设置输入第一个维度的上限大小到3,打电话:

断言(大小(U, 1) < = 3)

修复输入的第二维度的大小2,电话:

断言(大小(U, 2) = = 2)

指定的输入

断言(Isreal(参数) )

指定输入参数参数是真实的。指定输入是真实的,叫:

...断言(Isreal(U));......

指定复杂的输入

Assert (~isreal (参数) )

指定输入参数参数是复杂的。指定输入很复杂,打电话:

...断言(~伊斯雷尔(U));......

指定定点输入的数字类型

Assert (isequal (numerictype (Fiparam.),T.) )

设置numerictype的属性FI.输入参数Fiparam.numerictype目的T..例如,要指定numerictype定点输入的性质作为签名numerictype目的T.具有32位字长度和30位分数长度,请使用以下代码:

% # codegen…定义numerictype对象。T = numerictype(1,32, 30);%设置输入U的numerictype属性为T。assert(isequal(numerictype(U),T));......

指定numerictype对于一个变量不自动指定该变量为固定点。您必须指定FI.类和numerictype

指定定点输入的FIMATH

Assert (isequal (fimath (Fiparam.),F) )

设置fimath的属性FI.输入参数Fiparam.fimath目的F.例如,要指定fimath定点输入的性质这样它就在整数溢出时,使用以下代码:

% # codegen…定义fimath对象。F = fimath(“OverflowMode”、“饱和”);%设置输入U的fimath属性为F。assert(isequal(fimath_u),F));......
如果您没有指定fimath属性的使用断言codegen使用MATLAB默认fimath价值。

指定输入的多个属性

断言(功能1参数)&&function2.参数)&&功能3.参数) &&…

指定一个或多个输入的类、大小和复杂性断言函数调用。例如,下面的代码指定了该输入是一个二重复数,3 × 3矩阵和输入吗V.是一个16位无符号整数:

% # codegen…断言(isa (U,“双”)& & ~伊斯雷尔(U) & &(大小(U) = = 3 [3]) & & isa (V, ' uint16 '));......

使用assert函数的规则

使用时断言函数要指定主函数输入的属性,请遵循以下规则:

  • 调用断言函数位于主要函数的开头,在控制流操作之前,例如如果语句或子程序调用。

  • 不要打电话断言条件构造中的函数,例如如果为了,开关语句。

  • 对于定点输入,必须同时指定FI.类和numerictype.看到指定定点输入的数字类型.您也可以设置fimath属性。看到指定定点输入的FIMATH.如果不设置fimath属性,codegen使用MATLAB默认fimath价值。

  • 如果将输入参数的类设置为塑造,您必须以它们在结构定义中显示的顺序指定所有字段的类,大小和复杂性。

  • 当你使用断言(所有(大小(参数) > = [M0 M1…]))要指定输入参数的每个维度的较小绑定大小:

    • 还必须为输入参数的每个维度指定上限大小。

    • 对于每一个尺寸,K.,下界必须小于或等于上限吗Nk

    • 若要指定固定大小的维度,请将维度的上下边界设置为相同的值。

    • 边界必须是非负的。

  • 如果指定单个尺寸,则适用以下规则:

    • 必须至少一次指定每个维度的大小。

    • 最后一个维度规范优先于前面的规范。

指定主输入的常规属性

在以下代码摘录中,主MATLAB功能mcspecgram有两个输入:pennywhistle赢得.代码指定这些输入的以下属性。

输入 财产 价值
pennywhistle 班级 int16
尺寸 220500-by-1矢量
复杂性 真正的(默认)
赢得 班级
尺寸 1024 - 1的向量
复杂性 真正的(默认)

%#codegen函数y = McSpecgram (pennywhistle,win) nx = 220500;nfft = 1024;断言(isa (pennywhistle int16));Assert (all(size(pennywhistle) == [nx 1]));断言(isa(赢,“双”));Assert (all(size(win) == [nfft 1]));......

或者,您可以为一个或多个输入组合属性规范断言命令:

%#codegen函数y = McSpecgram (pennywhistle,win) nx = 220500;nfft = 1024;断言(ISA(PennyWhistle,'Int16')&&全部(大小(pennywhistle)== [nx 1]));断言(ISA(赢,'双')&&全部(大小(win)== [nfft 1]));......

指定主要定点输入的属性

要指定定点输入,必须安装定点设计器™软件。

在下面的例子中,主要是MATLAB函数mcsqrtfi.接受一个定点输入X.该代码为该输入指定以下属性。

财产 价值
班级 FI.
numerictype numerictype目的T.,如主要功能中所述
fimath fimath目的F,如主要功能中所述
尺寸 标量
复杂性 真正的(默认)

函数y = mcsqrtfi(x)%#codegen t = numerictype('wordlength',32,'fractionlength',23,...'签名',true);f = fimath('summode','specifyprecision',...'sumwordlength',32,'sumfractionlength',23,...'productmode','specifyprecision',...'professwordlength',32,'productfractionlength',23);断言(ISFI(x));断言(Isequal(Numerictype(x),t));断言(Isequal(Fimath(x),f)));y = sqrt(x);

您必须指定FI.类和numerictype

指定单元格数组的属性

要指定类细胞(单元格数组),使用下列语法之一:

断言(Iscell(参数)维护(isa (参数“细胞”))

例如,设置输入类C细胞使用:

...断言(iscell (C));......

...断言(ISA(C,'Cell'));......

您还可以指定单元格数组的大小和单元格数组元素的属性。指定的元素数量决定单元格数组是同质的还是异构的。看到单元格数组的代码生成(MATLAB编码器)

如果只指定第一个元素的属性,则单元格数组是同构的。例如,以下代码指定了C是1x3均匀的电池阵列,其元素为1x1双倍。

...断言(ISA(C,'Cell'));assert(all(size(C) == [1 3]));断言(isa (C{1},“双”));......

如果仅指定第一个元素的属性,还指定到单元数组的结构类型名称,则单元格数组是异构的。每个元素都具有第一元素的属性。例如,以下代码指定了C为1x3异质细胞阵列。每个元素都是1x1 double。

...断言(ISA(C,'Cell'));assert(all(size(C) == [1 3]));断言(isa (C{1},“双”));Coder.cstructName(C,'MyName');......

如果指定每个元素的属性,则单元格数组是异构的。例如,下面的代码指定了一个1x2的异构单元格数组,它的第一个元素是1x1 char,第二个元素是1x3 double。

...断言(ISA(C,'Cell'));断言(所有(c)== [1 2]));断言(ISA(c {1},'char')));断言(所有(大小(c {2})== [1 3]));断言(isa (C{2},“双”));......

如果指定多个元素,则不能指定单元格数组为可变大小,即使所有元素具有相同的属性。例如,下面的代码指定了一个可变大小的单元格数组。因为代码指定了第一个和第二个元素的属性,所以代码生成失败。

...断言(ISA(C,'Cell'));assert(all(size(C) <= [1 2]));断言(isa (C{1},“双”));断言(isa (C{2},“双”));......

在前面的示例中,如果只指定第一个元素,则可以指定单元格数组为可变大小。例如:

...断言(ISA(C,'Cell'));assert(all(size(C) <= [1 2]));断言(isa (C{1},“双”));......

指定标量结构的类和大小

假设你定义S.为如下标量MATLAB结构:

S =结构(“r”、双(1),“我”,int8 (4));
以下代码指定功能输入的属性S.及其领域:
函数y = fcn%#codegen%指定输入的类为struct。断言(arestruct(s));%在您定义它们的顺序中指定字段R和I%的类和大小。断言(ISA(S.R,'双'));断言(ISA(S.I,'INT8'); ...

在大多数情况下,当您没有显式地为属性指定值时,Matlab Coder™使用默认值 - 除了结构字段之外。在结构中命名字段的唯一方法是设置至少一个属性。至少,您必须指定结构字段的类。

指定结构数组的类和大小

对于结构数组,必须选择数组的代表性元素来指定每个字段的属性。例如,假设您已经定义了S.为以下MATLAB结构的1 × 2数组:

S =结构(‘r’,{双(1)双(2)},‘我’,{int8 (4), int8 (5)});

以下代码指定结构输入的每个字段的类和大小S.通过使用数组的第一个元素:

%#codegen函数y = fcn(s)%指定输入s的类为struct。断言(arestruct(s));基于数组的第一个元素,%指定字段R和I%的大小。断言(所有(size(s)== [1 2]));断言(ISA(S(1).r,'双'));断言(ISA(S(1).i,'Int8'));
在结构中命名字段的唯一方法是设置至少一个属性。至少,您必须指定所有字段的类。