X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnan-2.5.5%2Fnanfft.m;fp=octave_packages%2Fnan-2.5.5%2Fnanfft.m;h=220d163d504ee89e9b1acd9bf17b558b216c462e;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nan-2.5.5/nanfft.m b/octave_packages/nan-2.5.5/nanfft.m new file mode 100644 index 0000000..220d163 --- /dev/null +++ b/octave_packages/nan-2.5.5/nanfft.m @@ -0,0 +1,58 @@ +function [Y,N,N2] = nanfft(X,N,DIM); +% NANFFT calculates the Fourier-Transform of X for data with missing values. +% NANFFT is the same as FFT but X can contain missing values encoded with NaN. +% NaN's are skipped, NaN do not result in a NaN output. +% +% Y = NANFFT(X) +% Y = NANFFT(X,N) +% Y = NANFFT(X,[],DIM) +% +% [Y,N] = NANFFT(...) +% returns the number of valid samples N +% +% +% WARNING: missing values can introduce aliasing - causing unintended results. +% Moreover, the behavior of bandpass and highpass filters in case of missing values +% is not fully understood, and might contain some pitfalls. +% +% see also: FFT, XCORR, NANCONV, NANFILTER + +% $Id$ +% Copyright (C) 2005,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 + +warning('NANFFT is experimental. For more details see HELP NANFFT'); + +NX = isnan(X); +X(NX) = 0; + +if nargin==1, + Y = fft(X); + N2 = sum(1-NX); % + N = fft(NX); +elseif nargin==2, + Y = fft(X,N); + N2 = sum(1-NX); + N = fft(NX); +elseif nargin==3, + Y = fft(X,N,DIM); + N2 = sum(1-NX,DIM); % + N = fft(NX,N,DIM); +end; +