Está en la página 1de 8

I.

Mtodo de Solucin Para poder procesar y reconstruir el archivo es necesario primero cargar el archivo en MATLAB, para lo cual se escribe los siguientes comandos:
[y3 fs]=wavread('Desfase');

Este cdigo lo nos da a conocer los valores del archivo Desfase.wav, como son los valores del vector almacenada en y3, y su frecuencia de muestreo fs. Del anterior cdigo se tiene y3 =718480x2 (estreo) fs = 44100Hz Luego se separa los canales con el siguiente cdigo
Y1=x(:,1); Y2=x(:,2); solo canal 1 solo canal 2

Despus se procede a graficar los dos canales como sigue


muestras=length(y3); %cantidad de muestras tomadas td=muestras*1/fs; %tiempo de duracin t=1/fs:1/fs:td; %vector de tiempos para la grfica figure(1) subplot(2,1,1),plot(t,y1),grid on,title('Seal Canal 1') xlim([0 td]) xlabel('Tiempo(seg)') ylabel('amplitud(v)') subplot(2,1,2),plot(t,y2),grid on,title('Seal Canal 2') xlim([0 td]) xlabel('Tiempo(seg)') ylabel('amplitud(v)')

Figura 1: Desfase de los canales 1 y 2

Figura 2: Espectro de frecuencias Canales 1 y 2 en desfase De la Figura 1, se observa que tiene un tiempo de duracin de 16.2921 segundos, adems el camal 2 se retrasa un periodo de tiempo. Si observamos mas de cerca, y ampliamos la imagen, se tiene que: Respecto al canal 1 el tiempo en que permanece en 0 (cero) es de 0.22 segundos despus antes de finalizar su reproduccin. Y en el canal 2 se observa que permanece en cero 0.25 segundos al inicio de la reproduccin, tal como se muestra en la figura 3.

Figura 3: Tiempo de desfase de los canales 1 y 2 Para corregir el desfase de los canales 1 y 2, procederemos a eliminar una parte de la seal, ms concretamente el periodo de tiempo en el que permanecen en cero, es decir la parte final del canal 1 y el inicio del canal 2. Para tal proceso es necesario saber cuntas muestras necesitamos quitar a ambos canales, para que queden en el mismo intervalo de tiempo. Para ambos canales se tiene la siguiente formula:

Donde:

t = tiempo fs = frecuencia de muestreo Entonces tenemos: Para el canal 1 Para el canal 2

Podremos escoger el #muestras entre 9702 y 11025, e ir probando, para el ejercicio escogeremos el #muestras igual a 10000 por estar entre los dos rangos.

Para los vectores del canal 1, tendremos que eliminar las ultimas 10000 muestras y para el canal 2 las primeras 10000 muestras, mediante el siguiente cdigo en Matlab.
K=10000 [y3 fs]=wavread('Desfase'); b1=y3(1:length(y3)-k,1); b2=y3(k+1:length(y3),2); C=[b1 b2]; wavwrite(C,fs,16,'Corregido')

La seal en estreo se guardara en la variable C, adems en el archivo Corregido.wav II. Resultados Para poder analizar los resultados obtenidos cargamos en el archivo Corregido.wav, al Matlab, luego graficamos como sigue:
[Co,fs]=wavread('Corregido'); Co1=Co(:,1); Co2=Co(:,2); Cmuestras=length(Co); %cantidad de muestras tomadas Ctd=Cmuestras*1/fs; %tiempo de duracion Ct=1/fs:1/fs:Ctd; %vector de tiempos para la frafica figure(2) subplot(2,1,1),plot(Ct,Co1),grid on,title('Seal Canal 1 Corregido') xlim([0 Ctd]) xlabel('Tiempo(seg)') ylabel('amplitud(v)') subplot(2,1,2),plot(Ct,Co2),grid on,title('Seal Canal 2 Corregido') xlim([0 Ctd]) xlabel('Tiempo(seg)') ylabel('amplitud(v)')

De la figura 4, se observa que ya no existe desfase entre ambos canales, adems el tiempo de reproduccin de la seal se reduce de 16.2921 segundos, del archivo Desfase, a 16.0653 segundos. El nmero de muestras tambin reduce, de 718480x2 en el archivo desfase, a 708480x2 en el archivo Corregido, Esta reduccin es obvio, debido a que se eliminaron 10000 muestras en ambos canales, equivalentes a casi 0.2267 segundos.

Figura 4: Seal de canal 1 y 2 corregida

Figura 5: Espectro de frecuencias Canales 1 y 2 corregidos III. Conclusiones Al final observamos una mejora notable, nulificamos el desfase de ambos canales, logramos balancear el sonido y as obtuvimos una mejora en la seal de salida, esto lo pudimos comprobar de forma emprica al escuchar la grabacin y en forma ms formal al ver las grficas de las seales, notamos una disminucin en el nmero de muestras y por ende el tiempo de reproduccin se redujo en igual intervalo en ambos canales obteniendo una seal ms clara y limpia. Matlab, resulto ser una herramienta interesante, ya que nos permite interactuar de distintas maneras, gracias a sus grficas, matrices y vectores resultantes se pudo resolver el problema, de forma sencilla, sin la necesidad de disear algn tipo de filtro, solo con operaciones entre matrices y vectores. Matlab nos permite graficar en intervalos de tiempo exactos, para poder conocer el nmero de muestras a procesar, adems que la transformada rpida de fourier permite analizar, las seales muestreadas, en el espectro de frecuencias. Apndice A Cdigo Matlab:
clear clf clc %leendo el archivo original [x,fs]=wavread('Original'); %separamos los canales x1=x(:,1); %canal1 x2=x(:,2); %canal2 %========================================================= %Creamos el desface entre ambos canales %========================================================= y1=[x1;zeros(10000,1)]; y2=[zeros(10000,1);x2]; y3=[y1 y2]; %wavplay(y3,fs) %se guarda el archivo con los dos canales wavwrite(y3,fs,16,'Desfase') %========================================================== %grafica de las seales desfasadas en el tiempo %========================================================== muestras=length(y3); %cantidad de muestras tomadas

td=muestras*1/fs; %tiempo de duracion t=1/fs:1/fs:td; %vector de tiempos para la frafica figure(1) subplot(2,1,1),plot(t,y1),grid on,title('Seal Canal 1') xlim([0 td]) xlabel('Tiempo(seg)') ylabel('amplitud(v)') subplot(2,1,2),plot(t,y2),grid on,title('Seal Canal 2') xlim([0 td]) xlabel('Tiempo(seg)') ylabel('amplitud(v)') %analizando el espectro de frecuencias N=16384; X=fft(y1,N); %transformada rapida de Fourier canal 1 Z=fft(y2,N); Xmodulo=abs(X); %vector modulo de los valores de FFT Zmodulo=abs(Z); f=((fs)*(1:N))/N; %vectro de frecuencias para graficar espectro figure(2) subplot(2,1,1),plot(f,Xmodulo),grid on,title('Espectro Canal 1') xlabel('frecuencia(Hz)') ylabel('Amplitud(mv)') subplot(2,1,2),plot(f,Zmodulo),grid on,title('Espectro Canal 2') xlabel('frecuencia(Hz)') ylabel('Amplitud(mv)') %========================================================= %correccion del archivo %========================================================= K=10000; %#muestras a eliminar [y3 fs]=wavread('Desfase'); b1=y3(1:length(y3)-K,1); b2=y3(K+1:length(y3),2); C=[b1 b2]; %wavplay(C,fs) wavwrite(C,fs,16,'Corregido') %se guarda archivo corregido %=========================================================== %analizando graficas del archivo corregido %=========================================================== [Co,fs]=wavread('Corregido'); Co1=Co(:,1); Co2=Co(:,2); Cmuestras=length(Co); %cantidad de muestras tomadas Ctd=Cmuestras*1/fs; %tiempo de duracion Ct=1/fs:1/fs:Ctd; %vector de tiempos para la frafica figure(3) subplot(2,1,1),plot(Ct,Co1),grid on,title('Seal Canal 1 Corregido') xlim([0 Ctd]) xlabel('Tiempo(seg)') ylabel('amplitud(v)') subplot(2,1,2),plot(Ct,Co2),grid on,title('Seal Canal 2 Corregido') xlim([0 Ctd])

xlabel('Tiempo(seg)') ylabel('amplitud(v)') %analizando el espectro de frecuencias N=16384; CX=fft(Co1,N); %transformada rapida de Fourier canal 1 CZ=fft(Co2,N); CXmodulo=abs(CX); %vector modulo de los valores de FFT CZmodulo=abs(CZ); Cf=((fs)*(1:N))/N; %vectro de frecuencias para graficar espectro figure(4) subplot(2,1,1),plot(Cf,CXmodulo),grid on,title('Espectro Canal 1-Corregido') xlabel('frecuencia(Hz)') ylabel('Amplitud(mv)') subplot(2,1,2),plot(Cf,CZmodulo),grid on,title('Espectro Canal 2-Corregido') xlabel('frecuencia(Hz)') ylabel('Amplitud(mv)')

También podría gustarte