El algoritmo de Goertzel es una técnica de procesamiento digital de señales (DSP) para la evaluación eficiente de los términos individuales de la transformada discreta de Fourier (DFT). Resulta útil en ciertas aplicaciones prácticas, como el reconocimiento de tonos de señalización multifrecuencia de doble tono (DTMF) producidos por los botones del teclado de un teléfono analógico tradicional . El algoritmo fue descrito por primera vez por Gerald Goertzel en 1958. [ 1 ]
Al igual que la DFT, el algoritmo de Goertzel analiza un componente de frecuencia seleccionable de una señal discreta . [ 2 ] [ 3 ] [ 4 ] A diferencia de los cálculos directos de DFT, el algoritmo de Goertzel aplica un único coeficiente de valor real en cada iteración, utilizando aritmética de valor real para secuencias de entrada de valor real. Para cubrir un espectro completo (excepto cuando se utiliza para un flujo continuo de datos donde los coeficientes se reutilizan para cálculos subsiguientes, lo que tiene una complejidad computacional equivalente a la DFT deslizante ), el algoritmo de Goertzel tiene un orden de complejidad mayor que los algoritmos de transformada rápida de Fourier (FFT), pero para calcular un pequeño número de componentes de frecuencia seleccionados, es numéricamente más eficiente. La estructura simple del algoritmo de Goertzel lo hace muy adecuado para procesadores pequeños y aplicaciones embebidas.
El algoritmo de Goertzel también puede utilizarse "a la inversa" como una función de síntesis sinusoidal, que requiere solo 1 multiplicación y 1 resta por muestra generada. [ 5 ]
El algoritmo
El cálculo principal en el algoritmo de Goertzel tiene la forma de un filtro digital , y por esta razón el algoritmo a menudo se denomina filtro de Goertzel . El filtro opera sobre una secuencia de entrada.en una cascada de dos etapas con un parámetro, dando la frecuencia a analizar, normalizada a radianes por muestra.
La primera etapa calcula una secuencia intermedia,:
La segunda etapa aplica el siguiente filtro a, produciendo una secuencia de salida:
Se puede observar que la primera etapa del filtro es un filtro IIR de segundo orden con una estructura de forma directa . Esta estructura particular tiene la propiedad de que sus variables de estado internas son iguales a los valores de salida anteriores de esa etapa. Valores de entradaparaSe presume que todos son iguales a 0. Para establecer el estado inicial del filtro de modo que la evaluación pueda comenzar en la muestraA los estados del filtro se les asignan valores iniciales.Para evitar riesgos de aliasing , frecuenciaa menudo se restringe al rango de 0 a π (véase el teorema de muestreo de Nyquist-Shannon ); usar un valor fuera de este rango no carece de sentido, pero es equivalente a usar una frecuencia con alias dentro de este rango, ya que la función exponencial es periódica con un período de 2π en.
Se puede observar que el filtro de segunda etapa es un filtro FIR , ya que sus cálculos no utilizan ninguna de sus salidas anteriores.
Los métodos de la transformada Z se pueden aplicar para estudiar las propiedades de la cascada de filtros. La transformada Z de la primera etapa del filtro dada en la ecuación (1) es
La transformada Z de la segunda etapa del filtro dada en la ecuación (2) es
La función de transferencia combinada de la cascada de las dos etapas de filtro es entonces
Esto se puede transformar de nuevo en una secuencia equivalente en el dominio del tiempo, y los términos se desenrollan hasta el primer término de entrada en el índice:
Estabilidad numérica
Se puede observar que los polos de la transformada Z del filtro se encuentran eny, en un círculo de radio unitario centrado en el origen del plano de la transformada Z compleja. Esta propiedad indica que el proceso de filtrado es marginalmente estable y vulnerable a la acumulación de errores numéricos cuando se calcula utilizando aritmética de baja precisión y secuencias de entrada largas. [ 6 ] Christian Reinsch propuso una versión numéricamente estable . [ 7 ]
Cálculos DFT
Para el caso importante del cálculo de un término DFT, se aplican las siguientes restricciones especiales.
- El filtrado finaliza en el índice, dóndees el número de términos en la secuencia de entrada de la DFT.
- Las frecuencias elegidas para el análisis de Goertzel están restringidas a la forma especial.
- El número de índiceindicando que el "intervalo de frecuencia" de la DFT se selecciona del conjunto de números de índice
Haciendo estas sustituciones en la ecuación (6) y observando que el términoLa ecuación (6) toma entonces la siguiente forma:
Podemos observar que el lado derecho de la ecuación (9) es extremadamente similar a la fórmula definitoria para el término DFT., el término DFT para número de índice, pero no exactamente lo mismo. La suma mostrada en la ecuación (9) requieretérminos de entrada, pero soloLos términos de entrada están disponibles al evaluar una DFT. Un recurso sencillo pero poco elegante es extender la secuencia de entrada.con un valor artificial más. [ 8 ] Podemos ver en la ecuación (9) que el efecto matemático sobre el resultado final es el mismo que eliminar el términoa partir de la suma, entregando así el valor DFT deseado.
Sin embargo, existe un enfoque más elegante que evita el paso de filtro adicional. De la ecuación (1), podemos observar que cuando el término de entrada extendidose utiliza en el paso final,
Por lo tanto, el algoritmo se puede completar de la siguiente manera:
- finalizar el filtro IIR después de procesar el término de entrada,
- aplicar la ecuación (10) para construira partir de los resultados anterioresy,
- aplicar la ecuación (2) con el valor calculadovalor y conproducido por el cálculo directo final del filtro.
Las dos últimas operaciones matemáticas se simplifican combinándolas algebraicamente:
Tenga en cuenta que detener las actualizaciones del filtro en el términoy aplicar inmediatamente la ecuación (2) en lugar de la ecuación (11) omite las actualizaciones finales del estado del filtro, lo que produce un resultado con una fase incorrecta. [ 9 ]
La estructura de filtrado particular elegida para el algoritmo de Goertzel es la clave de sus cálculos DFT eficientes. Podemos observar que solo un valor de salidase utiliza para calcular la DFT, por lo que se omiten los cálculos para todos los demás términos de salida. Dado que el filtro FIR no se calcula, los cálculos de la etapa IIR, etc. pueden descartarse inmediatamente después de actualizar el estado interno de la primera etapa.
Esto parece generar una paradoja: para completar el algoritmo, la etapa del filtro FIR debe evaluarse una vez utilizando las dos últimas salidas de la etapa del filtro IIR, mientras que, para optimizar la eficiencia computacional, la iteración del filtro IIR descarta sus valores de salida. Aquí es donde se aplican las propiedades de la estructura de filtro de forma directa. Las dos variables de estado internas del filtro IIR proporcionan los dos últimos valores de la salida del filtro IIR, que son los términos necesarios para evaluar la etapa del filtro FIR.
Aplicaciones
Términos del espectro de potencia
Al examinar la ecuación (6), un paso final del filtro IIR para calcular el términoutilizando un valor de entrada suplementarioaplica un multiplicador complejo de magnitud 1 al término anterior.. Como consecuencia,yrepresenta potencia de señal equivalente. Es igualmente válido aplicar la ecuación (11) y calcular la potencia de la señal a partir del términoo aplicar la ecuación (2) y calcular la potencia de la señal a partir del términoAmbos casos conducen a la siguiente expresión para la potencia de la señal representada por el término DFT.:
En el pseudocódigo siguiente, los datos de entrada de valor complejo se almacenan en el arreglox y las variables sprevy sprev2almacenan temporalmente el historial de salida del filtro IIR. Ntermses el número de muestras en el arreglo, y Ktermcorresponde a la frecuencia de interés, multiplicada por el período de muestreo.
N términos definidos aquí Kterm seleccionado aquí ω = 2 × π × Kterm / Nterms; coeficiente := 2 × cos(ω) sprev := 0 sprev2 := 0 para cada índice n en el rango de 0 a Nterms-1 hacer s := x[n] + coeff × sprev - sprev2 sprev2 := sprev sprev := s fin potencia := sprev 2 + sprev2 2 - (coeficiente × sprev × sprev2)
Es posible [ 10 ] organizar los cálculos de manera que las muestras entrantes se entreguen individualmente a un objeto de software que mantiene el estado del filtro entre actualizaciones, y se accede al resultado de potencia final después de que se haya realizado el otro procesamiento.
Término DFT único con aritmética de valor real
El caso de datos de entrada de valor real surge con frecuencia, especialmente en sistemas embebidos donde los flujos de entrada provienen de mediciones directas de procesos físicos. Cuando los datos de entrada son de valor real, las variables de estado internas del filtro sprevtambién sprev2pueden ser de valor real; por lo tanto, no se requiere aritmética compleja en la primera etapa del IIR. La optimización para aritmética de valor real suele ser tan sencilla como aplicar tipos de datos de valor real apropiados a las variables.
Después de los cálculos utilizando el término de entraday se terminan las iteraciones del filtro, se debe aplicar la ecuación (11) para evaluar el término DFT. El cálculo final utiliza aritmética de valores complejos, pero esto se puede convertir a aritmética de valores reales separando los términos reales e imaginarios:
En comparación con la aplicación del espectro de potencia, la única diferencia radica en el cálculo utilizado para finalizar:
(Los cálculos del filtro IIR son los mismos que en la implementación de la potencia de la señal) XKreal = sprev * cr - sprev2; XKimag = sprev * ci;
Detección de fase
Esta aplicación requiere la misma evaluación del término DFT., como se analizó en la sección anterior, utilizando una secuencia de entrada de valor real o complejo. Entonces, la fase de la señal se puede evaluar como
tomar las precauciones adecuadas para singularidades, cuadrantes, etc., al calcular la función tangente inversa.
Señales complejas en aritmética real
Dado que las señales complejas se descomponen linealmente en partes reales e imaginarias, el algoritmo de Goertzel se puede calcular en aritmética real por separado sobre la secuencia de partes reales, lo que producey sobre la secuencia de partes imaginarias, obteniendoDespués de eso, los dos resultados parciales de valor complejo se pueden recombinar:
Complejidad computacional
- Según la teoría de la complejidad computacional , calcular un conjunto deTérminos DFT utilizandoaplicaciones del algoritmo de Goertzel en un conjunto de datos convalores con un "costo por operación" detiene complejidad.
- Para calcular un único bin DFTpara una secuencia de entrada compleja de longitudEl algoritmo de Goertzel requieremultiplicaciones ysumas/restas dentro del bucle, así como 4 multiplicaciones y 4 sumas/restas finales, para un total demultiplicaciones ysumas/restas. Esto se repite para cada uno de losfrecuencias.
- Por el contrario, usar una FFT en un conjunto de datos conLos valores tienen complejidad.
- Esto es más difícil de aplicar directamente porque depende del algoritmo FFT utilizado, pero un ejemplo típico es una FFT de base 2, que requieremultiplicaciones ysumas/restas por bin DFT , para cada uno de loscontenedores.
En las expresiones de orden de complejidad, cuando el número de términos calculadoses más pequeño queLa ventaja del algoritmo de Goertzel es clara. Pero debido a que el código FFT es comparativamente complejo, el factor "costo por unidad de trabajo"suele ser mayor para una FFT, y la ventaja práctica favorece al algoritmo de Goertzel incluso paravarias veces más grande que.
Como regla general para determinar si un algoritmo FFT de base 2 o un algoritmo de Goertzel es más eficiente, ajuste el número de términos.en el conjunto de datos hacia arriba hasta la potencia exacta de 2 más cercana, llamando a estoy es probable que el algoritmo de Goertzel sea más rápido si
Las implementaciones de FFT y las plataformas de procesamiento tienen un impacto significativo en el rendimiento relativo. Algunas implementaciones de FFT [ 11 ] realizan cálculos internos de números complejos para generar coeficientes sobre la marcha, lo que aumenta significativamente su "costo K por unidad de trabajo". Los algoritmos FFT y DFT pueden usar tablas de valores de coeficientes precalculados para una mayor eficiencia numérica, pero esto requiere más accesos a los valores de los coeficientes almacenados en la memoria externa, lo que puede generar una mayor contención de caché que contrarresta parte de la ventaja numérica.
Ambos algoritmos logran una eficiencia aproximadamente dos veces mayor al usar datos de entrada de valor real en lugar de datos de valor complejo. Sin embargo, estas mejoras son inherentes al algoritmo de Goertzel, pero no se alcanzan con la FFT sin utilizar ciertas variantes del algoritmo especializadas en la transformación de datos de valor real .
Véase también
Referencias
- ↑ Goertzel, G. (enero de 1958), "Un algoritmo para la evaluación de series trigonométricas finitas", American Mathematical Monthly , 65 (1): 34–35 , doi : 10.2307/2310304 , JSTOR 2310304
- ↑ Mock, P. (21 de marzo de 1985), "Agregar generación y decodificación DTMF a diseños DSP-μP" (PDF) , EDN , ISSN 0012-7515 ; también se encuentra en Aplicaciones DSP con la familia TMS320, vol. 1, Texas Instruments, 1989.
- ↑ Chen, Chiouguey J. (junio de 1996), Algoritmo de Goertzel modificado en la detección de DTMF utilizando el DSP TMS320C80 (PDF) , Informe de aplicación, Texas Instruments, SPRA066
- ↑ Schmer, Gunter (mayo de 2000), Generación y detección de tonos DTMF: una implementación con el TMS320C54x (PDF) , Informe de aplicación, Texas Instruments, SPRA096a
- ↑ Cheng, Eric; Hudak, Paul (enero de 2009), Procesamiento de audio y síntesis de sonido en Haskell (PDF) , archivado del original (PDF) el 28 de marzo de 2017.
- ↑ Gentleman, WM (1 de febrero de 1969). "Análisis de errores del método de Goertzel (Watt) para calcular coeficientes de Fourier" . The Computer Journal . 12 (2): 160– 164. doi : 10.1093/comjnl/12.2.160 .
- ↑ Stoer, J.; Bulirsch, R. (2002), Introducción al análisis numérico , Springer, ISBN 9780387954523
- ↑ "Algoritmo de Goertzel" . Cnx.org. 12 de septiembre de 2006. Consultado el 3 de febrero de 2014 .
- ↑ "Electronic Engineering Times | Conectando a la comunidad electrónica global" . EE Times . Consultado el 3 de febrero de 2014 .
- ↑ Elmenreich, Wilfried (25 de agosto de 2011). "Detección eficiente de una frecuencia mediante un filtro de Goertzel" . Consultado el 16 de septiembre de 2014 .
- ↑ Prensa; Flannery; Teukolsky; Vetterling (2007), "Capítulo 12", Recetas numéricas, El arte de la computación científica , Cambridge University Press
Lecturas adicionales
- Proakis, JG; Manolakis, DG (1996), Procesamiento digital de señales: principios, algoritmos y aplicaciones , Upper Saddle River, NJ: Prentice Hall, págs. 480–481 , Bibcode : 1996dspp.book.....P
Enlaces externos
- Algoritmo de Goertzel en Wayback Machine (archivado el 28/06/2018)
- Un algoritmo DSP para análisis de frecuencia
- El algoritmo de Goertzel de Kevin Banks
- Análisis del algoritmo de Goertzel realizado por Uwe Beis, en el que lo compara con un filtro analógico de paso bajo de Chebyshev de segundo orden.
- transformadas rápidas de Fourier
- Procesamiento digital de señales