X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnan-2.5.5%2Fnanfilter1uc.m;fp=octave_packages%2Fnan-2.5.5%2Fnanfilter1uc.m;h=181bef7658961e1d507383b61cf300b4dcdb4f79;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nan-2.5.5/nanfilter1uc.m b/octave_packages/nan-2.5.5/nanfilter1uc.m new file mode 100644 index 0000000..181bef7 --- /dev/null +++ b/octave_packages/nan-2.5.5/nanfilter1uc.m @@ -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 +% 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; +