Escuela Politécnica Superior – 3º Ingeniería Informática TAA01 – Tratamiento Digital de Señales Curso 2004/2005. Laboratorio 5B Práctica 2: Muestreo y Reconstrucción 1er. Apellido 2º Apellido Nombre Grupo Puesto Fecha NOTAS PRÁCTICAS SOBRE MATLAB En cualquier momento, puede obtener ayuda sobre una función Matlab introduciendo en la consola el comando help <funcion>. Dependiendo del resultado de cada apartado, puede que se le solicite representarlo de forma gráfica, para lo cual pueden serle de ayuda los comandos siguientes: plot o stem para representar gráficamente un conjunto de valores. subplot para representar conjuntamente más de una gráfica en la misma ventana. figure para crear una nueva ventana gráfica y no sobrescribir la gráfica de la ventana anterior. title, xlabel, ylabel para insertar texto en el encabezado, en el eje horizontal y en el eje vertical, respectivamente, de la gráfica activa. Para pegar la gráfica como imagen en otra aplicación, proceda como sigue: Sitúese en la ventana de la gráfica que desea copiar. Seleccione “Edit” -> “Copy Figure” del menú de la parte superior de la ventana. Tras esta operación, la gráfica quedará copiada como imagen en el portapapeles de Windows. Sitúese en la aplicación donde desea copiar la imagen (Word, Paint, etc.) y péguela siguiendo el método habitual (ctrl+v) 1. Introducción (resultado : p2_fmagplot.m) Cuando una señal continua se muestrea, su espectro presenta el efecto conocido como solapamiento o aliasing, porque regiones del dominio de frecuencias se desplazan en una cantidad igual a la frecuencia de muestreo. Para mostrar este efecto, en realidad es necesario emplear un osciloscopio. Con MATLAB únicamente es posible simularlo y ese es precisamente el objetivo de esta práctica. La simulación consistirá en una operación de muestreo, seguida de una conversión D/A (incluyendo un filtro de reconstrucción real). Este sencillo sistema se estudiará con señales de entrada sinusoidales de distinta frecuencia, analizando y comparando las transformadas de Fourier de las señales analógicas de entrada y salida. Los diferentes apartados tratan cada una de las partes del proceso de muestreo y reconstrucción. Para simular señales analógicas, es necesario emplear una elevada frecuencia de muestreo - al menos cinco veces la máxima frecuencia presente en la señal analógica a simular. Por tanto, habrá dos "frecuencias de muestreo" en el problema: una para el muestreo que se desea estudiar y otra para simular la señal continua. Un segundo problema es cómo mostrar la transformada de Fourier de una señal continua. Una vez más, la transformada de Fourier es una señal continua, por lo que solamente puede ser simulada con MATLAB. La siguiente función (genere el fichero p2_fmagplot.m correspondiente) le permitirá dibujar la simulación de la transformada de Fourier de una señal en tiempo continuo. Note que una de las entradas de la función es el periodo de muestreo de la simulación, dt. function p2_fmagplot(xa,dt) % % xa: the "ANALOG" signal dt: the sampling period for the simulation of xa(t) L=length(xa); Nfft = round( 2 .^ round(log2(5*L)) ); %<-- next power of 2 Xa = fft(xa,Nfft); range = 1:(Nfft/4); ff = range/Nfft/dt; figure plot(ff/1000,abs(Xa(range))) title('CONT-TIME FOURIER TRANSFORM (MAG)') xlabel('Frequency (kHz)'), grid 2. Generación de señales (resultado: p2.m) Es muy importante generar un script de MATLAB que realice todas las operaciones detalladas en este apartado. Posteriormente, dicho script será empleado para realizar pruebas con distintos valores de la frecuencia de simulación fsim, la frecuencia de la señal sinusoidal fo y la frecuencia de muestreo fs. No incluya la definición de estos valores en el script. Defínalos en la consola de MATLAB de forma que se puedan redefinir en ejecuciones posteriores del script. 2.1) Generación de señales Para mostrar el efecto del aliasing, necesitamos una señal analógica de entrada que recorra el sistema a través de las distintas fases. Usaremos funciones sinusoidales, aunque cuando la simulación esté funcionando, se podrán emplear otras señales de entrada. Para empezar, debemos elegir una "frecuencia de muestreo de la simulación" fsim. Tomaremos fsim=80kHz. a) Genere una señal analógica simulada que sea un coseno con frecuencia analógica fo. Por el momento, fije fo a 1 kHz. x t cos 2 fot 0t T Genere muestras de la señal x(t) (a la frecuencia de simulación fsim) sobre un intervalo que vaya de 0 a T. Elija la longitud de la señal para que haya 1000 muestras de la señal analógica simulada. AYUDA: el salto temporal entre muestra y muestra de la señal x(t) valdrá dt=1/fsim. b) Dibuje la señal con plot (para que las muestras queden conectadas, simulando una señal continua). No olvide representar en el eje x el tiempo analógico real. Dibuje la gráfica obtenida en el espacio siguiente. c) Dibuje la magnitud de la transformada de Fourier de esta señal empleando la función fmagplot realizada en el primer apartado. Compruebe que dicha transformada tiende a ser una delta centrada en la frecuencia fo. NOTA: no olvide que la función fmagplot recibe como entrada el periodo de muestreo de simulación dt, no la frecuencia. Gráfica y comentarios 2) Conversión A/D El conversor A/D toma muestras de la señal analógica de entrada cada Ts segundos. Esto se simula tomando un subconjunto de las muestras generadas para la señal de entrada analógica x(t). Para evitar complicaciones innecesarias, el ratio de fsim a la frecuencia de muestreo del conversor A/D, fs, será un número entero r. De esta forma, el muestreo se reduce a elegir una muestra cada r muestras del vector que simula la señal analógica de entrada. a) Dibujar en el espacio siguiente la señal de tiempo discreto resultante con fs=8 kHz usando la función stem de MATLAB. Represente la señal marcando en el eje x los instantes de tiempo analógico con los que se corresponde cada muestra. AYUDA: el numero de muestras de la señal de tiempo discreto resultante será de 1000/r, ya que hemos impuesto que la señal analógica de entrada tenga 1000 muestras. b) Superponga a la señal representada en el apartado anterior la señal analógica original x(t) que dibujó en el apartado 1b con el comando plot. Dibuje la figura con ambas señales en el espacio siguiente. AYUDA: utilice el comando hold on de MATLAB para retener la señal pintada en el apartado anterior y no perderla al pintar la señal x(t) 3) Diseño de un filtro de reconstrucción El conversor D/A consta de dos partes, un espaciado de las muestras en el tiempo discreto con el intervalo de muestreo Ts, seguido de un filtro de reconstrucción analógico. a) El filtro de reconstrucción deberá ser, por supuesto, un filtro digital (ya que trabajamos con MATLAB) que simule el verdadero filtro analógico. Por supuesto, la frecuencia de muestreo analógica debe ser fs/2. Con MATLAB, esta frecuencia se debe escalar a: fcut=2 * (fs/2) / fsim; Use la función cheby2 de MATLAB para diseñar el filtro de la siguiente forma: [b,a]=cheby2(9, 60, fcut); Esto diseñará un filtro de orden 9 con 60dB de atenuación en la banda de corte. 4) Conversión D/A La fase de conversión D/A consiste en crear una señal analógica x'(t) a partir de la señal en tiempo discreto x[n] y posteriormente filtrarla con el filtro de reconstrucción diseñado en el apartado anterior. El vector de MATLAB que simula la señal analógica x'(t) se reconstruye a partir del vector que representa la señal discreta x[n] insertando un número de ceros entre cada muestra de x[n]. El número de ceros a introducir depende del ratio r=fsim/fs. a) Realice la operación de inserción de ceros sobre la señal obtenida en el ejercicio 2a. Entre cada muestra de esta señal debe insertar r-1 ceros. La señal resultante debe ser como la señal analógica representada en el apartado 1b, pero siendo cero el valor de la misma fuera de los instantes de muestreo representados en el apartado 2a. Represente la señal resultante con plot y compruebe este hecho. b) Aplique el filtro de reconstrucción a la señal con ceros insertados mediante el comando MATLAB: xr = filter(b,a,xp) siendo b, a los coeficientes del filtro de reconstrucción obtenidos en el apartado 3a y xp la señal con ceros insertados del apartado anterior. Represente en el espacio siguiente la señal analógica reconstruida xr(t). Compruebe su parecido con la señal analógica original representada en el apartado 1b. Observe el desfase que presenta la señal analógica reconstruida respecto a la señal de entrada original. Esto es debido al retardo que introduce el filtro analógico. Igualmente, la envolvente de la señal reconstruida es creciente al principio. Este efecto está causado por el tiempo de respuesta del filtro, también llamado transitorio del filtro. Dibuje también la magnitud de la transformada de Fourier de esta señal empleando la función fmagplot. Compruebe su parecido con la obtenida en el apartado 1c. 3. Test de aliasing Todos los pasos del apartado anterior debe guardarlos en el script p2.m, de modo que pueda realizar los ejercicios de este apartado mediante dicho script. Tome la frecuencia de muestreo como fs=8kHz y vaya aumentando la frecuencia de la sinusoide según los valores fo=2 kHz, 3 kHz, 4 kHz, 5 kHz. Dibuje la transformada de Fourier de las señales de entrada y de salida para todos estos valores y compárelas. ¿Cuando empieza a ocurrir el aliasing? fo=2 Khz fo=3 Khz fo=4 Khz fo=5 Khz