function dy = get_gaussdiff_deriv(y,binsz,varargin) % each row of y is a feature; each col is a time point % gaussian iod = @utils.inputordefault; smooth_size = iod('smooth_size',5,varargin); krn_sd = binsz*smooth_size; % smooth over 5~10 bins, i.e. ~ 0.3 sec dx=ceil(5*krn_sd); % already can guarantee odd number of bins kx=-dx:binsz:dx; gausskrn=normpdf(kx,0, krn_sd); gausskrn=gausskrn/sum(gausskrn); % area = 1. % derivative dgausskrn = diff(gausskrn); % offsetted by 1 bin. dgausskrn = dgausskrn(2:end); kx = kx(2:end-1); % filt offset = ceil(length(dgausskrn)/2);% offset by this number of zeros pos_x_pad = [zeros(size(y,1),offset)+y(:,1),y,zeros(size(y,1),offset)+y(:,end)]; dy_pad =filter(dgausskrn,1,pos_x_pad,[],2); dy = dy_pad(:,offset*2:end-1); end