% Archivo: imclt.m
%
% Función que realiza la transformada MCLT inversa, con tramas de 
% longitud M

function y=imclt(x,M)

j=sqrt(-1);
n=0;
k=0;
m=0;
y=zeros(length(x),1);
yp=zeros(2*M,1);            % transformadas parciales
ypant=zeros(M,1);
hs=zeros(2*M,1);            %Ventana de análisis

ps=zeros(2*M,M);


%Ahora se computa la transformada

n=1:2*M;
hs=-sin(((n-1)+1/2)*pi/(2*M));

% se genera la matriz de síntesis, ps(n,k)

for k=1:M
    for n=1:2*M
         ps(n,k)=1/2*hs(n)*sqrt(2/M)*[cos(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M)+j*sin(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M)];
    end
end

% En el algoritmo, para sacar la primera trama hace falta la última
% transformada parcial

ypant=ps*x(length(x)-M+1:length(x)).';

% se van sacando todas las tramas a partir de la transformada parcial de
% dicha trama y de la anterior

for m=0:M:length(x)-M
    yp=ps*x(m+1:m+M).';   %resultado parcial
    y(m+1:m+M)=real(yp(1:M))+real(ypant(M+1:2*M));
    ypant=yp;
end