0001 function varargout = ltpda_ss_ss2iir(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 ALGONAME = mfilename;
0031 VERSION = '$Id: ltpda_ss_ss2iir.m,v 1.2 2008/02/25 12:43:44 adrien Exp $';
0032 CATEGORY = 'STATESPACE';
0033 display(['starting ' ALGONAME]);
0034
0035 if isequal( varargin{1}, 'Version')
0036 varargout = VERSION;
0037 return;
0038 elseif isequal(varargin{1}, 'Params')
0039 varargout = plist();
0040 return;
0041 elseif isequal(varargin{1}, 'Category')
0042 varargout = CATEGORY;
0043 return;
0044 end
0045
0046
0047 syst = varargin{1};
0048
0049 AMAT = find(syst,'AMAT');
0050 CMAT = find(syst,'CMAT');
0051 BMATS = find(syst,'BMATS');
0052 DMATS = find(syst,'DMATS');
0053 Ninputs = find(syst,'NBINPUTS');
0054 NAME = find(syst,'NAME');
0055
0056 INPUTNAMES = find(syst,'INPUTNAMES');
0057 STEPSIZE = find(syst,'TIMESTEP');
0058
0059 syms s
0060
0061 iirs{1,1,1} = miir();
0062 if STEPSIZE == 0
0063
0064 display('Error because timestep must be nonzero to make a time discrete filter');
0065 STEPSIZE = 1;
0066 end
0067 for i=1:Ninputs
0068 if size(AMAT{1},1)==0
0069 D = DMATS{i};
0070 C = CMAT{1};
0071 for j=1:size(C,1)
0072 for k=1:size(D,2)
0073 a = D(j,k);
0074 b = 1;
0075 iirs{i,j,k} = miir(plist('a', a, 'b', b, 'gain', 1, 'ntaps', 1, 'name', [NAME,'_',INPUTNAMES{i}], 'fs', 1/STEPSIZE));
0076 end
0077 end
0078 elseif size(BMATS{i},2)==0 ||size(CMAT{1},1)==0
0079 iirs{i,1,1} = {};
0080 else
0081 C = CMAT{1};
0082 B = BMATS{i};
0083 D = DMATS{i};
0084 for j=1:size(C,1)
0085 for k=1:size(B,2)
0086 [a,b] = ss2tf(AMAT{1}, B(:,k), C(j,:), D(j,k));
0087 Gain=1;
0088 m = miir();
0089 m.a = a;
0090 m.b = b;
0091 m.fs = 1/STEPSIZE;
0092 m.name = [NAME,'_',INPUTNAMES{i}];
0093 m.gain = Gain;
0094 iirs{i,j,k} = m;
0095
0096 end
0097 end
0098 end
0099 end
0100 varargout = iirs;
0101 end
0102