% 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);