practica #1

15
UNIVERSIDAD MICHOACANA DE SAN NICOLAS DE HIDALGO FACULTAD DE INGENIERIA ELECTRICA Laboratorio De Procesamiento Digital De Señales Práctica #1 “Graficación de señales sinusoidales, el problema de Aliasing y el manejo de señales de audio” Alumno: Jesús Uriel Baltazar Hernández 0901898k Laboratorista: M.C. Antonio Ulises Saenz Trujillo.

Upload: daniel-palomares-g

Post on 18-Jan-2016

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Practica #1

UNIVERSIDAD MICHOACANA DE SAN NICOLAS DE HIDALGO

FACULTAD DE INGENIERIA ELECTRICA

Laboratorio De Procesamiento Digital De Señales

Práctica #1

“Graficación de señales sinusoidales, el problema de Aliasing y el manejo de señales de audio”

Alumno:

Jesús Uriel Baltazar Hernández

0901898k

Laboratorista:

M.C. Antonio Ulises Saenz Trujillo.

Morelia Michoacán 8 de abril de 2014

Page 2: Practica #1

Practica #1

“Graficación de Señales Sinusoidales, el Problema de Aliasing y el Manejó de Señales de Audio”

Objetivo: Aprender a graficar señales senoidales con las escalas horizontal y vertical adecuadas y observar la importancia del número de muestras por periodo y el fenómeno de traslape o aliasing. Implementar las funciones básicas de Matlab para el manejo de las señales de audio, usando los sonidos demo de Matlab y archivos .wav

Introducción

Señales. Una señal es una función de una o varias variables. Las señales pueden ser analógicas o digitales. Las señales analógicas son función de una o varias variables reales (continuas), y las señales discretas o secuencias son función de una o varias variables que únicamente puede tomar valores enteros.El rango de una señal es el conjunto de valores que puede tomar la señal en su dominio. El rango es continuo si está formado por uno o varios intervalos reales, o discreto cuando la señal toma un valor de entre los de un conjunto previamente establecido.

Secuencias. Es un conjunto de números ordenados. Se representa en función 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 función.

Manejo de secuencias en MATLAB

MATLAB es una herramienta de software matemático que ofrece un entorno de desarrollo integrado con un lenguaje de programación propio. Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario y la comunicación con programas en otros lenguajes y con otros dispositivos hardware.

Definición 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 están separados por espacios o comas, mientras que las filas están separadas por pulsaciones de la tecla intro o por caracteres punto y coma.

B=[1 2 3 ; 4 5 6 ; 7 8 9]

Page 3: Practica #1

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 continuación:

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 números que representen esa señal, 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

Page 4: Practica #1

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 código es el siguiente:

t=[0:0.01:0.5];

2.- Calcule un vector “y” utilizando la expresión y(t)=sen(wt) y donde w=2πf 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 función del seno, para cada valor de frecuencia de las secuencias anteriores, obteniendo así el vector “y” respecto a su frecuencia. El código en matlab es el siguiente:

%y=seno(wt) ____ w=2*pi*f ___ y=seno(2*pi*f*t)

y1=sin(2*pi*t);y2=sin(2*pi*2*t);y3=sin(2*pi*4.5*t);y4=sin(2*pi*10*t);y5=sin(2*pi*50*t);y6=sin(2*pi*104.5*t);

3.-Grafique de forma independiente cada uno de los vectores resultantes asegurándose 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 gráficos, divididos en 3 columnas y 2 filas de la forma siguiente:

%subplot(filas,columnas,posicion)

%plot(vector de tiempo, función a graficar)

subplot(3,2,1)plot(t,y1)subplot(3,2,2)plot(t,y2)subplot(3,2,3)plot(t,y3)subplot(3,2,4)

Page 5: Practica #1

plot(t,y4)subplot(3,2,5)plot(t,y5)subplot(3,2,6)plot(t,y6)

El resultado es el siguiente:

4.- Observe y asegúrese que las señales 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 gráficas son diferentes, a excepción de grafica 3 y 6, y es raro porque sus frecuencias son diferentes. Quizás se esté presentando un problema de Aliasing.

5.- Grafique las señales de frecuencia f3 y f6 juntas, y compárelas visualmente. Escriba sus observaciones y trate de explicar con sus propias palabras el fenómeno observado.

Se graficaron las dos señales juntas mediante en siguiente código en MATLAB.

Page 6: Practica #1

plot(t,y3,'-r',t,y6,'ob')gridontitle('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 están una sobre de la otra. Esto significa que en este caso se está presentando el fenómeno conocido como aliasing. Esto se presenta debido a que la frecuencia de muestreo no es la adecuada.

Si tomamos otro periodo de muestreo también 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 señales juntas.

Page 7: Practica #1

En esta nueva grafica podemos observar que ya no están una sobre la otra. Esto es debido a que cambiamos la frecuencia de muestreo de acuerdo al teorema de Nyquist.

6.- Compare numéricamente las dos señales anteriores y determine si se tratan de la misma señal, y explique porque.

¿Cuál es la condición para que dos señales sean las mismas?

Bueno estas tendrían que tener las misma amplitud, frecuencia, tipo de señal, etc.

¿Cómo podríamos comprobar si son iguales? Si restamos dos números 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 señales, 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 señales no son iguales.

7.- Usando el comando load, cargue uno de los siguientes archivos de sesión 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 canción “Aleluya!!” de aproximadamente 10 seg.

9.-Vuelva a reproducir el mismo sonido pero a frecuencias Fs2 = 2*Fs y Fs3 = Fs/2, escuche con atención y describa con sus propias palabras el fenómeno observado, y explique la razón de dicho efecto en el audio. Ponga especial atención al tiempo de reproducción de su secuencia de audio.

Para el primer caso tenemos:

sound(y,Fs*2)

En este caso se escuchó la música distorsionada, se aumentó la frecuencia de muestreo y al reproducirla esta iba más rápido.

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 más lento de lo normal.

Page 8: Practica #1

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:

subplot(3,1,1)plot(A)title('k=2')subplot(3,1,2)plot(B)title('k=4')subplot(3,1,3)plot(C)title('k=8')

Page 9: Practica #1

A medida que la frecuencia de muestreo se iba haciendo más pequeña, el sonido se distorsionaba más. El sonido cada vez se escuchaba más bajo, como si estuviera en algo profundo. También el tiempo de reproducción disminuyo un poco.

11.- Utilice el comando wavread para leer el equivalente de 10 segundos de audio, y reprodúzcalo usando el comando sound con sus argumentos adecuados. Tome en cuenta el valor de Fs de dicho audio para calcular el número 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 audioy 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 después poder reproducirlo. En MATLAB tenemos.

tiempo=10*Fs;[z,Fs]=wavread(song,timpo)sound(z,Fs)

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 código 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 compárelas visualmente.

Para ver las dos secuencias de audio y compararlas se graficó en MATLAB de la siguiente manera:

subplot(2,1,1)plot(z)title('Sonido original vol 100%')subplot(2,1,2)plot(a)title('Sonido modificado vol 50%')

Page 10: Practica #1

El resultado fue el siguiente:

En esta grafica podemos observar claramente cómo 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.

Conclusión

Se demostró de forma gráfica el problema dealiasing, se observó que en ocasiones una gráfica puede engañarnos ya que debido a que no se toma la frecuencia de muestreo adecuada de acuerdo al teorema de Nyquist, se produce un traslapamiento, impidiendo después recupera la señal original. Para evitar este fenómeno se tiene que muestrear por arriba de la frecuencia de Nyquist Fn=2fo.

También 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 números para después estos poder ser modificados mediante la frecuencia de muestreo. Sound sirve para reproducir el audio del vector de números 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 pequeño retardo en el tiempo y haciendo la voz más grave o a más aguda según sea el caso.

Page 11: Practica #1

Código completo de MATLAB

%1t=[0:0.01:0.5]; %vector de 0 a 0.5 con incrementos de 0.01

%2%y=seno(wt) ____ w=2*pi*f ___ y=seno(2*pi*f*t)

y1=sin(2*pi*t);y2=sin(2*pi*2*t);y3=sin(2*pi*4.5*t);y4=sin(2*pi*10*t);y5=sin(2*pi*50*t);y6=sin(2*pi*104.5*t);

%3%subplot(filas,columnas,posicion)subplot(3,2,1)plot(t,y1) %Graficamos y1subplot(3,2,2)plot(t,y2) %Graficamos y2subplot(3,2,3)plot(t,y3) %Graficamos y3subplot(3,2,4)plot(t,y4) %Graficamos y4subplot(3,2,5)plot(t,y5) %Graficamos y5subplot(3,2,6)plot(t,y6) %Graficamos y6

%5figure(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 graficatitle('Graficas con diferente frecuencia: 4.5Hz y 104.5Hz')%titulo del eje xxlabel('t');%titulo del eje yylabel('y(t)');%agregamos una leyendalegend('F = 4.5 Hz','F = 104.5 Hz')

%6A=y3-y6%No es la misma señal, ya que al restarlas no da como resultado cero

%7% load === carga un archivo

Page 12: Practica #1

loadhandel.mat

%8%sound === reproduce unarchivosound(y,Fs)sound(y,Fs*2)sound(y,Fs/2)

%10 y 11A=y(1:2:end);sound(A,Fs/2)

B=y(1:4:end);sound(B,Fs/4)

C=y(1:8:end);sound(C,Fs/8)

subplot(3,1,1)plot(A)title('k=2')subplot(3,1,2)plot(B)title('k=4')subplot(3,1,3)plot(C)title('k=8')

%12%wavread === convierte un arachivo de audio en un vector de números, además entrega la frecuencia de muestreo[y,Fs]=wavread('Treasure.wav');tiempo=10*Fs;[z,Fs]=wavread(song,tiempo);sound(z,Fs)

%13a=z*0.5;sound(a,Fs)

%14subplot(2,1,1)plot(z)title('Sonido original vol 100%')subplot(2,1,2)plot(a)title('Sonido modificado vol 50%')