% 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