diff scripts/control/system/is_digital.m @ 3431:99ab64f4a09d

[project @ 2000-01-14 03:53:03 by jwe]
author jwe
date Fri, 14 Jan 2000 04:12:41 +0000
parents
children 7923abdeb4e5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/control/system/is_digital.m	Fri Jan 14 04:12:41 2000 +0000
@@ -0,0 +1,73 @@
+## Copyright (C) 1996, 1999 Auburn University.  All rights reserved.
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by the
+## Free Software Foundation; either version 2, or (at your option) any
+## later version.
+##
+## Octave is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+## for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, write to the Free
+## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {@var{retval} =} is_digital (@var{sys})
+## Return nonzero if system is digital;
+## inputs:
+## sys: system data structure
+## eflg: 0 [default] exit with an error if system is mixed (continuous and
+## discrete components)
+##     : 1 print a warning if system is mixed (continuous and discrete)
+##     : 2 silent operation
+## outputs:
+## DIGITAL:  0: system is purely continuous
+##        :  1: system is purely discrete
+##        : -1: system is mixed continuous and discrete
+## Exits with an error of sys is a mixed (continuous and discrete) system
+## @end deftypefn
+
+## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>
+## Created: July 1996
+
+function DIGITAL = is_digital (sys, eflg)
+
+  switch(nargin)
+  case(1),  eflg = 0;
+  case(2),
+    if( isempty(find(eflg == [0, 1, 2])) )
+      error("invalid value of eflg=%d (%e)",eflg,eflg);
+    endif
+  otherwise,
+    usage("DIGITAL = is_digital(sys{,eflg})");
+  endswitch
+
+  ## checked for sampled data system (mixed)
+  ## discrete system
+  sysyd = sysgetsignals(sys,"yd");
+  [nn,nz] = sysdimensions(sys);
+  cont = sum(sysyd == 0) + nn;
+  tsam = sysgettsam(sys);
+  dig = sum(sysyd != 0) + nz + tsam;
+
+  ## check for mixed system
+  if( cont*dig != 0)
+   switch(eflg)
+   case(0),
+     error("continuous/discrete system; use syscont, sysdisc, or c2d first");
+   case(1),
+     warning("is_digital: mixed continuous/discrete system");
+   endswitch
+   dig_sign = -1;
+  else
+   dig_sign = 1;
+  endif
+
+  DIGITAL = dig_sign*(tsam > 0);
+
+endfunction