0001 function a = ao(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
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085 ALGONAME = mfilename;
0086 VERSION = '$Id: ao.html,v 1.1 2007/06/08 14:15:02 hewitson Exp $';
0087
0088
0089 args = [];
0090 k = 0;
0091 pls = [];
0092 for j=1:nargin
0093 if ~isempty(varargin{j})
0094 k = k + 1;
0095 if isa(varargin{j}, 'plist')
0096 pls = [pls varargin{j}];
0097 else
0098 args(k).val = varargin{j};
0099 args(k).n = j;
0100 end
0101 end
0102 end
0103
0104
0105 if isa(pls, 'plist')
0106 pl = combine(pls);
0107 else
0108 pl = [];
0109 end
0110
0111 Nargs = length(args);
0112 if ~isempty(pl)
0113 args(Nargs+1).val = pl;
0114 args(Nargs+1).n = j+1;
0115 Nargs = length(args);
0116 end
0117
0118
0119
0120 if Nargs > 0
0121 if ischar(args(1).val)
0122 if strcmp(args(1).val, 'SERVER')
0123 a = aoFromServer(args, VERSION, ALGONAME);
0124 return
0125 end
0126 end
0127 end
0128
0129
0130
0131 if Nargs == 0
0132 a.tag = -1;
0133 a.name = 'None';
0134 a.data = {};
0135 a.hist = history(ALGONAME, VERSION);
0136 a.provenance = provenance;
0137 a.comment = '';
0138 a.mfile = {};
0139 a.mfilename = '';
0140 a.mdlfile = '';
0141 a.mdlfilename = '';
0142 a = class(a, 'ao');
0143
0144
0145 elseif Nargs == 1
0146
0147
0148 if isa(args(1).val, 'ao')
0149 a = args(1).val;
0150
0151
0152 elseif isstruct(args(1).val)
0153 astruct = args(1).val;
0154 a.tag = astruct.tag;
0155 a.name = astruct.name;
0156 data = astruct.data;
0157 if isstruct(data)
0158 if isfield(data, {'t', 'x'})
0159 data = tsdata(data);
0160 elseif isfield(data, {'f', 'xx'})
0161 data = fsdata(data);
0162 elseif isfield(data, {'vals'})
0163 data = cdata(data);
0164 elseif isfield(data, {'x', 'y'})
0165 data = xydata(data);
0166 else
0167 error('### Unknown data type in input structure.');
0168 end
0169 end
0170 a.data = data;
0171 hist = astruct.hist;
0172 if isstruct(hist)
0173 hist = history(hist);
0174 end
0175 a.hist = hist;
0176 prov = astruct.provenance;
0177 if isstruct(prov)
0178 prov = provenance(prov);
0179 end
0180 a.provenance = prov;
0181 a.comment = astruct.comment;
0182 a.mfile = astruct.mfile;
0183 a.mfilename = astruct.mfilename;
0184 a.mdlfile = astruct.mdlfile;
0185 a.mdlfilename = astruct.mdlfilename;
0186 a = class(a, 'ao');
0187
0188
0189
0190 elseif isnumeric(args(1).val)
0191
0192 a.tag = -1;
0193 a.name = 'const';
0194 a.data = cdata(args(1).val);
0195 a.hist = history(ALGONAME, VERSION, plist(param('vals', args(1).val)));
0196
0197 a.provenance = provenance;
0198 a.comment = '';
0199 a.mfile = {};
0200 a.mfilename = '';
0201 a.mdlfile = '';
0202 a.mdlfilename = '';
0203 a = class(a, 'ao');
0204
0205
0206
0207 elseif isa(args(1).val, 'plist')
0208
0209 pl = args(1).val;
0210 filename = find(pl, 'filename');
0211 fcn = find(pl, 'fcn');
0212 vals = find(pl, 'vals');
0213 tsfcn = find(pl, 'tsfcn');
0214 win = find(pl, 'win');
0215 waveform = find(pl, 'waveform');
0216
0217 if ~isempty(filename)
0218
0219 a = aoFromFilename(filename, VERSION, ALGONAME);
0220
0221 elseif ~isempty(fcn)
0222
0223 a = aoFromFcn(pl, VERSION, ALGONAME);
0224
0225 elseif ~isempty(vals)
0226
0227 a = aoFromVals(vals, VERSION, ALGONAME);
0228
0229 elseif ~isempty(tsfcn)
0230
0231 a = aoFromTSfcn(pl, VERSION, ALGONAME);
0232
0233 elseif ~isempty(win)
0234
0235 a = aoFromSpecWin(win, VERSION, ALGONAME);
0236
0237 elseif ~isempty(waveform)
0238
0239 a = aoFromWaveform(pl, VERSION, ALGONAME);
0240
0241 else
0242 error('### Unknown AO constructor method.');
0243 end
0244
0245
0246
0247 elseif isa(args(1).val, 'specwin')
0248 a = aoFromSpecWin(args(1).val, VERSION, ALGONAME);
0249
0250
0251 elseif ischar(args(1).val)
0252 a = aoFromFilename(args(1).val, VERSION, ALGONAME);
0253
0254
0255 else
0256 data = args(1).val;
0257 a.tag = -1;
0258 a.name = 'None';
0259 a.data = data;
0260 dinfo = whos('data');
0261 a.hist = history(ALGONAME, VERSION, plist([param('input', inputname(1)) param('type', ['AO/' dinfo.class])]));
0262 a.provenance = provenance;
0263 a.comment = '';
0264 a.mfile = {};
0265 a.mfilename = '';
0266 a.mdlfile = '';
0267 a.mdlfilename = '';
0268 a = class(a, 'ao');
0269 if ~isa(a.data, 'tsdata') &&...
0270 ~isa(a.data, 'fsdata') &&...
0271 ~isa(a.data, 'cdata') &&...
0272 ~isa(a.data, 'xydata')
0273 error('### unknown data object.')
0274 end
0275 end
0276
0277
0278 elseif Nargs == 2
0279 a.tag = -1;
0280 a.name = 'None';
0281 a.data = args(1).val;
0282 a.hist = args(2).val;
0283 a.provenance = provenance;
0284 a.comment = '';
0285 a.mfile = {};
0286 a.mfilename = '';
0287 a.mdlfile = '';
0288 a.mdlfilename = '';
0289 a = class(a, 'ao');
0290 if ~isa(a.data, 'tsdata') &&...
0291 ~isa(a.data, 'fsdata') &&...
0292 ~isa(a.data, 'cdata') &&...
0293 ~isa(a.data, 'xydata')
0294 error('### unknown data object.')
0295 end
0296 if ~isa(a.hist, 'history')
0297 error('### unknown history object.')
0298 end
0299
0300
0301
0302
0303 elseif Nargs == 9
0304
0305 a.tag = args(1).val;
0306 a.name = args(2).val;
0307 a.data = args(3).val;
0308 a.hist = args(4).val;
0309 a.provenance = args(5).val;
0310 a.comment = args(6).val;
0311 a.mfile = args(7).val;
0312 a.mfilename = args(8).val;
0313 a.mdlfile = args(9).val;
0314 a.mdlfilename = args(10).val;
0315 a = class(a, 'ao');
0316
0317 else
0318 error('### Unknown number of constructor arguments.');
0319 end
0320
0321
0322
0323
0324 function a = aoFromVals(vals, VERSION, ALGONAME)
0325
0326
0327 ts = cdata(plist(param('vals', vals)));
0328 ts = set(ts, 'name', 'Data');
0329
0330
0331 a.tag = -1;
0332 a.name = 'Data';
0333 a.data = ts;
0334 a.hist = history(ALGONAME, VERSION, plist(param('vals', vals)));
0335 a.provenance = provenance;
0336 a.comment = '';
0337 a.mfile = {};
0338 a.mfilename = '';
0339 a.mdlfile = '';
0340 a.mdlfilename = '';
0341 a = class(a, 'ao');
0342
0343
0344
0345
0346
0347 function a = aoFromWaveform(pl, VERSION, ALGONAME)
0348
0349 waveform = find(pl, 'waveform');
0350 switch waveform
0351
0352 case 'sine wave'
0353 freq = find(pl, 'f');
0354 phi = find(pl, 'phi');
0355 tsfcn = sprintf('sin(2*pi*%g*t + %g*pi/180)', freq, phi);
0356
0357 case 'noise'
0358 ntype = find(pl, 'type');
0359 switch ntype
0360 case 'Normal'
0361 tsfcn = 'randn(size(t))';
0362 case 'Uniform'
0363 tsfcn = 'rand(size(t))';
0364 end
0365
0366 case 'chirp'
0367 f0 = find(pl, 'f0');
0368 fe = find(pl, 'f1');
0369 te = find(pl, 't1');
0370 tsfcn = sprintf('chirp(t,%g,%g,%g)', f0, fe, te);
0371
0372 case 'Gaussian pulse'
0373 fc = find(pl, 'f0');
0374 bw = find(pl, 'bw');
0375 tsfcn = sprintf('gauspuls(t,%g,%g)', fc, bw);
0376 case 'Square wave'
0377 freq = find(pl, 'f');
0378 duty = find(pl, 'duty');
0379 tsfcn = sprintf('square(2*pi*%g*t,%g)', freq, duty);
0380 case 'Sawtooth'
0381 freq = find(pl, 'f');
0382 width = find(pl, 'width');
0383 tsfcn = sprintf('sawtooth(2*pi*%g*t,%g)', freq, width);
0384 end
0385
0386 nsecs = find(pl, 'nsecs');
0387 fs = find(pl, 'fs');
0388
0389
0390 t = linspace(0, nsecs-1/fs, nsecs*fs);
0391
0392 eval(['y=' tsfcn ';']);
0393
0394 ts = tsdata(t,y);
0395 ts = set(ts, 'name', tsfcn);
0396 ts = set(ts, 'xunits', 's');
0397 ts = set(ts, 'yunits', 'V');
0398
0399
0400 a.tag = -1;
0401 a.name = waveform;
0402 a.data = ts;
0403 a.hist = history(ALGONAME, VERSION, pl);
0404 a.provenance = provenance;
0405 a.comment = '';
0406 a.mfile = {};
0407 a.mfilename = '';
0408 a.mdlfile = '';
0409 a.mdlfilename = '';
0410 a = class(a, 'ao');
0411
0412
0413
0414
0415
0416
0417 function a = aoFromTSfcn(pl, VERSION, ALGONAME)
0418
0419 nsecs = find(pl, 'nsecs');
0420 fs = find(pl, 'fs');
0421 fcn = find(pl, 'tsfcn');
0422
0423
0424 t = linspace(0, nsecs-1/fs, nsecs*fs);
0425
0426 y = eval([fcn ';']);
0427
0428 ts = tsdata(t,y);
0429 ts = set(ts, 'name', fcn);
0430 ts = set(ts, 'xunits', 's');
0431 ts = set(ts, 'yunits', 'V');
0432
0433
0434 a.tag = -1;
0435 a.name = 'TSfcn';
0436 a.data = ts;
0437 a.hist = history(ALGONAME, VERSION, pl);
0438 a.provenance = provenance;
0439 a.comment = '';
0440 a.mfile = {};
0441 a.mfilename = '';
0442 a.mdlfile = '';
0443 a.mdlfilename = '';
0444 a = class(a, 'ao');
0445
0446
0447
0448
0449 function a = aoFromFcn(pl, VERSION, ALGONAME)
0450
0451 fcn = find(pl, 'fcn');
0452
0453
0454 ts = cdata(plist(param('fcn', fcn)));
0455 ts = set(ts, 'name', fcn);
0456
0457
0458 a.tag = -1;
0459 a.name = fcn;
0460 a.data = ts;
0461 a.hist = history(ALGONAME, VERSION, pl);
0462 a.provenance = provenance;
0463 a.comment = '';
0464 a.mfile = {};
0465 a.mfilename = '';
0466 a.mdlfile = '';
0467 a.mdlfilename = '';
0468 a = class(a, 'ao');
0469
0470
0471
0472
0473 function a = aoFromFilename(filename, VERSION, ALGONAME)
0474
0475 [path,fname,ext,versn] = fileparts(filename);
0476 switch ext
0477 case {'.txt','.dat'}
0478 disp([' + creating AO from text file ' filename]);
0479
0480 in = load(filename);
0481 t = in(:,1);
0482 x = in(:,2);
0483
0484
0485 ts = tsdata(t,x);
0486 ts = set(ts, 'name', fname);
0487 ts = set(ts, 'xunits', 's');
0488 ts = set(ts, 'yunits', 'V');
0489
0490
0491 a.tag = -1;
0492 a.name = fname;
0493 a.data = ts;
0494 a.hist = history(ALGONAME, VERSION, plist([param('filename', [fname ext]) param('filepath', path)]));
0495 a.provenance = provenance;
0496 a.comment = '';
0497 a.mfile = {};
0498 a.mfilename = '';
0499 a.mdlfile = '';
0500 a.mdlfilename = '';
0501 a = class(a, 'ao');
0502
0503 case '.mat'
0504
0505
0506 in = load(filename);
0507 fnames = fieldnames(in);
0508 eval(sprintf('a = in.%s;', fnames{1}));
0509
0510 case '.xml'
0511
0512 [tag, name, prov, comment, mfile, mfname, mdlfile, mdlfname, hist, data] = xml_read(filename);
0513 a.tag = tag;
0514 a.name = name;
0515 a.data = data;
0516 a.hist = history(ALGONAME, VERSION, plist([param('filename', [fname ext]) param('filepath', path)]), hist);
0517 a.provenance = prov;
0518 a.comment = comment;
0519 a.mfile = mfile;
0520 a.mfilename = mfname;
0521 a.mdlfile = mdlfile;
0522 a.mdlfilename = mdlfname;
0523 a = class(a, 'ao');
0524
0525 otherwise
0526 error('### unknown file type.');
0527 end
0528
0529
0530
0531
0532 function a = aoFromSpecWin(win, VERSION, ALGONAME)
0533
0534
0535 ts = cdata(win.win);
0536 ts = set(ts, 'name', win.name);
0537
0538
0539 a.tag = -1;
0540 a.name = win.name;
0541 a.data = ts;
0542 a.hist = history(ALGONAME, VERSION, plist(param('win', win)));
0543 a.provenance = provenance;
0544 a.comment = '';
0545 a.mfile = {};
0546 a.mfilename = '';
0547 a.mdlfile = '';
0548 a.mdlfilename = '';
0549 a = class(a, 'ao');
0550
0551
0552
0553
0554
0555
0556 function bs = aoFromServer(args, VERSION, ALGONAME);
0557
0558
0559 bs = retrieve(args(2).val, [args(3:end).val]);
0560
0561