Как написать S-функцию, генерирующую сигнал более двух измерений?

Судя по всему, я не могу сгенерировать сигнал размером [3x3x3]:

function Test_SF_02(block)
% Level-2 MATLAB file S-Function.

    setup(block);

function setup(block)

    % Register number of ports and parameters
    block.NumInputPorts  = 0;
    block.NumOutputPorts = 1;
    block.NumDialogPrms  = 0;

    % Setup functional port properties to dynamically inherited
    block.SetPreCompOutPortInfoToDynamic;

    % Register the properties of the output port
    block.OutputPort(1).SamplingMode   = 'Sample';
    %block.OutputPort(1).DimensionsMode = 'Variable';
    block.OutputPort(1).DimensionsMode = 'Fixed';
    block.OutputPort(1).Dimensions = [3 3 3];



    % Register sample times
    %  [-1, 0] : Inherited sample time
    block.SampleTimes = [-1 0];

    % Register methods called at run-time
    block.RegBlockMethod('Outputs', @Outputs);


function Outputs(block)

    block.OutputPort(1).Data = zeros(3,3,3);

ошибка возникает при назначении block.OutputPort(1).Dimensions и говорит

Невозможно установить размеры выходного порта 1 'Test_01/Level-2 MATLAB S-Function' на [3x3x3]. Этот блок не настроен для обработки сигналов размерностей больше, чем 2 измерения.

Почему? Я видел блоки, генерирующие кадры изображения, т.е. MxNx3 матрицы.

ОБНОВЛЕНИЕ

Это не дублирующий вопрос.


person Suzan Cioc    schedule 17.07.2013    source источник
comment
возможный дубликат Как написать S-функцию с переменный размер выходного сигнала?   -  person Oleg    schedule 18.07.2013
comment
Возможный дубликат, указанный выше, - это вопрос о наличии сигнала, который может различаться по размеру на каждом временном шаге (т.е. быть вектором из 10 элементов в момент времени t0, затем вектором из 8 элементов в момент времени t1, затем вектором из n элементов в момент времени tn) . Это не имеет ничего общего с 3D-матрицами, о которых идет речь в этом вопросе.   -  person Phil Goddard    schedule 14.02.2018


Ответы (1)


В методе настройки вам нужно использовать метод

block.AllowSignalsWithMoreThan2D = 1;

Обычно это делается сразу после определения количества входов, выходов и параметров.

Также обратите внимание, что, будучи исходным блоком, Simulink предпочел бы, чтобы вы указали его шаг расчета, а не унаследовали его обратно.

person Phil Goddard    schedule 18.07.2013