Está en la página 1de 9

I.

Introduccin

El Procesamiento Digital de Seales (PDS) es un rea de la ingeniera que se


dedica al anlisis y procesamiento de seales (audio, voz, imgenes, video) que
son discretas en el tiempo.

Una seal es una Funcin que porta informacin acerca del estado o
comportamiento de un sistema. Matemticamente, las seales se representan
como funciones de una o ms variables. La variable independiente de dicha
representacin puede ser continua o discreta.

Las seales en tiempo continuo estn definidas sobre un tiempo continuo, las
seales en tiempo discreto estn definidas sobre un conjunto discreto de valores
y, por consiguiente, sern representadas por sucesiones o vectores que son
como las tratadas en MATLAB. Las seales digitales son aquellas que tanto el
tiempo, como la amplitud son discretas.

Al hablar de sonido digital hay que establecer la diferencia que existe entre el
sonido analgico y el digital. Las ondas producidas por la cuerda de la guitarra
o por la voz corresponden a un sonido analgico; es decir, una onda sinusoidal
continua compuesta por multitud de ondas de distintas frecuencias.

El sonido digital es la muestra registrada en un ordenador que queda definida


de forma matemtica por ciertos parmetros que son susceptibles de expresarse
en forma numrica (digital). La calidad de sonido digital esta en proporcin
directa con la calidad de datos que se empleen para digitalizar una unidad de
tiempo sonora.

Todos sabemos que los equipos informticos no trabajan con datos analgicos,
sino que lo hacen con datos digitales. Por lo tanto, para representar un sonido,
es preciso capturarlo en una naturaleza binaria, para lo que se hace un muestreo
del mismo, tomando determinados valores de las ondas y representando dichos
valores en formato digital.

Para medir el nmero de capturas utilizamos la frecuencia de muestreo. Como


un Herzio es un ciclo por segundo, la frecuencia de una captura en Herzios
representa el nmero de capturas que realizamos en un segundo. As, una
frecuencia de muestreo de 20KHz realizara 20000 capturas de puntos por
segundo.
II. Problema

De una fraccin de una cancin, los dos canales estero deben estar
desfasados en el tiempo. La tarea ser restaurar el archivo original. Se debe
imprimir los dos diferentes espectros, uno para cada canal. La longitud de
los datos debe ser 1024 muestras, se debe utilizar el archivo corregido de
modo que los espectros sean del mismo intervalo de tiempo en la meloda.
Comente los resultados.

Informacin til
El archivo es de extensin .wav
La tasa de muestreo es 44100Hz
El desfase en el tiempo puede ser de 10Kmuestras
Comandos tiles en MATLAB
Wavread : Lee archivos .wav
Wavwrite : Escribe archivos .wav
Wavplay : Reproduce archivos .wav

III. 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); solo canal 1


Y2=x(:,2); 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

IV. 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

V. 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