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
0023 if nargin == 2
0024 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0025 in = char(varargin{2});
0026 if strcmp(in, 'Params')
0027 varargout{1} = getDefaultPL();
0028 return
0029 end
0030 end
0031 end
0032
0033
0034 invars = {};
0035 for j=1:nargin
0036 if isa(varargin{j}, 'ao')
0037 invars = [invars cellstr(inputname(j))];
0038 end
0039 end
0040
0041 ALGONAME = mfilename;
0042 VERSION = '$Id: fft.m,v 1.4 2007/06/25 07:40:21 ingo Exp $';
0043
0044
0045 as = [];
0046 ps = [];
0047 queries = [];
0048 for j=1:nargin
0049 if isa(varargin{j}, 'ao')
0050 as = [as varargin{j}];
0051 end
0052 if isa(varargin{j}, 'plist')
0053 ps = [ps varargin{j}];
0054 end
0055 end
0056
0057 Na = length(as);
0058
0059
0060 bs = [];
0061
0062 for j=1:Na
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, [], [a.hist]);
0085 h = set(h, 'invars', invars);
0086
0087
0088 b = ao(fsd, h);
0089 if isempty(invars{j})
0090 n = a.name;
0091 else
0092 n = invars{j};
0093 end
0094 b = set(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 varargout{1} = bs;
0110
0111
0112
0113
0114 function plo = getDefaultPL()
0115
0116 disp('* creating default plist...');
0117 plo = plist();
0118 disp('* done.');
0119
0120