www.gusucode.com > EasyKrig_V3.0工具箱matlab源码程序 > EasyKrig_V3.0/dataprep/datareduction.m
function datareduction(opt) %% data reduction or subsampling %% opt = 1 get filter parameters from the window panel %% 2 get filter parameters from variable struct %% %% Kriging Software Package version 3.0, May 1, 2004 %% Copyright (c) 1999, 2001, 2004, property of Dezhang Chu and Woods Hole Oceanographic %% Institution. All Rights Reserved. global hdl data para if opt == 1 para.dataprep.reduct_fac=str2num(get(hdl.dataprep.reduct_fac,'string')); para.dataprep.filter_supt=str2num(get(hdl.dataprep.filter_supt,'string')); para.dataprep.filter_type=get(hdl.dataprep.filter,'value'); % filter type: 1-simple reduction, % 2-mean (box car) % 3-median end ninc=para.dataprep.reduct_fac; filter_type=para.dataprep.filter_type; supt=para.dataprep.filter_supt; x=data.in.x; y=data.in.y; z=data.in.z; var=data.in.v; if ninc > 1 | supt > 1 n=length(x); if filter_type >= 2 % not simple data reduction k=1; if rem(ninc,2) ~= 0 & ninc ~= 1 % odd ninc ninc=ninc+1; end if rem(supt,2) ~= 0 % odd support supt=supt-1; end for i=1:ninc:n if i <= supt/2 indx=1:i+supt/2; elseif i > n-supt indx=i-supt/2:n; else indx=i-supt/2:i+supt/2; end switch filter_type case 2 % box car (mean) var_new(k)=mean_nan(var(indx)); case 3 % median filter to avoid outliers var_new(k)=median_nan(var(indx)); end % data position should be that of one of the data involved points [val, indxm]=min(abs(var_new(k)-var(indx))); xnew(k)=x(indx(indxm)); ynew(k)=y(indx(indxm)); if data.in.dim == 3 znew(k)=z(indx(indxm)); end k=k+1; end x=xnew(:); y=ynew(:); if data.in.dim == 3 z=znew(:); end var=var_new(:); else % simple data reduction or subsampling x=x(1:ninc:n); y=y(1:ninc:n); var=var(1:ninc:n); if data.in.dim == 3 z=z(1:ninc:n); end end end data.in.x=x; data.in.y=y; data.in.z=z; data.in.v=var;