assert
Можно использовать MATLAB®
assert
функция для определения свойств входных параметров первичной функции непосредственно в файле MATLAB.
Используйте assert
функция для вызова стандартных функций MATLAB для определения класса, размера и сложности входных параметров первичной функции.
assert ( isa ( param, 'class_name') )
Устанавливает входной параметр param
к class_name класса MATLAB. Для примера задать класс входа U
в 32-битное целое число со знаком вызовите:
... assert(isa(U,'embedded.fi')); ...
Примечание
Если вы задаете класс входного параметра равным fi
, вы также должны задать его numerictype
, см. «Задание числового типа входа с фиксированной точкой». Можно также задать его fimath
свойства, см. «Задание fimath входа с фиксированной точкой».
Если вы задаете класс входного параметра равным struct
необходимо задать свойства каждого поля в структуре в том порядке, в котором вы задаете поля в определении структуры.
assert ( isfi ( param ) ) assert ( isa ( param, 'embedded.fi' ) )
Устанавливает входной параметр param
в класс MATLAB fi
(численный объект с фиксированной точкой). Для примера задать класс входа U
на fi
, вызовите:
... assert(isfi(U)); ...
... assert(isa(U,'embedded.fi')); ...
Примечание
Если вы задаете класс входного параметра равным fi
, вы также должны задать его numerictype
, см. «Задание числового типа входа с фиксированной точкой». Можно также задать его fimath
свойства, см. «Задание fimath входа с фиксированной точкой».
assert ( isstruct ( param ) )
Устанавливает входной параметр param
в класс MATLAB struct
(структура). Для примера задать класс входа U
в struct
, вызовите:
... assert(isstruct(U)); ...
или
... assert(isa(U,'struct')); ...
Примечание
Если вы задаете класс входного параметра равным struct
необходимо задать свойства каждого поля в структуре в том порядке, в котором вы задаете поля в определении структуры.
assert(iscell( param)) assert(isa(param, 'cell'))
Устанавливает входной параметр param
в класс MATLAB cell
(массив ячеек). Для примера задать класс входа C
в cell
, вызовите:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Чтобы задать свойства элементов массива ячеек, см. Раздел «Задание свойств массивов ячеек».
assert ( all ( size (param) == [dims ] ) )
Устанавливает входной параметр param
к размеру, заданному в размерностях dims
. Для примера задать размер входа U
в матрицу 3 на 2 вызовите:
... assert(all(size(U)== [3 2])); ...
assert ( isscalar (param ) ) assert ( all ( size (param) == [ 1 ] ) )
Устанавливает размер входа параметра param
к скаляру. Для примера задать размер входа U
в скаляр вызовите:
... assert(isscalar(U)); ...
... assert(all(size(U)== [1])); ...
assert ( isreal (param ) )
Задает, что входной параметр param
реально. Для примера, чтобы задать этот вход U
реально, вызов:
... assert(isreal(U)); ...
assert ( ~isreal (param ) )
Задает, что входной параметр param
комплексная. Для примера, чтобы задать этот вход U
комплексно, вызов:
... assert(~isreal(U)); ...
assert ( isequal ( numerictype ( fiparam ), T ) )
Устанавливает numerictype
свойства fi
входной параметр fiparam
в numerictype
T объекта
. Например, чтобы задать numerictype
свойство входного сигнала с фиксированной точкой U
как подписанный numerictype
T объекта
с 32-битным размером слова и 30-битной дробью используйте следующий код:
... % Define the numerictype object. T = numerictype(1, 32, 30); % Set the numerictype property of input U to T. assert(isequal(numerictype(U),T)); ...
assert ( isequal ( fimath ( fiparam ), F ) )
Устанавливает fimath
свойства fi
входной параметр fiparam
в fimath
F объекта
. Например, чтобы задать fimath
свойство входного сигнала с фиксированной точкой U
чтобы он насыщался при целочисленном переполнении, используйте следующий код:
... % Define the fimath object. F = fimath('OverflowAction','Saturate'); % Set the fimath property of input U to F. assert(isequal(fimath(U),F)); ...
assert ( function1 ( params ) && function2 ( params ) && function3 ( params ) && ... )
Задает класс, размер и сложность одного или нескольких входов с помощью одной assert
вызов функции. Для примера следующий код задает этот вход U
- двойная, комплексная, матрица 3 на 3 и входная V
является 16-битным беззнаковым целым числом:
... assert(isa(U,'double') && ~isreal(U) && all(size(U) == [3 3]) && isa(V,'uint16')); ...
Следуйте этим правилам при использовании assert
функция для задания свойств входных параметров первичной функции:
Функции assert
функционирует в начале основной функции, перед любыми операциями управления потоком, такими как if
операторы или стандартные подпрограммы.
Не вызывайте assert
функции внутри условных конструкций, таких как if
, for
, while
, и switch
операторы.
Если вы задаете класс входного параметра равным fi
:
Вы также должны задать его numerictype
, см. «Задание числового типа входа с фиксированной точкой».
Можно также задать его fimath
свойства, см. «Задание fimath входа с фиксированной точкой».
Если вы задаете класс входного параметра равным struct
необходимо задать класс, размер и сложность каждого поля в структуре в том порядке, в котором вы задаете поля в определении структуры.
В следующем примере основная функция MATLAB emcsqrtfi
принимает один вход с фиксированной точкой: x
. Код задает следующие свойства для этого входа:
Свойство | Значение |
---|---|
класс | fi |
numerictype | numerictype T объекта , как указано в основной функции |
fimath | fimath F объекта , как указано в основной функции |
размер | scalar (по умолчанию) |
сложность | real (по умолчанию) |
function y = emcsqrtfi(x) T = numerictype('WordLength',32,'FractionLength',23,... 'Signed',true); F = fimath('SumMode','SpecifyPrecision',... 'SumWordLength',32,'SumFractionLength',23,... 'ProductMode','SpecifyPrecision',... 'ProductWordLength',32,'ProductFractionLength',23); assert(isfi(x)); assert(isequal(numerictype(x),T)); assert(isequal(fimath(x),F)); y = sqrt(x);
Чтобы задать класс MATLAB cell
(массив ячеек), используйте один из следующих синтаксисов:
assert(iscell(param)) assert(isa( param, 'cell'))
Для примера задать класс входа C
на cell
, использовать:
... assert(iscell(C)); ...
или
... assert(isa(C, 'cell')); ...
Можно также задать размер массива ячеек и свойства элементов массива ячеек. Количество элементов, которые вы задаете, определяет, является ли массив ячеек однородным или неоднородным. Смотрите Генерацию кода для массивов ячеек (MATLAB Coder).
Если вы задаете свойства только первого элемента, массив ячеек однороден. Например, следующий код указывает, что C
представляет собой однородный массив ячеек 1x3 с элементами 1x1 double.
... assert(isa(C, 'cell')); assert(all(size(C) == [1 3])); assert(isa(C{1}, 'double')); ...
Если вы задаете свойства каждого элемента, массив ячеек неоднороден. Например, следующий код задает 1x2 гетерогенный массив ячеек, первый элемент которого равен 1x1 char, а второй элемент равен 1x3 double.
... assert(isa(C, 'cell')); assert(all(size(C) == [1 2])); assert(isa(C{1}, 'char')); assert(all(size(C{2}) == [1 3])); assert(isa(C{2}, 'double')); ...
Если вы задаете больше одного элемента, вы не можете задать, что массив ячеек имеет переменный размер, даже если все элементы имеют одинаковые свойства. Например, следующий код задает массив ячеек переменного размера. Поскольку код задает свойства первого и второго элементов, генерация кода прекращает работать.
... assert(isa(C, 'cell')); assert(all(size(C) <= [1 2])); assert(isa(C{1}, 'double')); assert(isa(C{2}, 'double')); ...
В предыдущем примере, если вы задаете только первый элемент, можно задать, что массив ячеек имеет переменный размер. Для примера:
... assert(isa(C, 'cell')); assert(all(size(C) <= [1 2])); assert(isa(C{1}, 'double')); ...
Предположим, что вы определили S
как следующая скалярная структура MATLAB:
S = struct('r',double(1),'i',fi(4,true,8,0));
S
и его поля при передаче в качестве входа в вашу функцию MATLAB:function y = fcn(S) % Specify the class of the input as struct. assert(isstruct(S)); % Specify the size of the fields r and i % in the order in which you defined them. T = numerictype('Wordlength', 8,'FractionLength', ... 0,'signed',true); assert(isa(S.r,'double')); assert(isfi(S.i) && isequal(numerictype(S.i),T)); y = S;
Примечание
Единственный способ назвать поле в структуре - задать хотя бы одно из его свойств. Поэтому в предыдущем примере an assert
функция задает это поле S.r
имеет тип double
хотя double
является значением по умолчанию.
Для массивов структур необходимо выбрать репрезентативный элемент массива для определения свойств каждого поля. Например, предположим, что вы определили S
как следующий массив структур MATLAB 1 на 2:
S = struct('r',{double(1), double(2)},'i',... {fi(4,1,8,0), fi(5,1,8,0)});
Следующий код задает класс и размер каждого поля ввода структуры S
использование первого элемента массива:
function y = fcn(S) % Specify the class of the input S as struct. assert(isstruct(S)); T = numerictype('Wordlength', 8,'FractionLength', ... 0,'signed',true); % Specify the size of the fields r and i % based on the first element of the array. assert(all(size(S) == [1 2])); assert(isa(S(1).r,'double')); assert(isfi(S(1).i) && isequal(numerictype(S(1).i),T)); y = S;
Примечание
Единственный способ назвать поле в структуре - задать хотя бы одно из его свойств. Поэтому в примере выше, assert
функция задает это поле S(1).r
имеет тип double
хотя double
является значением по умолчанию.