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.24 2008/02/13 12:12:49 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
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();
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();
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 else
0134
0135 ts = init();
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 end
0148
0149 elseif nargin == 2
0150
0151
0152 if isa(varargin{1}, 'database')
0153 ts = retrieve(varargin{1}, varargin{2:end});
0154 return
0155
0156 elseif length(varargin{1}) == length(varargin{2}) && length(varargin{1})>1
0157
0158 ts = init();
0159
0160 ts.x = varargin{1};
0161 ts.y = varargin{2};
0162 ts.fs = 1.0/(ts.x(min(2,length(ts.x)))-ts.x(1));
0163 ts.nsecs = ts.x(end) - ts.x(1) + 1/ts.fs;
0164
0165
0166 if size(ts.y,2) > size(ts.y,1)
0167 ts.y = [ts.y].';
0168 end
0169 ts = reshapeT(ts);
0170
0171
0172 else
0173
0174 if length(varargin{2}) > 1
0175 error(['### unknown constructor call. Either x and y should be the' ...
0176 'same length, or fs should be a single value.']);
0177 end
0178
0179 ts = init();
0180
0181 ts.y = varargin{1};
0182 ts.fs = varargin{2};
0183 ts.nsecs = length(ts.y)/ts.fs;
0184
0185 if size(ts.y,2) > size(ts.y,1)
0186 ts.y = [ts.y].';
0187 end
0188 ts = setTime(ts);
0189
0190 end
0191 else
0192 error('### Unknown number of constructor arguments.');
0193 end
0194
0195
0196 end