![]() |
Filtro FIR en Punto Fijo Esteban Bustamante
Trabajo desarrollado como trabajo final de la materia Técnicas Digitales III
|
Este proyecto se presenta como parte práctica del trabajo final de la asignatura Técnicas Digitales III. Consiste en la implementación de un Filtro FIR (Finite Impulse Response) definido completamente en software, desarrollado en lenguaje C y orientado a sistemas digitales.
El filtro opera sobre muestras de entrada representadas en formato de punto fijo, haciendo uso de la librería FXP. Para garantizar el correcto sincronismo entre las muestras de entrada y el proceso de filtrado, se emplea un buffer de entrada que permite el procesamiento por bloques de muestras en paralelo.
Tanto la señal de entrada como la señal de salida del filtro se almacenan en archivos de datos en formato PCM (.pcm). Este formato simplifica el procesamiento posterior de los datos y garantiza compatibilidad con herramientas externas para la visualización y el análisis de señales.
Con el objetivo de facilitar su uso y análisis, el proyecto incluye una interfaz gráfica desarrollada en Python, que permite generar señales de prueba, ejecutar el filtro y visualizar gráficamente tanto la entrada como la salida. Asimismo, el filtro puede ser ejecutado directamente desde línea de comandos mediante una interfaz CLI.
Junto al binario se entrega una demostración lista para ser ejecutada tanto en modo gráfico como en modo línea de comandos (ver Demostración).
El sistema se encuentra dividido en los siguientes bloques principales:
El filtro puede utilizarse de dos maneras:
Para la demostración de la funcionalidad el filtro en C, se generó un filtro haciendo uso de FIIR, que permite generar coeficientes para filtros arbitrarios con frecuencias de muestreo y filtrado determinadas. Para esta demostración se generó un FIR cuya respuesta al impulso coincide con un seno cardinal (sinc), con una frecuencia de muestreo de 48kHz, una frecuencia de cutoff de 800Hz y un ancho de banda de transición de 3840Hz, el cual observando su respuesta en frecuencia, tenemos que genera una atenuación de 35dB a 0.1 frecuencia relativa a la de Nyquist, es decir ((0.1)Fs/2 = 2.4kHz).
Para ejecutar la demostración en modo gráfico, será necesario descargar en primer lugar la última release, y luego utilizar los siguientes comandos para ejecutar el script con la interfaz gráfica:
Desde la interfaz gráfica es posible:
El filtro también puede ejecutarse directamente desde la línea de comandos. Para esto deberán tener los archivos coeficientes.pcm e input.pcm que se incluyen con el programa, incluídos en el link de las releases. Es necesario ubicar estos archivos dentro de la carpeta td3-proyecto-final-1.6.0 que se extrae del zip descargado. Luego ejecutando estos comandos podríamos correr el programa.
donde:
El archivo de salida se genera automáticamente en formato PCM y puede ser posteriormente visualizado o procesado con herramientas externas.
Si bien por el alcance de este proyecto puede considerarse terminado, estas son algunas mejoras interesantes que pueden interesarle al desarrollador: