0001 function varargout = ltpda_noisegen(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
0031
0032
0033
0034
0035
0036
0037
0038
0039 ALGONAME = mfilename;
0040 VERSION = '$Id: ltpda_noisegen.m,v 1.8 2007/10/12 14:17:08 anneke Exp $';
0041
0042
0043 if nargin == 1
0044 in = char(varargin{1});
0045 if strcmp(in, 'Params')
0046 varargout{1} = getDefaultPL();
0047 return
0048 end
0049 end
0050
0051
0052 invars = {};
0053 ps = [];
0054 for j=1:nargin
0055 invars = [invars cellstr(inputname(j))];
0056 if isa(varargin{j}, 'plist')
0057 ps = [ps varargin{j}];
0058 end
0059 end
0060
0061 pl = combine(ps);
0062
0063
0064 pzmodel = find(pl, 'pzmodel');
0065 gain = get(pzmodel, 'gain');
0066 fs = find(pl, 'fs');
0067 nsecs = find(pl, 'nsecs');
0068 state = find(pl, 'state');
0069 Tinit = find(pl, 'Tinit');
0070 Tprop = find(pl, 'Tprop');
0071 E = find(pl, 'E');
0072 num = find(pl, 'num');
0073 den = find(pl, 'den');
0074
0075
0076 if ~isempty(state)
0077 d = state.data;
0078 state = d.vals;
0079 end
0080 if ~isempty(Tinit)
0081 d = Tinit.data;
0082 Tinit = d.vals;
0083 end
0084 if ~isempty(Tprop)
0085 d = Tprop.data;
0086 Tprop = d.vals;
0087 end
0088 if ~isempty(E)
0089 d = E.data;
0090 E = d.vals;
0091 end
0092 if ~isempty(num)
0093 d = num.data;
0094 num = d.vals;
0095 end
0096 if ~isempty(den)
0097 d = den.data;
0098 den = d.vals;
0099 end
0100 lengden = length(den);
0101
0102 if isempty(pzmodel)
0103 if isempty(Tinit)
0104 error('### There is no Tinit matrix defined plist.');
0105 end
0106 gain = find(pl, 'gain');
0107
0108 if isempty(state)
0109 disp('There is no pzmodel and no initial state vector given, so the initial state vector will be calculated by using the given matrices.\\');
0110
0111 y = nginit(Tinit);
0112 else
0113 disp('State vector from input parameter list is used as input state.');
0114
0115 y = state;
0116 end
0117
0118
0119 [x, yo] = ngprop(Tprop, E, num, y, fs*nsecs);
0120 state = yo;
0121 else
0122
0123 disp('Filter coefficients are calculated from input pzmodel.');
0124 [num, den] = ngconv(pzmodel);
0125
0126 disp('Matrices are calculated from evaluated denominator coefficients.');
0127 [Tinit, Tprop, E] = ngsetup(den, fs);
0128
0129
0130 if isempty(state)
0131 disp('Since there is no given state vector it will be calculated.');
0132
0133 y = nginit(Tinit);
0134 else
0135 disp('Since there is a state vector given it is used for further calculations.');
0136
0137 y = state;
0138 end
0139
0140 [x, yo] = ngprop(Tprop, E, num, y, fs*nsecs);
0141 state = yo;
0142 end
0143
0144
0145
0146 h = history(ALGONAME, VERSION, pl);
0147 h = set(h, 'invars', invars);
0148
0149 t = x*gain;
0150 b = ao(tsdata(t,fs),h);
0151 b = set(b, 'name', sprintf('noisegen(%s)', b.name));
0152
0153 state = ao(cdata(state),h);
0154 Tinit = ao(cdata(Tinit),h);
0155 Tprop = ao(cdata(Tprop),h);
0156 E = ao(cdata(E),h);
0157 num = ao(cdata(num),h);
0158 den = ao(cdata(den),h);
0159 if nargout == 2
0160
0161 pl1 = plist('state', state);
0162 end
0163
0164 if nargout == 3
0165
0166 pl1 = plist('state',state);
0167 pl2 = plist('Tinit',Tinit,'Tprop',Tprop,'E',E,'num',num,'den',den,'gain',gain,'fs',fs,'nsecs',nsecs);
0168 end
0169
0170
0171
0172 if nargout == 1
0173 varargout{1} = b;
0174 end
0175
0176 if nargout == 2
0177 varargout{1} = b;
0178 varargout{2} = pl1;
0179 end
0180
0181 if nargout == 3
0182 varargout{1} = b;
0183 varargout{2} = pl1;
0184 varargout{3} = pl2;
0185 end
0186
0187
0188
0189
0190
0191
0192 function plo = getDefaultPL()
0193
0194 disp('* creating default plist...');
0195 plo = plist();
0196 plo = append(plo,param('nsecs',1000));
0197 disp('* done.');
0198
0199
0200
0201
0202
0203