[y,mn]=nt_rereference2(x,mask,thresh,factor) - robust rereferencing y: rereferenced data mn: subtracted reference mask: channel mask x: data to rereference (time X channels) mask: channel mask thresh: std threshold to discard channel [default: 3] factor: apply to mean before subtracting [default: 1] See also: nt_rereference, nt_detrend, nt_outliers NoiseTools
0001 function [y,mn,mask]=nt_rereference2(x,mask,thresh,factor) 0002 %[y,mn]=nt_rereference2(x,mask,thresh,factor) - robust rereferencing 0003 % 0004 % y: rereferenced data 0005 % mn: subtracted reference 0006 % mask: channel mask 0007 % 0008 % x: data to rereference (time X channels) 0009 % mask: channel mask 0010 % thresh: std threshold to discard channel [default: 3] 0011 % factor: apply to mean before subtracting [default: 1] 0012 % 0013 % See also: nt_rereference, nt_detrend, nt_outliers 0014 % 0015 % NoiseTools 0016 0017 if nargin<1; error('!'); end 0018 if nargin<2||isempty(mask); mask=ones(1,size(x,2)); end 0019 if nargin<3||isempty(thresh); thresh=3; end 0020 if nargin<4||isempty(factor); factor=1; end 0021 0022 if size(mask,1)~=1; error('!'); end 0023 if size(mask,2) ~= size(x,2); error('!'); end 0024 0025 y=x; 0026 NITER=5; 0027 for iRepeat=1:NITER 0028 if ~sum(mask); error('!'); end 0029 mn=sum(y(:,find(mask)),2)./sum(mask); 0030 y=bsxfun(@minus,y,mn*factor); 0031 yy=y(:,find(mask)); 0032 idxBad=std(y)/std(yy(:))>thresh; 0033 mask(idxBad)=0; 0034 %disp(mean(mask)) 0035 %figure(1); clf; plot(std(y)/std(yy(:))); pause 0036 end 0037 disp(['proportion channels used for mean: ', num2str(mean(mask))]) 0038 0039 0040