对时间序列的一系列处理函数.

[1]将2个时间序列(datenum array)按照最小时间间隔同步, 使用了mex加速

  1. tIdxs=sync2seriesbyMindist(tTarget,tOrig,minDist,isFillMissing)
% input:
%     tTarget:需要同步到的目标时间戳序列(datenum),N x 1 double. 必须是升序排列的
%     tOrig:待同步的时间戳序列(datenum), M x 1 double 必须是升序排列的
%     minDist:最小门限 一般为minutes(5)/days(1). 1 x 1 double
%   isFillMissing: 是否对NaN进行填充最近值.
% output:
%     tIdxs: 返回同步序列对应在原序列B中的序号. -1=未找到符合条件的时间点. N x 1 double

[2] 将torig(datenum),data(double) 组成的时间序列, 同步到新的时间戳(tTarget下). 得到xnew

xnew=sync_x2y(tTarget,tOrig,data,minDist,isFillMissing)
% input:
%     tTarget:需要同步到的目标时间戳序列(datenum),N x 1 double. 必须是升序排列的
%     tOrig:待同步的时间戳序列(datenum), M x 1 double 必须是升序排列的
%   data: 与tOrig对应的值序列.
%     minDist:最小门限 一般为minutes(5)/days(1). 1 x 1 double
%   isFillMissing: 是否对NaN进行填充最近值.
% output:
%     xnew: 和tTarget等长. 如果在tOrig在tTarget中找到了对应, 则xnew=data中对应的点的值. 否则, torig为nan.

[3] 计算fcn(d(sti(1):edi(1))), fcn(d(sti(2):edi(2))),… 结果保存在x里. 当fcn为max/min等有ia返回的, 保存在ia里

[x,ia]=split_apply_fcn(d,sti,edi,fcn)
% d, sti=[1;3;5], edi=[2;4;6]. fcn=@max  , x=max(d(1:3)) 以此类推.

[4]寻找datanum序列中>=st,<=ed 的点序号, 输出到stidx, edidx中. 没找到为-1

[stidx,edidx]=search_x_within_range(t,st,ed)

[5]寻找dataenum序列(t)中 比 idx位置 ws窗内的点的序号

outidx=search_x_in_timewin(t,idx,ws)
% 寻找t中 比 idx位置 ws窗内的点的序号
% input:
%     t, nx1 datenum 序列; idx, mx1 double序列, idx=1表示t中的第一个点的时间, idx=2表示第二个点, 以此类推; ws 1x1 double 时间窗大小, ws为正时为往右找数据时
%       间小于t+ws的最后一个点的序号, ws为负时为往左找比t-ws大的最后一个点的序号
% output: outidx, mx1 double序列, 找到的点的序号
% test :
%     a=[1:10]; b=[3,5]; c=4;
%     d=tsfun.search_x_in_timewin(a',b',c);

[6]在线计算movsum

dmax=movsum_by_buf(tn,dm,winsize,bufsize)

[7]在线计算movmax

dmax=movmax_by_buf(tn,dm,winsize,bufsize)

[8]在线计算movhampel

[xf,xi,xmedian,xsigma]=movhampel(x,range,nsigma)

[9]对时间序列时间窗内的数据,施加函数fcn, 然后按offset=1,不断移动窗, 直到序列终点

dout=movfcn_in_timewin(t,d,timewindow,fcn)