0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 function varargout = fft(varargin)
0024
0025
0026 if utils.helper.isinfocall(varargin{:})
0027 varargout{1} = getInfo(varargin{3});
0028 return
0029 end
0030
0031 import utils.const.*
0032 utils.helper.msg(msg.MNAME, 'running %s/%s', mfilename('class'), mfilename);
0033
0034
0035 in_names = cell(size(varargin));
0036 for ii = 1:nargin,in_names{ii} = inputname(ii);end
0037
0038
0039 [as, ao_invars] = utils.helper.collect_objects(varargin(:), 'ao', in_names);
0040 pl = utils.helper.collect_objects(varargin(:), 'plist', in_names);
0041
0042
0043 bs = copy(as, nargout);
0044
0045
0046 pl = combine(pl, getDefaultPlist);
0047
0048
0049 type = find(pl, 'type');
0050
0051
0052 for j=1:numel(bs)
0053
0054 switch class(bs(j).data)
0055 case {'tsdata', 'cdata', 'xydata'}
0056
0057 if strcmp(class(bs(j).data), 'tsdata')
0058 fs = bs(j).data.fs;
0059 fmin = 0;
0060 xunits = 'Hz';
0061 else
0062 warning('!!! Data has no sample rate: setting to %g', 2+length(bs(j).data.y));
0063 fs = 2+length(bs(j).data.y);
0064 fmin = 1;
0065 end
0066
0067 nfft = length(bs(j).data.y);
0068 ft = fft(bs(j).data.y);
0069 switch type
0070 case 'one'
0071 ft = ft(1:nfft/2+1);
0072 f = linspace(fmin, fs/2, length(ft));
0073 case 'two'
0074 ft = [ft(nfft/2+2:end) ft(1:nfft/2+1)];
0075 f = linspace(-fs/2, fs/2, length(ft));
0076 otherwise
0077 error('### unknown fft type.');
0078 end
0079
0080 fsd = fsdata(f, ft, fs);
0081 fsd.setXunits(xunits);
0082 fsd.setYunits(bs(j).data.yunits);
0083
0084 bs(j).data = fsd;
0085 bs(j).setName(sprintf('fft(%s)', ao_invars{j}), 'internal');
0086
0087 bs(j).addHistory(getInfo, pl, ao_invars(j), bs(j).hist);
0088 otherwise
0089 error('### You can only fft tsdata, cdata, or xydata AOs.');
0090 end
0091 end
0092
0093
0094 if nargout > 0
0095 varargout{1} = bs;
0096 end
0097 end
0098
0099
0100
0101
0102 function ii = getInfo(varargin)
0103 if nargin == 1 && strcmpi(varargin{1}, 'None')
0104 sets = {};
0105 pl = [];
0106 else
0107 sets = {'Default'};
0108 pl = getDefaultPlist;
0109 end
0110
0111 ii = minfo(mfilename, 'ao', '', utils.const.categories.sigproc, '$Id: fft.m,v 1.26 2008/09/05 11:05:29 ingo Exp $', sets, pl);
0112 end
0113
0114
0115
0116
0117 function pl_default = getDefaultPlist()
0118 pl_default = plist('type', 'one');
0119 end
0120
0121