Prctica #1 Graficacin de seales sinusoidales, el problema de Aliasing y el manejo de seales de audio
Alumno: Jess Uriel Baltazar Hernndez 0901898k
Laboratorista: M.C. Antonio Ulises Saenz Trujillo.
Morelia Michoacn 8 de abril de 2014 Practica #1 Graficacin de Seales Sinusoidales, el Problema de Aliasing y el Manej de Seales de Audio Objetivo: Aprender a graficar seales senoidales con las escalas horizontal y vertical adecuadas y observar la importancia del nmero de muestras por periodo y el fenmeno de traslape o aliasing. Implementar las funciones bsicas de Matlab para el manejo de las seales de audio, usando los sonidos demo de Matlab y archivos .wav Introduccin Seales. Una seal es una funcin de una o varias variables. Las seales pueden ser analgicas o digitales. Las seales analgicas son funcin de una o varias variables reales (continuas), y las seales discretas o secuencias son funcin de una o varias variables que nicamente puede tomar valores enteros.El rango de una seal es el conjunto de valores que puede tomar la seal en su dominio. El rango es continuo si est formado por uno o varios intervalos reales, o discreto cuando la seal toma un valor de entre los de un conjunto previamente establecido. Secuencias. Es un conjunto de nmeros ordenados. Se representa en funcin de una variable n, que toma valores enteros. Por ejemplo: X[n]={-2,-1,0,1,2 } Los valores de una secuencia, se denominan como muestras. Se utilizan para determinar el instante de tiempo en el que graficaremos la funcin. Manejo de secuencias en MATLAB MATLAB es una herramienta de software matemtico que ofrece un entorno de desarrollo integrado con un lenguaje de programacin propio. Entre sus prestaciones bsicas se hallan: la manipulacin de matrices, la representacin de datos y funciones, la implementacin de algoritmos, la creacin de interfaces de usuario y la comunicacin con programas en otros lenguajes y con otros dispositivos hardware. Definicin de vectores y matrices En matlab para definir un vector se realiza de la siguiente manera: A = [ 1 2 3 4 . . .] A = 1 2 3 4 5
Las matrices se definen o introducen por filas; los elementos de una misma fila estn separados por espacios o comas, mientras que las filas estn separadas por pulsaciones de la tecla intro o por caracteres punto y coma. B=[1 2 3 ; 4 5 6 ; 7 8 9] B = 1 2 3 4 5 6 7 8 9 Se puede acceder a cualquier elemento de la matriz se la siguiente forma: B(fila,columna) B(2,3) ans = 6 Operador dos puntos (:) El operador : representa un rango, en este caso, puede utilizarse con valores positivos o negativos. En este caso el incremento va entre el valor inferior y el superior, en las formas que se muestran a continuacin: C=-1:1:8 C = -1 0 1 2 3 4 5 6 7 8 Manejo de audio Para leer archivos de audio en formato wav y convertirlos en una matriz de nmeros que representen esa seal, podemos usar los siguientes comandos: 1 y = wavread(NombreArchivo) 2 [y, Fs] = wavread(NombreArchivo) 3 [y, Fs, nbits] = wavread(NombreArchivo) 4 [...] = wavread(NombreArchivo, N) 5 [...] = wavread(NombreArchivo, [N1 N2]) 6 siz = wavread(NombreArchivo,'size') Para reproducir el archivo de auidio se utiliza el comando sound mediante la siguiente sintaxis: sound(y,Fs) Donde y=vector del audio Fs= fecuencia de muestreo
Desarrollo 1.- Usando MATLAB, genere un vector de tiempo t que vaya de 0 a 0.5 en incrementos de 0.01. Creamos un vector iniciado en cero, y finalizado en 0.5, en incrementos de 0.01. En este caso el valor de 0 a 0.5 representa el periodo de tiempo y el valor de 0.01 el periodo de muestreo. El cdigo es el siguiente: t=[0:0.01:0.5];
2.- Calcule un vector y utilizando la expresin y(t)=sen(wt) y donde w=2f para cada una de las siguientes secuencias. a) f1= 1Hz. b) f2 = 2Hz. c) f3 = 4.5Hz. d) f4 = 10Hz. e) f5 = 50Hz. f) f6 = 104.5Hz Se evalu la funcin del seno, para cada valor de frecuencia de las secuencias anteriores, obteniendo as el vector y respecto a su frecuencia. El cdigo en matlab es el siguiente: %y=seno(wt) ____ w=2*pi*f ___ y=seno(2*pi*f*t)
3.-Grafique de forma independiente cada uno de los vectores resultantes asegurndose que la escala mostrada en el eje de las abscisas (eje x) este graduado conforme al vector t calculado en el inciso 1.
Crearemos una ventana en la que pondremos 6 grficos, divididos en 3 columnas y 2 filas de la forma siguiente:
4.- Observe y asegrese que las seales representadas se correspondan con sus respectivas frecuencias. En caso de no ser as, explique con sus propias palabras la posible causa. En la imagen podemos observar que todas las grficas son diferentes, a excepcin de grafica 3 y 6, y es raro porque sus frecuencias son diferentes. Quizs se est presentando un problema de Aliasing. 5.- Grafique las seales de frecuencia f3 y f6 juntas, y comprelas visualmente. Escriba sus observaciones y trate de explicar con sus propias palabras el fenmeno observado. Se graficaron las dos seales juntas mediante en siguiente cdigo en MATLAB. plot(t,y3,'-r',t,y6,'ob') gridon title('Graficas con diferente frecuencia: 4.5Hz y 104.5Hz') xlabel('t'); ylabel('y(t)'); legend('F = 4.5 Hz','F = 104.5 Hz')
El resultado fue el siguiente:
En esta grafica podemos observar que las dos funciones estn una sobre de la otra. Esto significa que en este caso se est presentando el fenmeno conocido como aliasing. Esto se presenta debido a que la frecuencia de muestreo no es la adecuada. Si tomamos otro periodo de muestreo tambin cambiara la frecuencia de muestreo. Observemos que pasa. Definamos nuestro vector de tiempo cambiando el periodo de muestreo. t=[0:0.001:0.1];
Ahora volvamos a graficas las dos seales juntas.
En esta nueva grafica podemos observar que ya no estn una sobre la otra. Esto es debido a que cambiamos la frecuencia de muestreo de acuerdo al teorema de Nyquist. 6.- Compare numricamente las dos seales anteriores y determine si se tratan de la misma seal, y explique porque. Cul es la condicin para que dos seales sean las mismas? Bueno estas tendran que tener las misma amplitud, frecuencia, tipo de seal, etc. Cmo podramos comprobar si son iguales? Si restamos dos nmeros y su diferencia nos da como resultado cero, esto significa que estos son iguales, por ejemplo 3-3=0. Esto significa que 3=3. Hagamos lo mismo con las seales, si su diferencia es cero significa que son iguales en caso contrario estas son diferentes. En MATLAB tenemos: A=y3-y6
El resultado es diferente de cero, por tanto confirmamos el paso anterior, las seales no son iguales. 7.- Usando el comando load, cargue uno de los siguientes archivos de sesin incluidos en MATLAB: handel.mat, chrip.mat o gong.mat. En MATLAB tenemos: loadhandel.mat 8.-Con el comando sound reproduzca el vector y a su respectiva Fs sound(y,Fs)- y escuche atentamente el sonido reproducido. En MATLAB tenemos: sound(y,Fs)
El sonido que escuche, es parte de una cancin Aleluya!! de aproximadamente 10 seg.
9.-Vuelva a reproducir el mismo sonido pero a frecuencias Fs2 = 2*Fs y Fs3 = Fs/2, escuche con atencin y describa con sus propias palabras el fenmeno observado, y explique la razn de dicho efecto en el audio. Ponga especial atencin al tiempo de reproduccin de su secuencia de audio.
Para el primer caso tenemos:
sound(y,Fs*2)
En este caso se escuch la msica distorsionada, se aument la frecuencia de muestreo y al reproducirla esta iba ms rpido.
Para el segundo caso tenemos:
sound(y,Fs/2) Paso lo mismo que en el caso anterior solo que en esta se dividi la frecuencia de muestreo a la mitad. Al reproducir la pista esta iba ms lento de lo normal.
10.-Realice un submuestreo mediante el comando y2 = y(1 : k : end); donde k=2 (lo cual equivale a que la frecuencia de muestreo sea Fs2 = Fs/k ), y reproduzca la nueva secuencia usando la nueva Fs2. Una realizado haga lo mismo para k=4 y k=8;
Para k=2;
A=y(1:2:end); sound(A,Fs/2)
Para k=4;
B=y(1:2:end); sound(B,Fs/4)
Para k=8;
C=y(1:2:end); sound(C,Fs/8)
Se graficaron estos sonidos para poder ser comparados:
A medida que la frecuencia de muestreo se iba haciendo ms pequea, el sonido se distorsionaba ms. El sonido cada vez se escuchaba ms bajo, como si estuviera en algo profundo. Tambin el tiempo de reproduccin disminuyo un poco.
11.- Utilice el comando wavread para leer el equivalente de 10 segundos de audio, y reprodzcalo usando el comando sound con sus argumentos adecuados. Tome en cuenta el valor de Fs de dicho audio para calcular el nmero correcto de muestras necesarias para reproducir los 10 segundos de audio solicitados.
Primero tenemos que leer el sonido completo para conocer su frecuencia de muestreo.
[y,Fs]=wavread('Treasure.wav'); %Funcion que lee un audio y te devuelve el vector y, y la Fs.
La frecuencia de muestreo obtenida fue de: Fs= 44100 muestras/segundo
Para leer el equivalente a 10 segundos debemos de multiplicar la Fs por 10 y guardarlo en una variable para despus poder reproducirlo. En MATLAB tenemos.
Al reproducirlo se escuch que efectivamente solo se reprodujeron los 10 segundos.
12.- Modifique la secuencia de audio de tal manera que el volumen del audio sea del 50% de su volumen original. Explique el procedimiento realizado para lograr el objetivo.
Para obtener el 50% del volumen original se multiplico el vector del sonido por 0.5 Esto es para reducir la amplitud y este se reproduzca a la mitad de su volumen.
El cdigo en MATLAB es el siguiente:
a=z*0.5; sound(a,Fs)
Al reproducirlo se escuch a la mitad de su volumen original.
14.- Grafique la secuencia de audio original y la que se ha modificado el volumen, y comprelas visualmente.
Para ver las dos secuencias de audio y compararlas se grafic en MATLAB de la siguiente manera:
En esta grafica podemos observar claramente cmo se modific su amplitud. El sonido original tiene una amplitud de 1 mientras que la modificada est a la mitad 0.5, esto es lo que ocasiona que el volumen se escuche a 50% de su volumen original. Conclusin Se demostr de forma grfica el problema dealiasing, se observ que en ocasiones una grfica puede engaarnos ya que debido a que no se toma la frecuencia de muestreo adecuada de acuerdo al teorema de Nyquist, se produce un traslapamiento, impidiendo despus recupera la seal original. Para evitar este fenmeno se tiene que muestrear por arriba de la frecuencia de Nyquist Fn=2fo. Tambin se conocieron nuevos comandos para modificar audios en formato wav. Estos comandos son wabread y sound. wavreadsirve para convertir un audio en un vector de nmeros para despus estos poder ser modificados mediante la frecuencia de muestreo. Sound sirve para reproducir el audio del vector de nmeros obtenido de wavread. En los ejercicios, se observ la importancia de la frecuencia de muestreo. Si esta se cambia del valor original con la que fue grabada dicho audio, se escucha como se distorsiona, produciendo un pequeo retardo en el tiempo y haciendo la voz ms grave o a ms aguda segn sea el caso.
Cdigo completo de MATLAB %1 t=[0:0.01:0.5]; %vector de 0 a 0.5 con incrementos de 0.01
%5 figure(7) %ploteamos las dos graficas, %plot(vector,function,tipo y color,sig grafica) plot(t,y3,'-r',t,y6,'-b') gridon%activamos cadricula %titulo de la grafica title('Graficas con diferente frecuencia: 4.5Hz y 104.5Hz') %titulo del eje x xlabel('t'); %titulo del eje y ylabel('y(t)'); %agregamos una leyenda legend('F = 4.5 Hz','F = 104.5 Hz')
%6 A=y3-y6 %No es la misma seal, ya que al restarlas no da como resultado cero
%12 %wavread === convierte un arachivo de audio en un vector de nmeros, adems entrega la frecuencia de muestreo [y,Fs]=wavread('Treasure.wav'); tiempo=10*Fs; [z,Fs]=wavread(song,tiempo); sound(z,Fs)