% Archivo: preprocdda.m
%
% Función que realiza el primer paso de preprocesado del algoritmo DDA 
%

function x=preprocdda(audio)

Fs=11025;                   %frecuencia de muestreo
N=4096;                     %numero de muestras por frame
overlap=1/2;                %factor de solapamiento
desplaz=floor(N-N*overlap); %desplazamiento para comenzar cada trama

%antes de nada se submuestrea el audio a Fs

audio11025=decimate(audio,4);

% para calcular el numero de tramas 

numtramas=floor((length(audio11025)-N)/desplaz); %numero de tramas sin contar la primera
audio11025=audio11025(1:(N+numtramas*desplaz));

%Generamos el espectro logarítmico

transf=mclt(audio11025,desplaz);

spect=10*log10(abs(transf));

%ya tenemos el espectro logarítmico, ahora hay que realizar el primer paso
%propiamente dicho
%Primero hay que realizar la DCT

for k=0:desplaz:length(spect)-desplaz
    
    transdct(k+1:k+desplaz)=dct(spect(k+1:k+desplaz));

    %se filtra paso-bajo, cogiendo solo los componentes principales

    ramp=[1 0.8 0.6 0.4 0.2 zeros(1,desplaz-5)];
    transdct(k+1:k+desplaz)=transdct(k+1:k+desplaz).*ramp;

    %y se hace la transformada inversa

    A(k+1:k+desplaz)=idct(transdct(k+1:k+desplaz));

    for i=1:desplaz
        A(k+i)=A(k+i)-6;           %se bajan 6 dB
        if A(k+i)<=-70
            A(k+i)=-70;
        end
        if spect(k+i)-A(k+i)>0
            xt(k+i)=spect(k+i)-A(k+i);     %xt todavia en el dominio mclt, ahora hay que antitransformar
        else
            xt(k+i)=0;
        end
    end
end

% se vuelve a pasar a dominio del tiempo

x=imclt(xt,desplaz);
    