home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
octa21fb.zip
/
octave
/
SCRIPTS.ZIP
/
scripts.fat
/
control
/
zp2sys.m
< prev
next >
Wrap
Text File
|
1999-12-24
|
4KB
|
147 lines
## Copyright (C) 1996,1998 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{sys} =} zp2sys (@var{zer},@var{pol},@var{k}@{,@var{tsam},@var{inname},@var{outname}@})
## Create system data structure from zero-pole data
##
## @strong{Inputs}
## @table @var
## @item zer
## vector of system zeros
## @item pol
## vector of system poles
## @item k
## scalar leading coefficient
## @item tsam
## sampling period. default: 0 (continuous system)
## @item inname, outname
## input/output signal names (lists of strings)
## @end table
##
## @strong{Outputs}
## sys: system data structure
##
## @strong{Example}
## @example
## octave:1> sys=zp2sys([1 -1],[-2 -2 0],1);
## octave:2> sysout(sys)
## Input(s)
## 1: u_1
## Output(s):
## 1: y_1
## zero-pole form:
## 1 (s - 1) (s + 1)
## -----------------
## s (s + 2) (s + 2)
## @end example
## @end deftypefn
function outsys = zp2sys (zer, pol, k, tsam, inname, outname)
## Modified by John Ingram July 20, 1996
## Test for the correct number of input arguments
if ((nargin < 3) || (nargin > 6))
usage("outsys = zp2sys(zer,pol,k[,tsam,inname,outname])");
endif
## check input format
if( ! (is_vec(zer) | isempty(zer) ) )
error("zer must be a vector or empty");
endif
if(!isempty(zer))
zer = reshape(zer,1,length(zer)); # make it a row vector
endif
if( ! (is_vec(pol) | isempty(pol)))
error("pol must be a vector");
endif
if(!isempty(pol))
pol = reshape(pol,1,length(pol));
endif
if (! is_scal(k))
error('k must be a scalar');
endif
## Test proper numbers of poles and zeros. The number of poles must be
## greater than or equal to the number of zeros.
if (length(zer) > length(pol))
error(["number of poles (", num2str(length(pol)), ...
") < number of zeros (", num2str(length(zer)),")"]);
endif
## Set the system transfer function
outsys.zer = zer;
outsys.pol = pol;
outsys.k = k;
## Set the system vector: active = 1, updated = [0 1 0];
outsys.sys = [1, 0, 1, 0];
## Set defaults
outsys.tsam = 0;
outsys.n = length(pol);
outsys.nz = 0;
outsys.yd = 0; # assume (for now) continuous time outputs
## Set the type of system
if (nargin > 3)
if( !is_scal(tsam) )
error("tsam must be a nonnegative scalar");
endif
if (tsam < 0)
error("sampling time must be positve")
elseif (tsam > 0)
[outsys.n,outsys.nz] = swap(outsys.n, outsys.nz);
outsys.yd = 1; # discrete-time output
endif
outsys.tsam = tsam;
endif
outsys.inname = sysdefio(1,"u");
outsys.outname = sysdefio(1,"y");
outsys.stname = sysdefst(outsys.n,outsys.nz);
## Set name of input
if (nargin > 4)
## make sure its a string
if(!isempty(inname))
if(!is_list(inname)) inname = list(inname); endif
if(!is_siglt(inname))
error("inname must be a single signal name");
endif
outsys.inname = inname(1);
endif
endif
## Set name of output
if (nargin > 5)
if(!isempty(outname))
if(!is_list(outname)) outname = list(outname); endif
if(!is_siglt(outname))
error("outname must be a single signal name");
endif
outsys.outname = outname(1);
endif
endif
endfunction