samer@3: % unbuffer - Opposite of buffer using overlap and add (for sequences) samer@3: % samer@3: % unbuffer :: samer@3: % seq([[N]]) ~'sequence of overlapping frames', samer@3: % M:natural ~'hop size' samer@3: % -> seq([[1,M]])~'sequence of de-overlapped frames'. samer@3: % samer@3: % NB. what about windowing function? samer@3: samer@3: function Y=unbuffer(X,hop) samer@25: N=max(size(X)); samer@25: ol=N-hop; samer@25: if ol<=hop samer@25: I=1:hop; J=1:ol; K=hop+1:N; samer@25: Y=mapaccum(@olap1,zeros(ol,1),X); samer@3: else samer@25: I=1:hop; J=hop+1:ol; K=ol+1:N; samer@25: Y=mapaccum(@olap3,zeros(ol,1),X); samer@3: end samer@25: % Y=zipaccum(@olap2,[],windowdata(repeat(hop)),X); samer@3: samer@3: function [y,s1]=olap1(x,s) samer@3: y=x(I)'; samer@3: y(J)=y(J)+s'; samer@3: s1=x(K); samer@3: end samer@3: samer@3: function [y,s1]=olap3(x,s) samer@3: y=(s(I)+x(I))'; samer@3: s1=[s(J)+x(J);x(K)]; samer@3: end samer@3: end samer@3: