Как да напиша S-функция, генерираща сигнал с по-високи от 2 измерения?

Очевидно не мога да генерирам сигнал с размери [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-функция“ на [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