function [Y,winix] = frame(X,W,H)
% Y = frame(X,W,H)
%   Return Y as a set of columns as W-point segments of X stepped
%   by H. 
%   There's no windowing (i.e. scaling by a tapered window) in here. 
% 2010-11-14 Dan Ellis dpwe@ee.columbia.edu

lx = length(X);
nh = 1+ceil((length(X)-W)/H);
% Pad X to an integral number of windows
Xp = [X(:)',zeros(1, (W+(nh-1)*H)-lx)];

% Index-fu:
% We build a matrix of indices that pull out the values we want...
% (columns of 1:W, with successive multiples of H added on)
winix = repmat(H*[0:(nh-1)],W,1)+repmat([1:W]',1,nh);

% .. then the output is just the input matrix indexed by these indices
Y = Xp(winix);
