0001 function ts = tsdata(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 VERSION = '$Id: tsdata.m,v 1.26 2008/03/17 09:16:37 mauro Exp $';
0038 CATEGORY = 'Constructor';
0039
0040
0041 if nargin == 2 && isa(varargin{1}, 'tsdata') && ischar(varargin{2})
0042 if strcmp(varargin{2}, 'Params')
0043 ts = plist();
0044 return
0045 elseif strcmp(varargin{2}, 'Version')
0046 ts = VERSION;
0047 return
0048 elseif strcmp(varargin{2}, 'Category')
0049 ts = CATEGORY;
0050 return
0051 end
0052 end
0053
0054
0055
0056 function ts = init(version)
0057 ts.name = 'None';
0058 ts.x = [];
0059 ts.y = [];
0060 ts.fs = 0;
0061 ts.xunits = '';
0062 ts.yunits = '';
0063 ts.nsecs = 0;
0064 ts.t0 = time('t0_default');
0065 ts.version = version;
0066 ts.created = time;
0067 ts = class(ts, 'tsdata');
0068 end
0069
0070
0071
0072
0073
0074 if nargin == 0
0075
0076 ts = init(VERSION);
0077
0078 elseif nargin == 1
0079
0080
0081 if ischar(varargin{1})
0082
0083 filename = varargin{1};
0084 [path, name, ext, vers] = fileparts(filename);
0085 switch ext
0086 case '.mat'
0087 ts = load(filename);
0088 ts = ts.a;
0089 case '.xml'
0090 root_node = xmlread(filename);
0091 ts = ltpda_xmlread(root_node, 'tsdata');
0092 otherwise
0093 error('### Unknown file type.');
0094 end
0095
0096 elseif isa(varargin{1}, 'tsdata')
0097 ts = varargin{1};
0098
0099
0100 elseif isstruct(varargin{1})
0101
0102 ts = init(VERSION);
0103
0104 fields = fieldnames(varargin{1});
0105 for ii = 1:length(fields)
0106 field = fields{ii};
0107
0108
0109 if strcmp(field, 'created')
0110 created = varargin{1}.created;
0111 if isstruct(created)
0112 created = time(created);
0113 end
0114 ts.created = created;
0115
0116 elseif strcmp(field, 't0')
0117 t0 = varargin{1}.t0;
0118 if isstruct(t0)
0119 t0 = time(t0);
0120 end
0121 ts.t0 = t0;
0122
0123 else
0124 try
0125 ts.(field) = varargin{1}.(field);
0126 catch
0127 error('### The field ''%s'' in the struct is not a tsdata property.', field)
0128 end
0129 end
0130 end
0131
0132
0133 elseif isnumeric(varargin{1}) && length(varargin{1}) > 1
0134
0135 ts = init(VERSION);
0136
0137 ts.y = varargin{1};
0138 ts.fs = 1;
0139 ts.nsecs = length(ts.y)/ts.fs;
0140
0141
0142 if size(ts.y,2) > size(ts.y,1)
0143 ts.y = [ts.y].';
0144 end
0145 ts = setTime(ts);
0146
0147
0148 elseif isa(varargin{1}, 'plist')
0149
0150 if nparams(varargin{1}) == 0
0151 ts = init(VERSION);
0152 else
0153 error('### Unknown tsdata constructor method.');
0154 end
0155
0156 else
0157 error('### Unknown tsdata constructor method.');
0158 end
0159
0160 elseif nargin == 2
0161
0162
0163 if isa(varargin{1}, 'database')
0164 ts = retrieve(varargin{1}, varargin{2:end});
0165 return
0166
0167 elseif length(varargin{1}) == length(varargin{2}) && length(varargin{1})>1
0168
0169 ts = init(VERSION);
0170
0171 ts.x = varargin{1};
0172 ts.y = varargin{2};
0173 ts.fs = 1.0/(ts.x(min(2,length(ts.x)))-ts.x(1));
0174 ts.nsecs = ts.x(end) - ts.x(1) + 1/ts.fs;
0175
0176
0177 if size(ts.y,2) > size(ts.y,1)
0178 ts.y = [ts.y].';
0179 end
0180 ts = reshapeT(ts);
0181
0182
0183 else
0184
0185 if length(varargin{2}) > 1
0186 error(['### unknown constructor call. Either x and y should be the' ...
0187 'same length, or fs should be a single value.']);
0188 end
0189
0190 ts = init(VERSION);
0191
0192 ts.y = varargin{1};
0193 ts.fs = varargin{2};
0194 ts.nsecs = length(ts.y)/ts.fs;
0195
0196 if size(ts.y,2) > size(ts.y,1)
0197 ts.y = [ts.y].';
0198 end
0199 ts = setTime(ts);
0200
0201 end
0202 else
0203 error('### Unknown number of constructor arguments.');
0204 end
0205
0206
0207 end