123456789101112131415161718192021 |
- 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
|