Cuando queremos procesar señales digitalmente, cosa cada vez mas común, nos encontramos que al implementar algunos filtros (sobre todo los de tipo FIR) requieren un volumen muy significativo de operaciones matemáticas, algunas veces de punto flotante, que pueden resultar un poco excesivas cuando el procesador es pequeño. Como hay veces es el caso con plataformas embebidas como la Arduino.
Un articulo denominado "An Algorithm for the Evaluation of Finite Trigonometric Series" escrito por Gerard Goertzel en 1958 viene al rescate con un método de implementar un filtro de ancho de banda muy reducido pero reduciendo drásticamente la cantidad de cálculos necesarios para realizarlo. Una explicación menos críptica de como es el algoritmo puede encontrarse en Wikipedia (que a pesar que tiene varias observaciones editoriales es una descripción correcta según he podido verificar) o este otro artículo hecho por Kevin Banks denominado "The Goertzel Algorithm".
Este tipo de filtro puede ser utilizado cuando es necesario detectar la presencia de señal en un ancho de banda muy reducido, independientemente del resto del espectro que lo rodea. Implementa filtros pasabandas de 100 a 200 Hz de ancho pero con la particularidad de requerir muchisimas menos operaciones matemáticas que las necesarias para un filtro equivalente utilizando algoritmos mas convencionales como la transformada rápida de Fourier (FFT) o la transformada discreta de Fourier (DFT).
Para aplicaciones de radio se puede utilizar entre otros muchos usos en decodificar señales DTMF o la decodificación de modos digitales como CW o RTTY donde se requiera identificar la presencia o ausencia de señales en un ancho de banda reducido. Hjalmar (OZ1JHM) tieene en su sitio un decodificador de CW basado en este algoritmo para la plataforma Arduino (código fuente aqui). Independientemente de si se quiere decodificar señales de CW o hacer otro proyecto esta implementación puede utilizarse como punto de partida para otros desarrollos.
No hay comentarios:
Publicar un comentario