中以编程方式定义输入属性MATLAB文件
对于代码生成,可以使用MATLAB®断言
函数直接在MATLAB文件中定义主要函数输入的属性。
如何使用assert withMATLAB编码器
使用断言
函数调用标准MATLAB函数,以指定主要函数输入的类、大小和复杂性。
属性指定输入属性时断言
函数,使用下列方法之一。使用所提供的正确语法;不要修改它。
指定任意类
断言(isa (参数”,class_name'))
设置输入参数参数
到MATLAB类class_name
.例如,设置输入的类U
对一个32位有符号整数,调用:
...断言(isa (U, ' int32 '));...
指定fi类
断言(isfi (参数)断言(isa (参数嵌入式。Fi’)
设置输入参数参数到MATLAB类fi
(定点设计师)(定点数值对象)。例如,设置输入的类U
来fi
,电话:
...断言(isfi (U));...
或
...断言(isa (U, ' embedded.fi '));...
属性必须同时指定fi
类和numerictype
(定点设计师).看到指定定点输入的数字类型.您还可以设置fimath
(定点设计师)属性,看到指定定点输入的fimath.如果不设置fimath
(定点设计师)属性,codegen
使用MATLAB默认fimath
价值。
指定结构类
Assert (isstruct (参数)断言(isa (参数, 'struct'))
设置输入参数参数
到MATLAB类结构体
(结构)。例如,设置输入的类U
到一个结构体
,电话:
...断言(isstruct (U));...
或
...断言(isa (U,“结构”));...
如果将输入参数的类设置为结构体
时,必须按照结构定义中出现的顺序指定所有字段的属性。
指定单元格数组类
断言(iscell (参数)维护(isa (参数“细胞”))
设置输入参数参数
到MATLAB类细胞
(单元阵列)。例如,设置输入的类C
到一个细胞
,电话:
...断言(iscell (C));...
或
...断言(isa (C,“细胞”));...
要指定单元格数组元素的属性,请参见指定单元格数组的属性.
指定固定尺寸
Assert (all (size (参数) == [会变暗])
设置输入参数参数
到那个尺寸会变暗
指定。例如,设置输入的大小U
到一个3 × 2矩阵,调用:
...assert(all(size(U)== [3 2]);...
指定标量大小
断言(isscalar (参数)) assert (all (size (参数) == [1]))
设置输入参数的大小参数
标量。设置输入的大小U
要使用标量,调用:
...断言(isscalar (U));...
...断言(所有(大小(U) = = [1]));...
指定可变大小输入的上界
Assert (all(size(参数)<=[n0 n1…]);Assert (all(size(参数)<[n0 n1…]);
设置输入参数的每个维度的上限大小参数
.设置输入的上限大小U
要小于或等于3 × 2矩阵,调用:
断言((大小(U) < = 2 [3]));
请注意
还可以使用指定可变大小输入的上界coder.varsize
.
指定固定尺寸和可变尺寸的输入
Assert (all(size(参数)>=[m0 m1…]);Assert (all(size(参数)<=[n0 n1…]);
当你使用断言(所有(大小(参数>=[m0 m1…]))
指定输入参数的每个维度的下界大小:
您还必须为输入参数的每个维度指定一个上限大小。
对于每个维度,
k
,下界可
必须小于或等于上限Nk
.如果要指定固定大小的维度,则将维度的上界和下界设置为相同的值。
边界必须是非负的。
来固定输入的第一个维度的大小U
到3,并将第二个维度设置为变量大小,上限为2,调用:
断言(所有(大小(U) > = 0 [3]));断言((大小(U) < = 2 [3]));
指定单个尺寸的大小
断言(大小(参数,k
) = =Nk
);断言(大小(参数,k
) < =Nk
);断言(大小(参数,k
) <Nk
);
您可以同时指定单个维度和所有维度。您还可以指定单个维度,而不是同时指定所有维度。适用规则如下:
您必须至少一次指定每个维度的大小。
最后一个维度规范优先于前面的规范。
设置维度的上限大小k
输入参数参数
.设置输入的第一个维度的上限大小U
到3,呼叫:
断言(大小(U, 1) < = 3)
来固定输入的第二个维度的大小U
到2,呼叫:
断言(大小(U, 2) = = 2)
指定实际输入
断言(isreal (参数) )
指定输入参数参数
是真实的。要指定输入U
是真的,叫:
...断言(伊斯雷尔(U));...
指定复杂输入
Assert (~isreal (参数) )
指定输入参数参数
是复杂的。要指定输入U
是复杂的,叫:
...断言(~伊斯雷尔(U));...
指定定点输入的数字类型
Assert (isequal(数字类型(fiparam),T) )
设置numerictype
的属性fi
输入参数fiparam
到numerictype
(定点设计师)对象T
.例如,指定numerictype
定点输入的属性U
作为签署者numerictype
对象T
32位字长和30位分数长,使用以下代码:
% # codegen…定义数值类型对象。T =数字类型(1,32,30);将输入U的数值类型属性设置为T。assert(isequal(numerictype(U),T));...
指定numerictype
对于一个变量并不自动指定该变量为不动点。属性必须同时指定fi
类和numerictype
.
指定定点输入的fimath
断言(isequal (fimath (fiparam),F) )
设置fimath
的属性fi
输入参数fiparam
到fimath
(定点设计师)对象F
.例如,指定fimath
定点输入的属性U
因此,它饱和整数溢出,使用以下代码:
% # codegen…定义fimath对象。F = fimath('OverflowMode','saturate');将输入U的fimath属性设置为F。assert(isequal(fimath(U),F));...
fimath
属性的使用断言
,codegen
使用MATLAB默认fimath
价值。
指定输入的多个属性
维护(function1(参数个数) & &function2(参数个数) & &function3(参数个数) &&…)
指定一个或多个输入的类、大小和复杂性断言
函数调用。例如,下面的代码指定输入U
是一个双的,复的,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 - 1的向量 | |
复杂性 | 真正的 (默认) |
|
赢得 |
类 | 双 |
大小 | 1024 - 1的向量 | |
复杂性 | 真正的 (默认) |
%#代码原函数y = McSpecgram (pennywhistle,win) nx = 220500;NFFT = 1024;断言(isa (pennywhistle int16));断言(所有(大小(pennywhistle) == [nx 1]));断言(isa(赢,“双”));Assert (all(size(win) == [nfft 1]));...
或者,您可以组合一个或多个输入的属性规范断言
命令:
%#代码原函数y = McSpecgram (pennywhistle,win) nx = 220500;NFFT = 1024;Assert (isa(pennywhistle,'int16') && all(size(pennywhistle) == [nx 1]));断言(isa(赢,“双”)& &(大小(赢得)= = [nfft 1]));...
指定主定点输入的属性
要指定定点输入,必须安装定点设计器™软件。
在下面的例子中,主要是MATLAB函数mcsqrtfi
接受一个定点输入x
.代码为该输入指定了以下属性。
财产 | 价值 |
---|---|
类 | fi |
numerictype |
numerictype 对象T ,如primary函数中指定的 |
fimath |
fimath 对象F ,如primary函数中指定的 |
大小 | 标量 |
复杂性 | 真正的 (默认) |
function y = mcsqrtfi(x) %#codegen T = numerictype('WordLength',32,'FractionLength',23,…“签署”,真正的);F = fimath('SumMode',' specificprecision ',…“SumWordLength”,32岁的“SumFractionLength”,23岁……“ProductMode”、“SpecifyPrecision’,……“ProductWordLength”,32岁的“ProductFractionLength”,23);断言(isfi (x));断言(isequal (numerictype (x), T));断言(isequal (fimath (x), F));Y =√(x);
属性必须同时指定fi
类和numerictype
.
指定单元格数组的属性
要指定类细胞
(单元格数组),使用以下语法之一:
断言(iscell (参数)维护(isa (参数“细胞”))
例如,设置输入的类C
来细胞
使用:
...断言(iscell (C));...
或
...断言(isa (C,“细胞”));...
您还可以指定单元格数组的大小和单元格数组元素的属性。指定的元素数量决定单元格数组是同构的还是异构的。看到单元格数组的代码生成.
如果只指定第一个元素的属性,则单元格数组是同构的。例如,下面的代码指定了C
是一个1x3的齐次单元格数组,其元素为1x1双元。
...断言(isa (C,“细胞”));assert(all(size(C) == [1 3]));断言(isa (C{1},“双”));...
如果只指定了第一个元素的属性,但还为单元格数组分配了结构类型名称,则该单元格数组是异构的。每个元素都具有第一个元素的属性。例如,下面的代码指定了C
是一个1x3异构单元阵列。每个元素都是1x1 double。
...断言(isa (C,“细胞”));assert(all(size(C) == [1 3]));断言(isa (C{1},“双”));编码器。cstructname (C,“名字”);...
如果指定每个元素的属性,则单元格数组是异构的。例如,下面的代码指定了一个1x2异构单元格数组,其第一个元素是1x1 char,第二个元素是1x3 double。
...断言(isa (C,“细胞”));assert(all(size(C) == [1 2]));断言(isa (C {1}, char));assert(all(size(C{2}) == [1 3]));断言(isa (C{2},“双”));...
如果指定了多个元素,则不能指定单元格数组是可变大小的,即使所有元素都具有相同的属性。例如,下面的代码指定了一个可变大小的单元格数组。因为代码指定了第一个和第二个元素的属性,所以代码生成失败。
...断言(isa (C,“细胞”));assert(all(size(C) <= [1 2]));断言(isa (C{1},“双”));断言(isa (C{2},“双”));...
在前面的示例中,如果只指定第一个元素,则可以指定单元格数组是可变大小的。例如:
...断言(isa (C,“细胞”));assert(all(size(C) <= [1 2]));断言(isa (C{1},“双”));...
指定标量结构的类和大小
假设你定义了年代
为以下标量MATLAB结构:
S = struct('r',double(1),'i',int8(4));
年代
其领域:function y = fcn(S) %#codegen %指定输入的类为struct。断言(isstruct (S));按照定义字段r和字段i的顺序指定它们的类和大小。断言(isa (S.r '双层'));受到打击还得追溯到断言(isa (, ' int8 ');...
在大多数情况下,当您没有显式地为属性指定值时,MATLAB编码器™除了结构字段,使用默认值。在结构中命名字段的唯一方法是设置至少一个属性。至少,您必须指定结构字段的类。
指定结构数组的类和大小
对于结构数组,必须选择数组的代表性元素来指定每个字段的属性。例如,假设您已经定义了年代
如下1 × 2数组的MATLAB结构:
S =结构(‘r’,{双(1)双(2)},‘我’,{int8 (4), int8 (5)});
下面的代码指定了结构输入的每个字段的类和大小年代
通过使用数组的第一个元素:
指定输入S的类为struct。断言(isstruct (S));根据数组的第一个元素指定字段r和i的大小。assert(all(size(S) == [1 2]));断言(isa (S (1) r '双层'));断言(isa (S(1)我,' int8 '));