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.10 2008/01/20 12:53:29 hewitson Exp $';
0024 bs = [];
0025
0026
0027 if nargin == 2
0028 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0029 in = char(varargin{2});
0030 if strcmp(in, 'Params')
0031 varargout{1} = getDefaultPL();
0032 return
0033 elseif strcmp(in, 'Version')
0034 varargout{1} = VERSION;
0035 return
0036 end
0037 end
0038 end
0039
0040
0041 in_names = {};
0042 for ii = 1:nargin
0043 in_names{end+1} = inputname(ii);
0044 end
0045
0046 [as, ps, invars] = collect_inputs(varargin, in_names);
0047
0048
0049
0050 for j=1:numel(as)
0051 a = as(j);
0052 d = get(a, 'data');
0053 dinfo = whos('d');
0054
0055
0056 dtype = dinfo.class;
0057 switch dtype
0058 case 'tsdata'
0059
0060
0061 nfft = length(d.y);
0062 ft = fft(d.y);
0063 ft = ft(1:nfft/2+1);
0064 f = linspace(0, d.fs/2, length(ft));
0065 fsd = fsdata(f, ft, d.fs);
0066 fsd = set(fsd, 'name', sprintf('fft(%s)', d.name));
0067 fsd = set(fsd, 'xunits', 'Hz');
0068 fsd = set(fsd, 'yunits', '');
0069
0070
0071 h = history(ALGONAME, VERSION, plist(), [a.hist]);
0072 h = set(h, 'invars', cellstr(invars{j}));
0073
0074
0075 b = ao(fsd, h);
0076 b = setnh(b, 'name', sprintf('fft(%s)', invars{j}));
0077
0078 case {'fsdata', 'cdata', 'xydata'}
0079 error('### I don''t work for frequency-series, xy and constant data yet.');
0080 disp('* FFT of fsdata object');
0081
0082
0083 otherwise
0084 error('### unknown data type. They can not be addded.')
0085 end
0086
0087
0088 bs = [bs b];
0089 end
0090
0091
0092 bs = reshape(bs, size(as));
0093
0094 varargout{1} = bs;
0095
0096
0097
0098
0099 function plo = getDefaultPL()
0100
0101 plo = plist();
0102
0103