samer@0: function o=aolapadd(N,hop) samer@0: % aolapadd - overlap-and-add signal reconstruction arrow samer@0: % samer@0: % aolapadd :: samer@0: % N:natural ~'frame size', samer@0: % M:natural ~'hop size' samer@0: % -> arrow( {[[N]]}, {[[M]]}, [[N-M]]). samer@0: samer@0: samer@0: I=1:hop; samer@0: ol=N-hop; samer@0: samer@0: o=loop1(1,1,@olapadd); samer@0: samer@0: function [fn,s0]=olapadd(sz) samer@0: s0=zeros(ol,1); samer@0: if ol<=hop, J=1:ol; K=hop+1:N; fn=ifx(sz(2)==1,@st1,@st2); samer@0: else J=hop+1:ol; K=ol+1:N; fn=ifx(sz(2)==1,@st3,@st4); samer@0: end samer@0: samer@0: function [y,s]=st1(x,s) samer@0: y=x(I); samer@0: y(J)=y(J)+s; samer@0: s=x(K); samer@0: end samer@0: samer@0: function [y,s]=st2(x,s) samer@0: width=size(x,2); samer@0: y=zeros(hop,width); samer@0: for i=1:width samer@0: y(:,i)=x(I,i); samer@0: y(J,i)=y(J,i)+s; samer@0: s=x(K,i); samer@0: end samer@0: end samer@0: samer@0: function [y,s]=st3(x,s) samer@0: y=(s(I)+x(I)); samer@0: s=[s(J)+x(J);x(K)]; samer@0: end samer@0: samer@0: function [y,s]=st4(x,s) samer@0: width=size(x,2); samer@0: y=zeros(hop,width); samer@0: for i=1:width samer@0: y(:,i)=(s(I)+x(I,i)); samer@0: s=[s(J)+x(J,i);x(K,i)]; samer@0: end samer@0: end samer@0: end samer@0: end samer@0: