Mercurial > hg > ltpda
diff m-toolbox/m/gui/gltpda/g_arrmult.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/m/gui/gltpda/g_arrmult.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,108 @@ +function g_arrmult(block) + +% This is the automatic function wrapper +% ======================================================================== +% ==================== level-2 M file S-function ========================= +% ======================================================================== +% This wrapper is the automatic function, called by every function block +% in Simulink, able to execute m-file functions retrieving from Simulink: +% (1) the pointer to the AO(s) to be analyzed, coming in as input of the +% corresponding block (ie, the DATA), +% (2) the name of the function to be applied on those data, from the tag +% of the currently executed block (ie, the true FUNCTION), +% (3) the parameters for that particular block, retrieved from the global +% shared workspace by the handle of the block (ie, the PARAMETERS). +% +% The output is then generated as: +% OUTPUT = FUNCTION(DATA,PARAMETERS) +% +% This output in the end is saved into the global array containing all +% the AOs (ie, all the DATA go together with other data): thus this output +% will be freely accessible by all the other functions. +% +% The only real output to Simulink will be just the ordinal number of the +% so-generated AO into the global array of AOs. +% +% ======================================================================= +% For UNIVARIATE analysis functions +% ======================================================================= +% (the difference with the other function, 'ltpdasimmulti', is the +% dimension of the output port, here set = DimInputPorts) +% +% +% $Id: g_arrmult.m,v 1.1 2008/03/01 13:43:20 nicola Exp $ + +setup(block); + +%% +function setup(block) +% global LTPDAinvar loopstatus + + + %% Register dialog parameter: none, because they're retrieved directly + %% from the memory. This will prevent the user to modify the parameters + %% outside the proper parameters panel: + block.NumDialogPrms = 0; + + %% Register number of input and output ports + block.NumInputPorts = 1; + block.NumOutputPorts = 1; + + %% Setup functional port properties to dynamically inherited. + block.SetPreCompInpPortInfoToDynamic; + block.SetPreCompOutPortInfoToDynamic; + + block.InputPort(1).DirectFeedthrough = true; + block.InputPort(1).DatatypeID = 0; + block.InputPort(1).Complexity = 0; + block.OutputPort(1).DatatypeID = 0; + block.OutputPort(1).Complexity = 0; +block.OutputPort(1).Dimensions = 1; +%(block.InputPort(1).Dimensions)^2; + block.SampleTimes = [0 0]; + block.SetAccelRunOnTLC(false); + + %% Register methods + block.RegBlockMethod('SetInputPortSamplingMode',@SetInpPortFrameData); + block.RegBlockMethod('SetInputPortDimensions', @SetInpPortDims); +% block.RegBlockMethod('SetOutputPortDimensions', @SetOutPortDims); + block.RegBlockMethod('Outputs', @Outputs); + + function SetInpPortFrameData(block, idx, fd) + block.InputPort(1).SamplingMode = fd; + block.OutputPort(1).SamplingMode = fd; + + function SetInpPortDims(block, idx, di) + block.InputPort(idx).Dimensions = di; +% outdims=(block.InputPort(1).Dimensions)^2; +% block.OutputPort(1).Dimensions = outdims; + +% function SetOutPortDims(block, idx, di) +% block.OutputPort(idx).Dimensions = 1; + + +%% +function Outputs(block) +global LTPDAinvar + +if length(block.InputPort(1).Data)~=2 + block.OutputPort(1).Data = block.InputPort(1).Data; + disp('========================================================') + disp('Something''s wrong. Please check ltpdaarrmult.m function') + disp('========================================================') + return +end + + outdata = LTPDAinvar{block.InputPort(1).Data(1)} .* LTPDAinvar{block.InputPort(1).Data(2)}; + outdata = num2cell(outdata); + + lineHandles = get_param(get_param(gcbh,'Parent'),'LineHandles'); + signalName = get(lineHandles.Outport,'Name'); + if ~isempty(signalName) && numel(outdata)==1 + outdata{1} = setnh(outdata{1},'name',signalName); + end + xx = size(LTPDAinvar,1); + LTPDAinvar(xx+1,:) = [outdata,0]; + block.OutputPort(1).Data = xx+1; + +%endfunction