]> Creatis software - CreaPhase.git/blobdiff - octave_packages/nan-2.5.5/nanfilter1uc.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / nan-2.5.5 / nanfilter1uc.m
diff --git a/octave_packages/nan-2.5.5/nanfilter1uc.m b/octave_packages/nan-2.5.5/nanfilter1uc.m
new file mode 100644 (file)
index 0000000..181bef7
--- /dev/null
@@ -0,0 +1,54 @@
+function [x,z] = nanfilter1uc(uc,x,z);
+% NANFILTER1UC is an adaptive filter for data with missing values encoded as NaN. 
+%       
+%      [Y,Z] = nanfilter1uc(uc,X [, Z]);  
+%
+% if X contains no missing data, NANFILTER behaves like FILTER(uc,[1,uc-1],X[,Z]).
+%
+% see also: FILTER, NANFILTER, SUMSKIPNAN
+
+%      $Id$
+%      Copyright (C) 2010,2011 by Alois Schloegl <alois.schloegl@gmail.com>    
+%       This function is part of the NaN-toolbox available at 
+%       http://pub.ist.ac.at/~schloegl/matlab/NaN/ and 
+%      http://octave.svn.sourceforge.net/viewvc/octave/trunk/octave-forge/extra/NaN/inst/
+
+%    This program is free software; you can redistribute it and/or modify
+%    it under the terms of the GNU General Public License as published by
+%    the Free Software Foundation; either version 3 of the License, or
+%    (at your option) any later version.
+%
+%    This program is distributed in the hope that it will be useful,
+%    but WITHOUT ANY WARRANTY; without even the implied warranty of
+%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+%    GNU General Public License for more details.
+%
+%    You should have received a copy of the GNU General Public License
+%    along with this program; if not, write to the Free Software
+%    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+
+
+na = 2; %length(A);
+nb = 2; %length(B);
+if any(size(x)==1)
+       nc = 1; 
+else   
+       nc = size(x,2);
+end; 
+
+acN = zeros(1,nc);
+if nargin<3,
+       z = zeros(1,nc);
+end;
+acc = NaN(1,nc);
+for k = 1:size(x,1),
+       ix = isnan(x(k,:));
+       acN = acN.*ix+1;
+       UC1 = ((1-uc).^acN);
+        acc(~ix) = (1-UC1(~ix)) .* x(k,~ix) + z(~ix);  % / A{1};
+       ix = isnan(acc);
+       acc(ix) = x(k,ix); 
+       z   = (1-uc) * acc;
+        x(k,:) = acc;
+end;
+