From 68a24f3a9c971c54966aedec9b5b59849d1d1f77 Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Sun, 9 Dec 2012 22:05:00 +0100 Subject: [PATCH] matlab: auto regressive model update, use error code to return status Signed-off-by: Thorsten Liebig --- matlab/AR_estimate.m | 60 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/matlab/AR_estimate.m b/matlab/AR_estimate.m index 269445d..ab6e293 100644 --- a/matlab/AR_estimate.m +++ b/matlab/AR_estimate.m @@ -1,8 +1,8 @@ -function [val_ar t_ar f_val_ar] = AR_estimate( t, val, freq, nu, mu, expand_factor) -% [val_ar t_ar f_val_ar] = AR_estimate( t, val, freq, < nu, mu, expand_factor >) +function [val_ar t_ar f_val_ar EC] = AR_estimate( t, val, freq, nu, mu, expand_factor) +% [val_ar t_ar f_val_ar EC] = AR_estimate( t, val, freq, < nu, mu, expand_factor >) % % apply autoregressive signal model to improve dft results -% +% % t : time vector % val : time domain values % freq : frequency vector for dft @@ -12,15 +12,37 @@ function [val_ar t_ar f_val_ar] = AR_estimate( t, val, freq, nu, mu, expand_fact % mu : number of timesteps to train the model (default 3*nu) % expand_factor : increase signal length by this factor (default 5) % -% +% return values: +% val_ar: AR estimated time signal +% t_ar: time vector +% f_val_ar: FD transformed AR estimated signal +% EC: error code +% 0 --> no error +% 1 --> input error: t and val mismatch +% 2 --> input error: mu has to be larger than 2*nu +% 3 --> inout error: expand_factor has to be larger than 1 +% 10 --> AR error: signal is to short for AR estimate --> decrease AR order +% 11 --> AR error: estimated signal appears to be unstable --> use a different mu +% % openEMS matlab interface % ----------------------- % Author: Thorsten Liebig, 2011 % % See also ReadUI, DFT_time2freq +EC = 0; +val_ar = []; +t_ar = []; +f_val_ar = []; + + if numel(t) ~= numel(val) - error 'numel(t) ~= numel(val)' + if (nargout<4) + error 'numel(t) ~= numel(val)' + else + EC = 1; + return + end end if (nargin<4) @@ -34,11 +56,21 @@ if (nargin<6) end if (mu<=2*nu) - error 'mu should be larger than 2*nu' + if (nargout<4) + error 'mu has to be larger than 2*nu' + else + EC = 2; + return + end end if (expand_factor<=1) - error 'expand_factor must be larger than 1' + if (nargout<4) + error 'expand_factor has to be larger than 1' + else + EC = 3; + return + end end dt = t(2)-t(1); @@ -46,7 +78,12 @@ dt = t(2)-t(1); M = numel(t); if (M<0.6*mu) - error 'signal is to short for AR estimate --> decrease AR order' + if (nargout<4) + error 'signal is to short for AR estimate --> decrease AR order' + else + EC = 10; + return + end end for n=1:mu-nu @@ -67,7 +104,12 @@ for k=M:expand_factor*M end if (max(val_ar(M:end)) > max(val)) - error 'estimated signal appears to be unstable --> use a larger mu' + if (nargout<4) + error 'estimated signal appears to be unstable --> use a different mu' + else + EC = 11; + return + end end f_val_ar = DFT_time2freq(t_ar, val_ar, freq);