% Archivo: mclt.m
%
% Función que calcula la transformada MCLT de las distintas tramas
% de una señal de audio, de longitud M

function trans=mclt(x,M)

N=2*M;
j=sqrt(-1);
n=0;
k=0;
m=0;

%Ventana de análisis

ha=zeros(2*M,1);            

pa=zeros(2*M,M);
mclt=zeros(length(x),1);

%Ahora se computa la transformada

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

% creamos la matriz de análisis, pa(n,k)

for k=1:M
    for n=1:2*M
         pa(n,k)=ha(n)*sqrt(2/M)*cos(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M)-j*ha(n)*sqrt(2/M)*sin(((n-1)+(M+1)/2)*((k-1)+1/2)*pi/M);
    end
end

%dividimos la señal en tramas de longitud 2M y multiplicamos por
%la matriz pa, dando lugar a transformadas de longitud M

for m=0:M:length(x)-N
    frame=x(m+1:m+N);
    trans(m+1:m+M)=pa.'*frame.';
    
    if m==length(x)-N                      % para mandar la última trama            
        frame=[x(m+M+1:m+N) x(1:M)];
        trans(m+M+1:m+N)=pa.'*frame.';
        
    end
end
    

