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
0024
0025
0026
0027
0028
0029
0030 ALGONAME = mfilename;
0031 VERSION = '$Id: fft.m,v 1.12 2008/02/12 08:31:45 mauro Exp $';
0032 CATEGORY = 'Signal Processing';
0033 bs = [];
0034
0035
0036 if nargin == 2
0037 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0038 in = char(varargin{2});
0039 if strcmp(in, 'Params')
0040 varargout{1} = getDefaultPL();
0041 return
0042 elseif strcmp(in, 'Version')
0043 varargout{1} = VERSION;
0044 return
0045 elseif strcmp(in, 'Category')
0046 varargout{1} = CATEGORY;
0047 return
0048 end
0049 end
0050 end
0051
0052
0053 in_names = {};
0054 for ii = 1:nargin
0055 in_names{end+1} = inputname(ii);
0056 end
0057
0058 [as, ps, invars] = collect_inputs(varargin, in_names);
0059
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
0072
0073 nfft = length(d.y);
0074 ft = fft(d.y);
0075 ft = ft(1:nfft/2+1);
0076 f = linspace(0, d.fs/2, length(ft));
0077 fsd = fsdata(f, ft, d.fs);
0078 fsd = set(fsd, 'name', sprintf('fft(%s)', d.name));
0079 fsd = set(fsd, 'xunits', 'Hz');
0080 fsd = set(fsd, 'yunits', '');
0081
0082
0083 h = history(ALGONAME, VERSION, plist(), [a.hist]);
0084 h = set(h, 'invars', cellstr(invars{j}));
0085
0086
0087 b = ao(fsd, h);
0088 b = setnh(b, 'name', sprintf('fft(%s)', invars{j}));
0089
0090 case {'fsdata', 'cdata', 'xydata'}
0091 error('### I don''t work for frequency-series, xy and constant data yet.');
0092 disp('* FFT of fsdata object');
0093
0094
0095 otherwise
0096 error('### unknown data type. They can not be addded.')
0097 end
0098
0099
0100 bs = [bs b];
0101 end
0102
0103
0104 bs = reshape(bs, size(as));
0105
0106 varargout{1} = bs;
0107
0108
0109
0110
0111 function plo = getDefaultPL()
0112
0113 plo = plist();
0114
0115