diff m-toolbox/test/new_ltf_code/ltpda_ltf_plan.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/test/new_ltf_code/ltpda_ltf_plan.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,192 @@
+function varargout = ltpda_ltf_plan(varargin)
+
+% LTPDA_LTF_PLAN computes all input values needed for the LPSD and LTFE
+% algorithms.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% LTPDA_LTF_PLAN computes all input values needed for the LPSD and LTFE
+% algorithms.
+%
+% Usage:
+%   >> [f, r, b, L, K] = ltpda_ltf_plan(Ndata, fs, olap, bmin, Lmin, Jdes, Kdes)
+%
+%   Inputs:
+%       Ndata  - the length of the time-series to be processed
+%       fs     - the sample rate of the time-series to be processed
+%       olap   - overlap percentage, usually taken from the window function
+%       bmin   - the minimum bin number to be used. This is usually taken
+%                from the window function.
+%       Lmin   - The minimum segment length.
+%       Jdes   - the desired number of frequencies.
+%       Kdes   - The desired number of averages.
+%
+%   Outputs: 
+%       Each output is a vector, one value per frequency:
+% 
+%       f      - the frequency
+%       r      - frequency resolution (Hz)
+%       b      - bin number
+%       L      - segment lengths
+%       K      - number of averages
+%
+%   Parameter list:
+%
+% The following call returns a parameter list object that contains the
+% default parameter values:
+%
+% >> pl = ltpda_ltf_plan('Params')
+%
+% The following call returns a string that contains the routine CVS version:
+%
+% >> version = ltpda_ltf_plan('Version')
+%
+% The following call returns a string that contains the routine category:
+%
+% >> category = ltpda_ltf_plan('Category')
+% 
+% 
+% REFERENCE:  "lpsd revisited: ltf" / S2-AEI-TN-3052
+%             2008/02/07  V1.1 
+%             G Heinzel
+% 
+%
+% M Hewitson 19-02-08
+%
+% $Id: ltpda_ltf_plan.m,v 1.1 2008/02/19 09:11:32 hewitson Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%       q      - a vector of start indices for the segments
+
+
+VERSION  = '$Id: ltpda_ltf_plan.m,v 1.1 2008/02/19 09:11:32 hewitson Exp $';
+CATEGORY = 'Internal';
+
+
+%% Check if this is a call for parameters, the CVS version string 
+% or the function category
+if nargin == 1 && ischar(varargin{1})
+  in = char(varargin{1});
+  if strcmp(in, 'Params')
+    varargout{1} = getDefaultPL();
+    return
+  elseif strcmp(in, 'Version')
+    varargout{1} = VERSION;
+    return
+  elseif strcmp(in, 'Category')
+    varargout{1} = CATEGORY;
+    return
+  end
+end
+
+%% ------ Check inputs     ------------------------------------------------
+if nargin ~= 7 || nargout ~= 5
+  help(mfilename)
+  error('### Incorrect usage');
+end
+
+Ndata  = varargin{1};
+fs     = varargin{2};
+olap   = varargin{3};
+bmin   = varargin{4};
+Lmin   = varargin{5};
+Jdes   = varargin{6};
+Kdes   = varargin{7};
+
+%% ------ Set up some variables -------------------------------------------
+
+xov     = (1 - olap/100);
+fmin    = fs / Ndata * bmin;
+fmax    = fs/2;
+fresmin = fs / Ndata;
+freslim = fresmin * (1+xov*(Kdes-1));
+logfact = (Ndata/2)^(1/Jdes) - 1;
+
+
+
+%% ------ Prepare outputs       -------------------------------------------
+
+f = [];
+r = [];
+b = [];
+L = [];
+K = [];
+% q = [];
+
+%% ------ Loop over frequency   -------------------------------------------
+fi = fmin;
+while fi < fmax
+  
+  fres = fi * logfact;
+  if fres <= freslim
+    fres = sqrt(fres*freslim);
+  end
+  if fres < fresmin
+    fres = fresmin;
+  end
+  
+  bin = fi/fres;
+  if bin < bmin
+    bin = bmin;
+    fres = fi/bin;
+  end
+  
+  dftlen = round(fs / fres);
+  if dftlen > Ndata
+    dftlen = Ndata;
+  end
+  if dftlen < Lmin
+    dftlen = Lmin;
+  end
+  
+  nseg = round((Ndata - dftlen) / (xov*dftlen) + 1);
+  if nseg == 1
+    dftlen = Ndata;
+  end
+  
+  fres = fs / dftlen;
+  bin  = fi / fres;
+  
+  % Store outputs
+  f = [f fi];
+  r = [r fres];
+  b = [b bin];
+  L = [L dftlen];
+  K = [K nseg];
+  
+  fi = fi + fres;
+  
+end
+
+%% ------ Set outputs           -------------------------------------------
+
+varargout{1} = f;
+varargout{2} = r;
+varargout{3} = b;
+varargout{4} = L;
+varargout{5} = K;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    getDefaultPL
+%
+% DESCRIPTION: Get default params
+%
+% HISTORY:     19-02-08 M Hewitson
+%                 Creation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function plo = getDefaultPL()
+
+plo = plist('Ndata', 10, ...
+            'fs', 10, ...
+            'olap', 50, ...
+            'bmin', 1, ...
+            'Lmin', 1e20, ...
+            'Jdes', 1000, ...
+            'Kdes', 100 ...
+            );
+
+
+% END
\ No newline at end of file