0001 function varargout = fft(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 ALGONAME = mfilename;
0023 VERSION = '$Id: fft.m,v 1.6 2007/11/02 13:17:41 ingo Exp $';
0024
0025
0026 if nargin == 2
0027 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0028 in = char(varargin{2});
0029 if strcmp(in, 'Params')
0030 varargout{1} = getDefaultPL();
0031 return
0032 elseif strcmp(in, 'Version')
0033 varargout{1} = VERSION;
0034 return
0035 end
0036 end
0037 end
0038
0039
0040 invars = {};
0041 for j=1:nargin
0042 if isa(varargin{j}, 'ao')
0043 invars = [invars cellstr(inputname(j))];
0044 end
0045 end
0046
0047
0048 as = [];
0049 ps = [];
0050 bs = [];
0051
0052 for j=1:nargin
0053 if isa(varargin{j}, 'ao')
0054 as = [as varargin{j}];
0055 end
0056 if isa(varargin{j}, 'plist')
0057 ps = [ps varargin{j}];
0058 end
0059 end
0060
0061
0062 for j=1:numel(as)
0063 a = as(j);
0064 d = get(a, 'data');
0065 dinfo = whos('d');
0066
0067
0068 dtype = dinfo.class;
0069 switch dtype
0070 case 'tsdata'
0071 disp('* FFT of tsdata object');
0072
0073
0074 nfft = length(d.x);
0075 ft = fft(d.x);
0076 ft = ft(1:nfft/2+1);
0077 f = linspace(0, d.fs/2, length(ft));
0078 fsd = fsdata(f, ft, d.fs);
0079 fsd = set(fsd, 'name', sprintf('fft(%s)', d.name));
0080 fsd = set(fsd, 'xunits', 'Hz');
0081 fsd = set(fsd, 'yunits', '');
0082
0083
0084 h = history(ALGONAME, VERSION, plist(), [a.hist]);
0085 h = set(h, 'invars', invars);
0086
0087
0088 b = ao(fsd, h);
0089 if j > length(invars)
0090 n = a.name;
0091 else
0092 n = invars{j};
0093 end
0094 b = setnh(b, 'name', sprintf('fft(%s)', n));
0095
0096 case {'fsdata', 'cdata', 'xydata'}
0097 error('### I don''t work for frequency-series, xy and constant data yet.');
0098 disp('* FFT of fsdata object');
0099
0100
0101 otherwise
0102 error('### unknown data type. They can not be addded.')
0103 end
0104
0105
0106 bs = [bs b];
0107 end
0108
0109
0110 bs = reshape(bs, size(as));
0111
0112 varargout{1} = bs;
0113
0114
0115
0116
0117 function plo = getDefaultPL()
0118
0119 plo = plist();
0120
0121