image thumbnail
from OCAMAWEB by Charles Lehalle
OCAMAWEB is a literate programming tool for MATLAB files (documentation of MATLAB code).

sinuso(gp, node, event, inputs, outputs)
function [node,outputs] = sinuso(gp, node, event, inputs, outputs)
% bla bla


%%  N\_SIGNAL\_SINUSOIDAL - gnration d'un signal sinusoidal
%      ceci est un test
%      $$out = A\, sin( {(t + d) \over p} +  \phi)$$

VERSION = 1.1;

node.status = 0 ;
% Le statut n'est utilis que lors du transfert (acc ou trf).

% Excution du module.

switch(event)
 case 'rst'

  if( node.version < VERSION )
    %<* Dclaration du module.
    node.author  = 'Charles-Albert Lehalle' ;
    node.mailto  = 'charles.lehalle@miriadtech.com' ;
    node.date    = '03-Jan-2002' ;
    node.version = VERSION ;
    %>
    
    %<** Initialisation des tats et paramtres.
    node.nargin = 1 ;
    node.nargout = 1 ;
    node.network = 0 ;
    
    node.param = [ 
	make_param('Priode','edit','on','50')
	make_param('Dure','edit','on','100')
	make_param('Phase','edit','on','0')
	make_param('Dlais','edit','on','10')
	make_param('Amplitude','edit','on','1')
		 ] ;
    
    node.plot = 'p_stdplot' ;
    
    node.state = [] ;
    %>
  end;
  
 case 'prm'
  %<*2 Validit des paramtres. c'est un commentaire
  % qui continue ici
  % tout cela utilise la variable |node|,
  node.assist = 0 ;
  
  % Renvoyer une erreur en cas de problme.
  % Modifier ventuellement le vecteur de paramtres pour une autre demande.
  node = isNumStrictPos( node, 'Priode');
  node = isNumStrictPos( node, 'Dure');
  node = isNum(          node, 'Phase');
  node = isNum(          node, 'Dlais');
  node = isNumStrictPos( node, 'Amplitude');
  %>
 case 'dbu'

  node.status = 0 ;
  node.state  = [ ] ;
  node.delay  = 0;
  
 case 'trf'
  % Excution du module.
  
  %< Transmission des anciennes donnes.
  if node.nargin==1
    %< encastrement 1
    a = 2;
    %< encastrement 2
    a = 3;
    %< encastrement 3
    a = 4;
    %>
    %>
    %>
    outputs{1} = inputs{1} ;
  end
  %>
  
  %< rcupration des paramtres
  p   = mparam(node, 'Priode');
  D   = mparam(node, 'Dure');
  phi = mparam(node, 'Phase');
  d   = mparam(node, 'Dlais');
  A   = mparam(node, 'Amplitude');
  if( ~isfield(node, 'delay') )
    dl = 0;
  else
    dl  = node.delay ;
  end;
  %>
  
  %< gnration du signal
  outputs{1}.value = A * sin( ((1:D) + dl) / p + phi)';
  outputs{1}.name  = 'sinusoidale';
  %>
  
  node.delay = dl + d;
  
  %< Cas itratif.
  % sacr test
  if ~isempty(node.state)
    node.state = node.state - 1 ;
    if node.state
      node.status = 1 ;
    else
      node.status = 0 ;
    end
  end
  %>
  
 case 'fin'
  node.state = [] ;
  
end

%< fonctions de vrification des paramtres: poritif?
function a_node = isNumPos( a_node, name, recup)
 recup = mparam(a_node, name);
 if isempty(recup) | ~isnumeric(recup) | (recup < 0)
   a_node.assist = [('The parameter ''') name (''' must be positive.')];
 end;
%>

%% vrif paramtre strictement positif
function a_node = isNumStrictPos( a_node, name, recup)
 recup = mparam(a_node, name);
 if isempty(recup) | ~isnumeric(recup) | (recup <= 0)
   a_node.assist = [('The parameter ''') name (''' must be positive.')];
 end;


%% vrif paramtre numrique
% ceci est un commentaire (vpn)
function a_node = isNum( a_node, name, recup)
 recup = mparam(a_node, name);
 if isempty(recup) | ~isnumeric(recup)
   a_node.assist = [('The parameter ''') name (''' must be positive.')];
 end;
 if 1 & 0
   0;
 end;
 

Contact us at files@mathworks.com