TAA01 – Tratamiento Digital de Señales Práctica 2: Muestreo y Reconstrucción

Anuncio
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 
0t 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
Descargar