matlab: auto regressive model update, use error code to return status
Signed-off-by: Thorsten Liebig <thorsten.liebig@gmx.de>
This commit is contained in:
parent
c3058a4c0c
commit
68a24f3a9c
@ -1,5 +1,5 @@
|
|||||||
function [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] = 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
|
% apply autoregressive signal model to improve dft results
|
||||||
%
|
%
|
||||||
@ -12,6 +12,17 @@ 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)
|
% mu : number of timesteps to train the model (default 3*nu)
|
||||||
% expand_factor : increase signal length by this factor (default 5)
|
% 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
|
% openEMS matlab interface
|
||||||
% -----------------------
|
% -----------------------
|
||||||
@ -19,8 +30,19 @@ function [val_ar t_ar f_val_ar] = AR_estimate( t, val, freq, nu, mu, expand_fact
|
|||||||
%
|
%
|
||||||
% See also ReadUI, DFT_time2freq
|
% See also ReadUI, DFT_time2freq
|
||||||
|
|
||||||
|
EC = 0;
|
||||||
|
val_ar = [];
|
||||||
|
t_ar = [];
|
||||||
|
f_val_ar = [];
|
||||||
|
|
||||||
|
|
||||||
if numel(t) ~= numel(val)
|
if numel(t) ~= numel(val)
|
||||||
|
if (nargout<4)
|
||||||
error 'numel(t) ~= numel(val)'
|
error 'numel(t) ~= numel(val)'
|
||||||
|
else
|
||||||
|
EC = 1;
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (nargin<4)
|
if (nargin<4)
|
||||||
@ -34,11 +56,21 @@ if (nargin<6)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (mu<=2*nu)
|
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
|
end
|
||||||
|
|
||||||
if (expand_factor<=1)
|
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
|
end
|
||||||
|
|
||||||
dt = t(2)-t(1);
|
dt = t(2)-t(1);
|
||||||
@ -46,7 +78,12 @@ dt = t(2)-t(1);
|
|||||||
M = numel(t);
|
M = numel(t);
|
||||||
|
|
||||||
if (M<0.6*mu)
|
if (M<0.6*mu)
|
||||||
|
if (nargout<4)
|
||||||
error 'signal is to short for AR estimate --> decrease AR order'
|
error 'signal is to short for AR estimate --> decrease AR order'
|
||||||
|
else
|
||||||
|
EC = 10;
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
for n=1:mu-nu
|
for n=1:mu-nu
|
||||||
@ -67,7 +104,12 @@ for k=M:expand_factor*M
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (max(val_ar(M:end)) > max(val))
|
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
|
end
|
||||||
|
|
||||||
f_val_ar = DFT_time2freq(t_ar, val_ar, freq);
|
f_val_ar = DFT_time2freq(t_ar, val_ar, freq);
|
||||||
|
Loading…
Reference in New Issue
Block a user