diff m-toolbox/classes/@ao/fft_core.m @ 0:f0afece42f48

Import.
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Wed, 23 Nov 2011 19:22:13 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/m-toolbox/classes/@ao/fft_core.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,73 @@
+% FFT_CORE Simple core method which computes the fft.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: Simple core method which computes the fft.
+%
+% CALL:        ao = fft_core(ao, type)
+%
+% INPUTS:      ao:   Single input analysis object
+%              type: The fft type
+%                    'plain' - complete non-symmetric
+%                    'one'   - from zero to Nyquist
+%                    'two'   - complete symmetric
+%
+% VERSION:     $Id: fft_core.m,v 1.7 2011/02/04 17:42:29 luigi Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function bs = fft_core(bs, type)
+  
+  % Which data type do we have
+  switch class(bs.data)
+    case {'tsdata', 'cdata', 'xydata'}
+      % Check we have a sample rate
+      if strcmp(class(bs.data), 'tsdata')
+        fs     = bs.data.fs;
+        fmin   = 0;
+      else
+        warning('!!! Data has no sample rate: setting to %g', 2+length(bs.data.y));
+        fs     = 2+length(bs.data.y);
+        fmin   = 1;
+      end
+      % make FFT of data
+      xunits = 'Hz';
+      nfft   = length(bs.data.y);
+      ft     = fft(bs.data.y);
+      f      = utils.math.getfftfreq(nfft,fs,type);
+      switch lower(type)
+        case 'plain' % get true matlab fft
+          f    = reshape(f,size(ft));
+        case 'one'
+          ft   = ft(1:floor(nfft/2)+1);
+          f    = reshape(f,size(ft));
+        case 'two'
+          if size(ft, 1) == 1
+            ft   = fftshift(ft);
+          else
+            ft   = fftshift(ft);
+            if rem(nfft,2) % odd number of data
+              f = f.';
+            else % even number of data
+              f = f.';
+            end
+          end
+        otherwise
+          error('### unknown fft type.');
+      end
+      % Make new fsdata object
+      fsd = fsdata(f, ft, fs);
+      fsd.setXunits(xunits);
+      fsd.setYunits(bs.data.yunits);
+      % make output analysis object
+      bs.data = fsd;
+      % clear errors
+      bs.clearErrors;
+      
+    otherwise
+      error('### You can only fft tsdata, cdata, or xydata AOs.');
+  end
+  
+end
+
+
+
+