6
Práctica Nº 5 DFT y Análisis de Señales en el dominio de la frecuencia FCE-BUAP Procesamiento Digital de señales I Dr. Roberto C. Ambrosio Lázaro Fecha de entrega :miércoles 22 de abril 2015 en clase se revisaran los resultados. Entregar en formato de reporte (pdf) y archivos matlab.m numerando cada ejercicio como vienen en el documento- al correo electrónico del profesor. 1. Objetivo El objetivo de este laboratorio es estudiar el uso de la Transformada de Fourier en Tiempo Discreto (DTFT) para su aplicación práctica en el análisis espectral de señales; a la vez que la implementación en Matlab de algoritmos de cómputo de la DTFT, y el estudio del desempeño de diferentes tipos de ventanas empleadas por los algoritmos de matlab. 2. Introducción Investigar conceptos básicos sobre la DFT y sus propiedades. (Describirlas) Investigar los conceptos sobre el uso de ventanas para la TF así como sus ecuaciones que describen a estas ventanas (rectangular, hanning, hamming). Investigar sobre el concepto de la generación de eco como una señal desplazada, así como acerca del sistema multifrecuencial o DTMF (Dual-Tone Multi-Frequency) 3. Desarrollo 3.1. Problemas Preliminares de Simulación -Transformada de Fourier en Tiempo Discreto (DTFT) Trabajo previo: Verifique el resultado obteniendo las gráficas correspondientes que se le indican en cada actividad. Dada una señal almacenada en el vector x, el siguiente comando >> y = fft(x); computará la DFT con N=length(x) puntos de la secuencia x. El número de puntos de la DFT puede especificarse independientemente de la longitud de la secuencia mediante un argumento de entrada adicional de la función. Por ejemplo, los comandos para computar la FFT con N=100 puntos serían: >> N = 100; >> y = fft(x,N); Si N es menor que la longitud de x, entonces el vector x es completado con ceros hasta la longitud N. En caso de ser mayor, la secuencia es truncada a una longitud igual a N. Nota: La función fft no genera el vector de frecuencias, que debe ser generado independientemente. La función devuelve los valores de la DFT que corresponderían a frecuencias entre 0 y 2π. El retorno al dominio temporal puede realizarse mediante el cómputo de la IDFT, utilizando para ello la función Matlab ifft, de la siguiente manera: >> x = real(ifft(y)); donde el vector y corresponde a la DFT de la señal x, y x es la señal temporal original. Cabe aclarar que se toma la parte real de la señal obtenida mediante la función ifft, dado que la señal resultante puede presentar valores complejos con parte imaginaria muy pequeña debido a errores númericos. También puede especificarse el número N de puntos considerados en el cálculo de la IDFT, el cual debe coincidir con el valor de N usado previamente en la función fft. Si se omite el valor N, la función ifft utilizará por defecto N=length(y). Nota: La función ifft de Matlab asume que el espectro se encuentra definido entre 0 y 2π. Compute (correr) los siguientes ejemplos ilustran el uso de la funciones fft e ifft. Ejemplo 3.1.1: Supongamos que se desea calcular la DFT de la señal en tiempo discreto x(n) que se obtiene al muestrear la señal:

DFT y Aplicaciones

  • Upload
    elmeme

  • View
    120

  • Download
    1

Embed Size (px)

DESCRIPTION

aplicacion matlab para practica dtf

Citation preview

Page 1: DFT y Aplicaciones

Práctica Nº 5 DFT y Análisis de Señales en el dominio de la frecuencia FCE-BUAP Procesamiento Digital de señales I Dr. Roberto C. Ambrosio Lázaro Fecha de entrega :miércoles 22 de abril 2015 en clase se revisaran los resultados. Entregar en formato de reporte (pdf) y archivos matlab.m numerando cada ejercicio como vienen en el documento- al correo electrónico del profesor. 1. Objetivo El objetivo de este laboratorio es estudiar el uso de la Transformada de Fourier en Tiempo Discreto (DTFT) para su aplicación práctica en el análisis espectral de señales; a la vez que la implementación en Matlab de algoritmos de cómputo de la DTFT, y el estudio del desempeño de diferentes tipos de ventanas empleadas por los algoritmos de matlab.

2. Introducción • Investigar conceptos básicos sobre la DFT y sus propiedades. (Describirlas) • Investigar los conceptos sobre el uso de ventanas para la TF así como sus ecuaciones que describen a

estas ventanas (rectangular, hanning, hamming). • Investigar sobre el concepto de la generación de eco como una señal desplazada, así como acerca del

sistema multifrecuencial o DTMF (Dual-Tone Multi-Frequency) 3. Desarrollo 3.1. Problemas Preliminares de Simulación -Transformada de Fourier en Tiempo Discreto (DTFT) Trabajo previo: Verifique el resultado obteniendo las gráficas correspondientes que se le indican en cada actividad. Dada una señal almacenada en el vector x, el siguiente comando

>> y = fft(x);

computará la DFT con N=length(x) puntos de la secuencia x. El número de puntos de la DFT puede especificarse independientemente de la longitud de la secuencia mediante un argumento de entrada adicional de la función. Por ejemplo, los comandos para computar la FFT con N=100 puntos serían: >> N = 100; >> y = fft(x,N);

Si N es menor que la longitud de x, entonces el vector x es completado con ceros hasta la longitud N. En caso de ser mayor, la secuencia es truncada a una longitud igual a N. Nota: La función fft no genera el vector de frecuencias, que debe ser generado independientemente. La función devuelve los valores de la DFT que corresponderían a frecuencias entre 0 y 2π. El retorno al dominio temporal puede realizarse mediante el cómputo de la IDFT, utilizando para ello la función Matlab ifft, de la siguiente manera: >> x = real(ifft(y));

donde el vector y corresponde a la DFT de la señal x, y x es la señal temporal original. Cabe aclarar que se toma la parte real de la señal obtenida mediante la función ifft, dado que la señal resultante puede presentar valores complejos con parte imaginaria muy pequeña debido a errores númericos. También puede especificarse el número N de puntos considerados en el cálculo de la IDFT, el cual debe coincidir con el valor de N usado previamente en la función fft. Si se omite el valor N, la función ifft utilizará por defecto N=length(y). Nota: La función ifft de Matlab asume que el espectro se encuentra definido entre 0 y 2π.

Compute (correr) los siguientes ejemplos ilustran el uso de la funciones fft e ifft.

Ejemplo 3.1.1: Supongamos que se desea calcular la DFT de la señal en tiempo discreto x(n) que se obtiene al muestrear la señal: x(t) = 4 + 3sin(2π 5t) con una frecuencia Fs = 100 Hz. La siguiente sucesión de comandos Matlab permite generar la señal x(n) y calcular y graficar la amplitud y fase de la DFT de x(n).

t=0:0.01:1;x=4+3*sin(5*pi*2*t); y=fft(x,10000); magnitud=abs(y);

Page 2: DFT y Aplicaciones

fase=unwrap(angle(y)); frec=[0:2*pi/10000:2*pi]; frec=frec(:,1:10000); subplot(211) plot(frec,magnitud); xlabel('frecuencia w [rad/seg]'); ylabel('Magnitud'); title('Espectro de x(n)'); axis([0 2*pi 0 200]); grid;subplot(212) plot(frec,fase*180/pi);xlabel('frecuencia w [rad/seg]'); ylabel('Fase [grados]'); axis([0 2*pi -4e4 2e4]); grid;

Actividad: Muestre la salida de las gráficas correspondientes y comente cada línea de código en su script (file*.m) que será enviado junto con su reporte. Nota: Añada una tercera gráfica donde ahora el eje x-del espectro de frecuencia este en unidades de Hertzs y solo aparezca un lado del espectro (sin el espejo), verifique la referencia

Referencia https://dadorran.wordpress.com/2014/02/20/plotting-frequency-spectrum-using-matlab/ Ejemplo 3. 1. 2: La siguiente secuencia de comandos permite obtener nuevamente la señal temporal a partir del cálculo de la IDFT, visualizando en una misma gráfica la señal original y el resultado obtenido a partir de la IDFT:

x_new=real(ifft(y,10000)); figure, plot(t,x,'r-o',t,x_new(1:length(x)),'b-x'); title('Señal original vs. resultado de la IDFT'); xlabel('tiempo [segundos]'); ylabel('Amplitud');legend('Señal original','Resultado de la IDFT'); grid;

Actividad: Muestre la salida de las gráficas correspondientes y comente cada línea de código en su script (file*.m) 3.1.3. Cómputo de la DTFT usando ventanas En esta Subsección estudiaremos el uso de ventanas para el cómputo de la DTFT de señales de longitud infinita, que no necesariamente tienen una transformada Z racional. No es posible usar la expresión de la TF para el cómputo de la DTFT de una señal de longitud infinita, excepto para el caso en que la señal tenga una transformada Z racional. La alternativa es entonces truncar la señal a un número finito de muestras usando lo que se denomina una función de ventana, y luego computar la DTFT de la señal truncada que aproximará la DTFT de la señal original, bajo ciertas condiciones. Numerosos tipos diferentes de ventanas han sido propuestos en la literatura para su uso en análisis espectral de señales (ver [1],[2] para más detalles). El tipo más común es la denominada ventana rectangular que sólo trunca la señal a un número finito de muestras, sin afectar el valor de las muestras. En el dominio temporal, la ventana rectangular de longitud L viene dada por:

Page 3: DFT y Aplicaciones

Puede verse entonces que al aproximar el espectro X (ω), de la señal original, por el espectro, Xˆ (ω), de la correspondiente señal truncada, se comete un error que dependerá de la forma de la función de

ventana w(n) (o de su espectro W(ω ) a través de la relación (7). Se proponen a continuación algunos problemas donde se estudiarán las características espectrales de algunas de las funciones de ventana disponibles en Matlab [3] (nominalmente las funciones hamming,hanning y boxcar, que implementan las ventanas de Hamming, Hann, y rectangular

Problema 3.1.2: Las funciones Matlab hamming, hanning y boxcar, permiten implementar las funciones de ventana de Hamming, Hann, y rectangular respectivamente. Estas funciones están definidas en el dominio temporal como [3]:

• Ventana Hamming (hamming) • Ventana de Hann (hanning)

• Ventana Rectangular (boxcar) Actividad

a. Usando las funciones de ventana de matlab, calcular la DTFT de la ventana rectangular y determine los cruces por ceros del espectro de amplitud. Utilice la función Matlab fft para computar el espectro de amplitud . -Para la ventana rectangular. En una misma gráfica muestre superpuestos el espectro para tres longitudes L distintas, L =20, 31, 81. Use una escala lineal para el espectro de amplitud. -Para las 3 ventanas mencionadas, graficar el espectro de frecuencia , mida la amplitud (representaremos el módulo en dB) y el ancho del lóbulo (radianes) principal de la DTFT. Determinando los puntos de cruces por cero y la amplitud de los lóbulos laterales. NOTA: Recuerde que puede usar el comando ginput para extraer valores de una gráfica en Matlab. Realice una tabla donde coloque los valores para cada ventana los valores amplitud y ancho de lobulo

b) Sea la señal

x(n) = cos(0.5π.n)+ cos(0.51π.n) Use la ventana rectangular para computar y graficar una aproximación del espectro de la señal x(n). Determine la relación entre la resolución en frecuencia y la longitud L de la ventana. A partir de este resultado, calcule la longitud L mínima de modo que se distingan las componentes armónicas de la señal x(n).

Referencias: http://www.mathworks.com/help/signal/ref/hamming.html http://cvsp.cs.ntua.gr/~nassos/resources/speech_course_2004/OnlineSpeechDemos/speechDemo_2004_Part1.html

3.2 Casos prácticos- análisis de señales en el dominio de la frecuencia Ejercicio 3.2.1

a) Ingresar un archivo de sonido, tal como una señal de voz o una nota musical (Practica 2), en formato .WAV al script de MatLab; utilizando las instrucciones adecuadas.

b) Obtener las señales de voz en el dominio del tiempo (formas de onda), y en el dominio de la frecuencia (espectro). Nota.-Corregir su programa para que el eje x del espectro este en Hz. (verificar referencia previa)

c) Obtener las componentes frecuenciales de las muestras d) Determinar el ancho de banda.

Ejercicio 3.2.2 Las notas musicales de una escala están agrupadas en octavas con cada octava conteniendo 12 notas. La octava conteniendo la mitad de C cubre el rango de frecuencias de 220Hz a 440 Hz. La frecuencia de cada nota es 2 1/12 veces la frecneucnia de la nota previa, como se muestra en la tabla.

a) a) Realizar un programa en matlab para reproducir el sonido de cada nota; utilizando las instrucciones adecuadas. Se recomienda usar un ciclo for para generar el conjunto de las 12 notas, o en otro caso puede hacerlo de una por una.

b) Graficar las señales de las notas en el dominio del tiempo (formas de onda) adecue el eje x para que se aprecie cada una de las notas, así como el color correspondiente, etiquete cada una de ellas en el grafico, puede usar subplot o mostrar todas en un solo grafico. Graficar la señales de las notas en el dominio de la frecuencia (espectro). Nota.- el eje x del espectro este en Hz. Obtener las componentes frecuenciales de las muestras para verificar con la tabla.

c) Obtener el espectrograma para cada una de las notas. Usando la funcion spectrogram, ya sea en escala de grises o en colores, puede realizar uno para todas las frecuencias de las notas, o uno para cada uno de ellas.

Referencias: http://www.mathworks.com/help/signal/ref/spectrogram.html http://www.dsprelated.com/freebooks/mdft/Spectrogram_Speech.html

http://cvsp.cs.ntua.gr/~nassos/resources/speech_course_2004/OnlineSpeechDemos/speechDemo_2004_Part1.html

Page 4: DFT y Aplicaciones

Usar 3 seg. de duración, a 8KHz de Fs, Amplitud 1 y fase 0, con N= 300 muestras.

d) Que sucede si tratas de graficar todas las señales vs tiempo? Ajusta el rango para que puedas observar una parte de cada una de ellas , realiza tus comentarios.

e) Cambie la amplitud de la señal, que sucede en el efecto del sonido? Trata con valores menores a 1 y mayores a 1, comenta tus observaciones

f) Como cambia el sonido cuando cambias el valor de la fase? g) Que sucede si haces la Fs=1KHz? Altera la calidad de los resultados? Muestra estas variaciones en tu reporte y al

profesor. Ejercicio 3.2.3 sistema de marcación por tonos El uso de la Transformada de Fourier es de fundamental importancia para el análisis frecuencial de señales. Sin embargo, si se calcula la transformada de Fourier de una porción de larga duración de la señal, se pierde la información temporal de su contenido frecuencial, es decir, se conoce el contenido armónico de la señal pero no se puede especificar en qué momento está presente cada armónico. En las aplicaciones en las cuales se requiere conocer la información frecuencial en función del tiempo de la señal, se suele realizar un análisis de Fourier de tiempo corto. Para ello se divide la señal en segmentos de corta duración denominados frames. Un frame es una porción de L muestras sucesivas de una señal de longitud M, que se obtiene a partir de aplicar una ventana a la señal y desplazarla temporalmente. En la Figura 2, se divide una señal de longitud M, en N frames de longitud L. De esta manera, calculando la Transformada de Fourier a cada frame se puede conocer la evolución del contenido armónico de la señal en el tiempo. Esta técnica se denomina Transformada de Fourier en Tiempo Corto (Short-Time Fourier Transform). En el sistema de marcación por tonos utilizado en telefonía, también llamado sistema multifrecuencial o DTMF (Dual-Tone Multi-Frequency), cuando un usuario pulsa en el teclado de su teléfono la tecla correspondiente a un dígito que quiere marcar, se envían dos tonos de distinta frecuencia (uno por columna y otro por fila de acuerdo a la Tabla 2).

Page 5: DFT y Aplicaciones

Tabla 2. Frecuencias asociadas a cada dígito del sistema DTMF Así, la señal generada al presionar un dígito, tendrá dos componentes y una forma genérica:

a) Realice un script en matlab para generar los tonos correspondientes a cada digito. Puede realizar una función, o en su caso desde la línea de comandos un menú que indique cuantos dígitos ingresar, una vez ingresados estos, se reproducirá el sonido de cada uno de ellos. El programa también debe de grabar la secuencia de los números digitados en un archivo.wav, para su posterior uso.

b) Use la función Matlab wavread para cargar el archivo previamente generado “file.wav” que contiene la señal de audio a analizar.

c) Con la ayuda de las funciones fft y fftshift de Matlab compute la DTFT de la señal X completa y grafique el espectro de amplitud en función de la frecuencia en tiempo continuo asociada, en el rango entre [-Fs/2 , Fs/2]. Indique si es posible o no determinar el número marcado a partir del espectro de amplitud de la señal completa.

d) Realice una función o un script que tome como argumentos de entrada dos frecuencias, F1 y F2 (F1 < F2), y como argumento de salida la variable digito, correspondiente al dígito identificado. Para ello compare F1 con cada una de las frecuencias FL y F2 con cada una de las frecuencias FH. En caso de que alguna de las frecuencias estuviera fuera del rango (FL ± 1.8% y FH ± 1.8%), la variable de salida debe ser digito=[].

e) Realice un script o en su mismo programa, que: i. Divida la señal en frames con una duración de 450mseg, tal que la longitud del frame resulta L =(450e-3)*Fs muestras. ii. Para cada frame, calcule la DTFT, determine automáticamente las dos frecuencias de mayor amplitud y calcule las frecuencias en tiempo continuo asociadas (en Hz) (para ello puede utilizar la función max de Matlab). Utilice la función del inciso d. para determinar el dígito correspondiente a este frame. iii. Una vez procesados todos los frames, muestre en pantalla el número identificado.

d) pruebe su programa , grabe la marcación de un teléfono con su celular, en formato .wav, y pruebe su programa, corresponden a los dígitos marcados por ud.? Puede basarse en el algoritmo de Referencia: “Alternativa al análisis en frecuencia de la fft mediante el algoritmo Goertzel” http://revistas.utp.edu.co/index.php/revistaciencia/article/view/1831/1141

Ejercicio 3.2.4 a. Usando la convolucion, el escalado y retardo de las señales (u otros conceptos) crear el efecto del eco en un sonido mediante matlab. b. Primeramente cree el sonido, muestre su espectro de frecuencia, posteriomente obtenga el espectro de frecuencia del eco generado de la misma señal. c. Grabe por unos cuantos segundos la señal original seguida por su señal con eco.

El eco es un efecto sonoro que se produce cuando un sonido rebota contra una superficie lejana y llega por duplicado al receptor con un cierto retardo. Este efecto se puede reproducir artificialmente, mezclando el sonido original consigo mismo pero retardado y levemente atenuado. Se modela facilmente, configurando para cada repeticion, el retardo y la atenuacion. Una manera para reproducir este efecto en el laboratorio está usar un bucle de realimentación, como en la Figura 4.

Figura 4: Un sistema básico que implementa eco

Page 6: DFT y Aplicaciones

Considere el efecto de dar palmas con las manos en una sala grande. Primero se oye la palmada, luego una versión atenuada de la palmada, y despues el sonido atenuado de la versión que ya se atenuó

Ejercicio 3.2.5 El archivo de datos tp3_1.mat contiene un vector x que consiste de las muestras de una señal senoidal inmersa en ruido, muestreada con una frecuencia de Fs=1 KHz. Se asume que el ruido es blanco Gaussiano. a. Use la función fft de Matlab para computar y graficar la DTFT de la señal x, usando una ventana rectangular de longitud apropiada. Grafique la amplitud de la DTFT , y la fase en grados, con el eje de abscisas calibrado en frecuencias continuas. b. Basándose en las gráficas obtenidas determine la amplitud y frecuencia de la señal senoidal. Justifique teóricamente los cálculos realizados. c. Repita los apartados a. y b., pero usando ahora una ventana de Hann. Compare los resultados con los obtenidos en a. y b. d. Repita los apartados a. y b. pero usando una longitud de ventana igual a la mitad de la usada en a. y b. Compare los resultados obtenidos.

4. Referencias adicionales [1] Burrus, C. & McClellan, J. & Oppenheim, A. & Parks, T. & Schafer, R. & Schuessler, H. (1994). Computer-based Exercises for Signal Processing using Matlab, Prentice Hall, Englewood Cliffs, New Jersey. [2] Proakis, J. & Manolakis, D. (1992). Digital Signal Processing: Principles, Algorithms and Applications. 2

nd

Edition, Macmillan Publishing Company, New York. [3] The Math Works, Inc. (2014). Signal Processing Toolbox - User's Guide. The Math Works, Inc., 24