PROCESADORES DIGITALES DE SEÑAL Práctica nº 3 Programación de un Filtro FIR 1. OBJETIVO El objetivo de esta práctica es escribir un programa que filtre un conjunto de muestras predefinidas mediante un filtro de tipo FIR. Un filtro FIR (Finite Impulse Response) consiste en una suma ponderada de entradas. La ecuación de un filtro FIR es la siguiente: y (n ) = m −1 ∑a k ⋅ x(n − k ) k =0 donde: x(n-k) es una secuencia temporal de entradas y(n) es la salida del filtro para el instante n ak es un vector con los coeficientes o pesos del filtro 2. PROCEDIMIENTO 1. Copiar dentro de la carpeta practica3 los ficheros que hay en el directorio ejemplos\practica3. 2. Define las siguientes constantes en el programa: • TAPS: Número de pesos o coeficientes del filtro (m en la ecuación). • MUESTRAS: Número total de muestras que pasarán por el filtro. 3. Construye los siguientes buffers: a) COEFS: buffer circular en memoria de programa para los coeficientes o pesos del filtro que se obtendrán del fichero “fircoefs.dat”. Nota: Este buffer estará ordenado empezando por el coeficiente con k=m-1. Esto es debido a que el bucle del filtro FIR debe procesar los datos empezando con el más antiguo y terminando con el dato que se acaba de añadir. Por lo tanto los coeficientes deben estar ordenados empezando por el asociado al más antiguo (am-1) y terminando con el coeficiente asociado al más reciente (a0). b) TABLA: buffer circular en memoria de datos donde estarán las muestras x(n-k). c) INBUF: buffer no circular, contiene muestras de entrada predefinidas que se obtendrán del fichero “onda_suma.dat”. d) OUTBUF: buffer no circular, contiene los valores de salida del filtro. Procesadores Digitales de Señal. Práctica 3 1 Para los buffers se deben utilizar los siguientes registros: Registro Nombre del Buffer Longitud Descripción I0 tabla L0 = TAPS Línea de retardo I1 inbuf L1 = 0 Entradas I2 outbuf L2 = 0 Salidas I8 coefs L8 = TAPS Coeficientes 4. Después de asociar los buffers con los registros de los DAG´s, el programa debe inicializar el buffer TABLA con ceros mediante un bucle. 5. Un bucle externo tomará sucesivamente un nuevo dato del buffer INBUF y lo pondrá en la posición que le corresponda del buffer TABLA, ver la Figura 1. A continuación se obtendrá una nueva muestra de salida mediante un bucle interno a este. La muestra obtenida se pondrá en el buffer OUTBUF. Este bucle externo se ejecutará tantas veces como se indique en la constante MUESTRAS. TABLA I0 → K=0 Muestra más reciente K=4 Muestra más antigua COEFS K=4 ← I8 K=3 K=3 K=2 K=2 K=1 K=1 K=0 Figura 1: Posición de los punteros en el buffer TABLA y en el buffer coeficientes inmediatamente después de añadir una nueva muestra a la tabla (pisando la muestra más antigua hasta ese momento). 6. El bucle interno será el que realice el filtrado propiamente dicho y por lo tanto implemente la ecuación indicada al principio. Como se ha indicado en la nota del punto 3, se realizará el bucle empezando con k=m-1 y se terminará con k=0. 3. TRABAJO Entregar el listado del programa y la representación gráfica de las señales de entrada y salida superpuestas en el mismo gráfico. Procesadores Digitales de Señal. Práctica 3 2