get_gaussdiff_deriv.m 762 B

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