% 滑动窗口函数,用于机器学习,数据分帧等。可直接对输入的列数据进行滑窗并按行生成样本。
function frameout=window(x,w,s) % 输入数据x,移动窗口长度w,移动步长s
nx=length(x(:)); % 读取数据长度
nw=length(w); % 读取窗长
if (nw == 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
len = w; % 是,帧长=win
else
len = nw; % 否,帧长=窗长
end
if (nargin < 3) % 如果只有两个参数,设帧inc=帧长
s = len;
end
nf = fix((nx-len+s)/s); % 计算帧数
frameout=zeros(nf,len); % 初始化
indf= s*(0:(nf-1)).'; % 设置每帧在x中的位移量位置
inds = (1:len); % 每帧数据对应1:len
frameout(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); % 对数据分帧
if (nw > 1) % 若参数中包括窗函数,把每帧乘以窗函数
w = w(:)'; % 把win转成行数据
frameout = frameout .* w(ones(nf,1),:); % 乘窗函数
end