Tratamiento de Señales Laboratorio 6 (2h) Filtrado, interpolación y diezmado Curso 2011/2012 Objetivos: El objetivo de esta práctica es que el alumno se familiarice con las técnicas de interpolación y diezmado y su contenido teórico se corresponde con los Capítulos 2, 3 y 4 del libro “Discrete-Time Signal Processing” de A. V. Oppenheim y R. W. Schafer, Prentice Hall, 1999 (segunda edición). Los apartados etiquetados como “Ejercicio” deberán resolverse en el laboratorio. El alumno construirá a partir de los mismos un fichero ejecutable con un menú que permita acceder a cada uno de ellos separadamente. Para poder resolver alguno de los ejercicios de esta práctica es necesario traer unos auriculares. Interpolación/diezmado de secuencias Interpolar consiste básicamente en estimar o reconstruir valores de la señal entre los valores disponibles (correspondientes a los instantes de muestreo). En la Figura 1 se muestra el esquema general para interpolar una señal por un factor L. donde xe [n] viene dada por la siguiente expresión: L xe [n] x[n] ↑L −π L xi [n] π L Figura 1: Diagrama de bloques de un interpolador. xe [n] = ! x[n/L], n = 0, ±L, ±2L, . . . , 0, en otro caso. El filtro paso bajo interpola entre los valores distintos de cero de xe [n] para generar la señal interpolada xi [n]. El filtro interpolador ideal de la Figura 2.1 tiene la siguiente respuesta impulsional: sen(nπ/L), n "= 0, hideal [n] = nπ/L 1, n = 0. Dicho filtro es claramente irrealizable, por lo que debemos conformarnos con una aproximación. En general, una interpolación precisa requiere un filtro paso bajo de orden elevado y diseñado cuidadosamente. No obstante, hay dos aproximaciones muy sencillas que se utilizan a menudo: interpolación de orden cero e 1 interpolación lineal. En el primer caso la señal interpolada xi [n] se construye sencillamente repitiendo cada valor de x[n] L veces: xe [0], n = 0, 1, . . . , L − 1, xe [L], n = L, L + 1, . . . , 2L − 1, xi [n] = xe [2L], n = 2L, 2L + 1, . . . , 3L − 1, ... lo cual se consigue convolucionando xe [n] con la siguiente respuesta al impulso: hoc [n] = δ[n] + δ[n − 1] + · · · + δ[n − (L − 1)]. (1) La interpolación lineal se lleva a cabo mediante un sistema con respuesta al impulso ! 1 − |n|/L, |n| ! L − 1, hlin [n] = 0 en otro caso. Nótese que el interpolador de orden cero es causal, mientras que tanto el interpolador lineal como el ideal son no causales. Ejercicio 1. Grabe un fichero de voz con una frecuencia de muestreo 11025 Hz (puede usar también el fichero frase1.wav). Cárguelo en Matlab1 y escúchelo empleando la instrucción soundsc(y,fs). El objetivo de este ejercicio es interpolar por L = 2 la señal de voz anterior. Para ello, en primer lugar programe una función expand(x,L) que devuelva la secuencia expandida con ceros xe [n]. La secuencia resultante xe [n] ha de tener una longitud L veces la de x[n]. Tras la expansión, realice el filtrado empleando los siguientes filtros interpoladores: a) Un interpolador de orden cero (es un filtro FIR con respuesta impulsional dada en (1)). b) Un filtro paso bajo FIR de frecuencia de corte ωc = π/2 y orden 24 (diseñe el filtro empleando la instrucción fir1). Es una aproximación del interpolador ideal. Escuche las señales interpoladas con ambos filtros: tenga en cuenta que al haber interpolado la señal ha de emplear en la instrucción soundsc una fs (velocidad del D/A) doble de la frecuencia de muestreo empleada en la grabación (frecuencia del A/D). Si consideramos que la señal original comienza en n = 0, dibuje las secuencias interpoladas con los dos filtros en el intervalo n=0:49. Ejercicio 2. Se desea reproducir la señal de voz grabada previamente frase1.wav, pero empleando ahora una frecuencia de muestreo de 8000 Hz. Mediante técnicas de interpolación y diezmado altere la frecuencia de muestreo de la señal original (puede considerarla aproximadamente de 11000 Hz) para conseguir que la voz suene bien con la nueva frecuencia de muestreo. Ejercicio 3. Muestreamos la señal sinusoidal x(t) = cos(2π10t) con una frecuencia de muestreo fs = 100 Hz en los instantes t=0:1/fs:2 para así obtener una secuencia x[n]. El objetivo de este ejercicio es obtener, a partir de x[n] y mediante técnicas de diezmado e interpolación, una nueva secuencia xd [n] cuyas muestras sean las de la señal sinusoidal original pero en los instantes temporales td = ∆T : 1/fs : 2 + ∆T , siendo ∆T = T/2 = 1/(2fs ). Compare xd [n] con la secuencia ideal obtenida muestreando directamente x(t) en los instantes td . Represente un segmento de unas 50 muestras en el que comparen ambas señales. Tenga en cuenta que los filtrados que realice para obtener xd [n] introducen un cierto retardo, que debe corregir a la hora de realizar la comparación. 1 Para cargar desde Matlab un fichero de voz emplee la instrucción [y,fs]=wavread(’frase1.wav’). 2