home *** CD-ROM | disk | FTP | other *** search
- %BLKBUILD Builds a block diagonal state space structure from a block
- % diagram of transfer functions and state models. This is a
- % SCRIPT FILE.
- %
- %INPUTS:
- % nblocks is the number of blocks in the diagram.
- %
- % ni and di are the numerator and denominator polynomials for
- % the ith block if it is a transfer function.
- %
- % ai,bi,ci,di are the state matrices for the ith block if it is a
- % state model.
- %
- %OUTPUTS:
- % a,b,c,d is the resulting state space structure. The matrices
- % are built up by progressive APPENDs of the state
- % space representations of each block.
- %
- % Note: If both ni,di and ai,bi,ci,di exist for the same block then
- % an error is generated.
- %
- % See also: CONNECT.
-
- % Clay M. Thompson
- % Revised by Wes Wang 8-5-92
- % Copyright (c) 1986-93 by The MathWorks, Inc.
-
- if exist('a1') & exist('b1') & exist('c1')
- if exist('n1') & exist('d1')
- error('Both state space and transfer function forms for block 1 exist.')
- end
- a=a1; b=b1; c=c1;
- if exist('d1')
- d = d1;
- else
- [ii9,mm9]=size(b1);
- [pp9,ii9]=size(c1);
- d = zeros(pp9,mm9);
- end
- elseif exist('n1')
- [a,b,c,d]=tf2ss(n1,d1);
- else
- error('Block 1 is not defined.');
- end
-
- for ibb9=2:nblocks
- xxist = int2str(ibb9);
- if exist(['a' xxist]) & exist(['b' xxist]) & exist(['c' xxist])
- % if ai,bi,ci,di exist
- if exist(['n' xxist]) & exist(['d' xxist])
- error(['Both state space and transfer function forms for block ', ...
- xxist,' exist.']);
- end
- smstr = [ 'a' xxist ',b' xxist ',c' xxist ];
- if exist(['d' xxist])
- dd9 = eval(['d' xxist]);
- else
- [ii9,mm9]=size(eval(['b' xxist']));
- [pp9,ii9]=size(eval(['c' xxist']));
- dd9 = zeros(pp9,mm9);
- end
- eval([ '[a,b,c,d] = append(a,b,c,d,' smstr ',dd9);']);
- elseif exist(['n' xxist]) & exist(['d' xxist])
- ii9 = int2str(ibb9); % Convert ibb9 to string representation
- [aa9,bb9,cc9,dd9] = eval(['tf2ss(n',ii9,',d',ii9,')']);
- [a,b,c,d] = append(a,b,c,d,aa9,bb9,cc9,dd9);
- else
- error(['Block ' xxist ' is not defined.']);
- end
- end
-
- [pp9,mm9]=size(d);
- disp(['State model [a,b,c,d] of the block diagram has ',int2str(mm9), ...
- ' inputs and ',int2str(pp9),' outputs'])
-
- clear aa9 bb9 cc9 dd9 ii9 ibb9 xxist smstr pp9 mm9
-