Mercurial > hg > ltpda
diff m-toolbox/classes/@ao/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/classes/@ao/ltf_plan.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,129 @@ +% LTF_PLAN computes all input values needed for the LPSD and LTFE algorithms. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: LTF_PLAN computes all input values needed for the LPSD and LTFE +% algorithms. +% +% CALL: [f, r, b, L, K] = 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: +% +% VERSION: $Id: ltf_plan.m,v 1.6 2009/08/31 17:09:43 ingo Exp $ +% +% HISTORY: 19-02-2008 M Hewitson +% Creation +% +% REFERENCE: "lpsd revisited: ltf" / S2-AEI-TN-3052 +% 2008/02/07 V1.1 +% G Heinzel +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% q - a vector of start indices for the segments + +function varargout = ltf_plan(varargin) + + %% ------ 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.'; +end +