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