Articulo de referencia

Algoritmo de Goertzel

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 Fourie...

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.incógnita[norte]{\displaystyle x[n]}en una cascada de dos etapas con un parámetroω0{\displaystyle \omega _{0}}, dando la frecuencia a analizar, normalizada a radianes por muestra.

La primera etapa calcula una secuencia intermedia,s[norte]{\displaystyle s[n]}:

La segunda etapa aplica el siguiente filtro as[norte]{\displaystyle s[n]}, produciendo una secuencia de saliday[norte]{\displaystyle y[n]}:

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 entradaincógnita[norte]{\displaystyle x[n]}paranorte<0{\displaystyle n<0}Se presume que todos son iguales a 0. Para establecer el estado inicial del filtro de modo que la evaluación pueda comenzar en la muestraincógnita[0]{\displaystyle x[0]}A los estados del filtro se les asignan valores iniciales.s[2]=s[1]=0{\displaystyle s[-2]=s[-1]=0}Para evitar riesgos de aliasing , frecuenciaω0{\displaystyle \omega _{0}}a 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ω0{\displaystyle \omega _{0}}.

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 índicenorte=0{\displaystyle n=0}:

Estabilidad numérica

Se puede observar que los polos de la transformada Z del filtro se encuentran enmi+jω0{\displaystyle e^{+j\omega _ {0}}}ymijω0{\displaystyle e^{-j\omega _ {0}}}, 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 índicenorte=norte{\displaystyle n=N}, dóndenorte{\displaystyle N}es 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 índicek{\displaystyle k}indicando 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érminomi+j2πk=1{\displaystyle e^{+j2\pi k}=1}La 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.incógnita[k]{\displaystyle X[k]}, el término DFT para número de índicek{\displaystyle k}, pero no exactamente lo mismo. La suma mostrada en la ecuación (9) requierenorte+1{\displaystyle N+1}términos de entrada, pero solonorte{\displaystyle N}Los términos de entrada están disponibles al evaluar una DFT. Un recurso sencillo pero poco elegante es extender la secuencia de entrada.incógnita[norte]{\displaystyle x[n]}con un valor artificial másincógnita[norte]=0{\displaystyle x[N]=0}. [ 8 ] Podemos ver en la ecuación (9) que el efecto matemático sobre el resultado final es el mismo que eliminar el términoincógnita[norte]{\displaystyle x[N]}a 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 extendidoincógnita[norte]=0{\displaystyle x[N]=0}se 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 entradaincógnita[norte1]{\displaystyle x[N-1]},
  • aplicar la ecuación (10) para construirs[norte]{\displaystyle s[N]}a partir de los resultados anterioress[norte1]{\displaystyle s[N-1]}ys[norte2]{\displaystyle s[N-2]},
  • aplicar la ecuación (2) con el valor calculados[norte]{\displaystyle s[N]}valor y cons[norte1]{\displaystyle s[N-1]}producido 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érminonorte1{\displaystyle N-1}y 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 saliday[norte]{\displaystyle y[N]}se 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 IIRs[0],s[1]{\displaystyle s[0],s[1]}, 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érminoy[norte]{\displaystyle y[N]}utilizando un valor de entrada suplementarioincógnita[norte]=0{\displaystyle x[N]=0}aplica un multiplicador complejo de magnitud 1 al término anterior.y[norte1]{\displaystyle y[N-1]}. Como consecuencia,y[norte]{\displaystyle y[N]}yy[norte1]{\displaystyle y[N-1]}representa 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érminoy[norte]{\displaystyle y[N]}o aplicar la ecuación (2) y calcular la potencia de la señal a partir del términoy[norte1]{\displaystyle y[N-1]}Ambos casos conducen a la siguiente expresión para la potencia de la señal representada por el término DFT.incógnita[k]{\displaystyle X[k]}:

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 entradaincógnita[norte1]{\displaystyle x[N-1]}y 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.incógnita[k]{\displaystyle X[k]}, 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 produceyr[norte]{\displaystyle y_{\text{r}}[n]}y sobre la secuencia de partes imaginarias, obteniendoyi[norte]{\displaystyle y_{\text{i}}[n]}Despué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 deMETRO{\displaystyle M}Términos DFT utilizandoMETRO{\displaystyle M}aplicaciones del algoritmo de Goertzel en un conjunto de datos connorte{\displaystyle N}valores con un "costo por operación" deK{\displaystyle K}tiene complejidadO(KnorteMETRO){\displaystyle O(KNM)}.
Para calcular un único bin DFTincógnita(F){\displaystyle X(f)}para una secuencia de entrada compleja de longitudnorte{\displaystyle N}El algoritmo de Goertzel requiere2norte{\displaystyle 2N}multiplicaciones y4 norte{\displaystyle 4\ N}sumas/restas dentro del bucle, así como 4 multiplicaciones y 4 sumas/restas finales, para un total de2norte+4{\displaystyle 2N+4}multiplicaciones y4norte+4{\displaystyle 4N+4}sumas/restas. Esto se repite para cada uno de losMETRO{\displaystyle M}frecuencias.
  • Por el contrario, usar una FFT en un conjunto de datos connorte{\displaystyle N}Los valores tienen complejidadO(Knorteregistro2(norte)){\displaystyle O(KN\log _{2}(N))}.
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 requiere2registro2(norte){\displaystyle 2\log _{2}(N)}multiplicaciones y3registro2(norte){\displaystyle 3\log _{2}(N)}sumas/restas por bin DFT , para cada uno de losnorte{\displaystyle N}contenedores.

En las expresiones de orden de complejidad, cuando el número de términos calculadosMETRO{\displaystyle M}es más pequeño queregistronorte{\displaystyle \log N}La 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"K{\displaystyle K}suele ser mayor para una FFT, y la ventaja práctica favorece al algoritmo de Goertzel incluso paraMETRO{\displaystyle M}varias veces más grande queregistro2(norte){\displaystyle \log _{2}(N)}.

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.norte{\displaystyle N}en el conjunto de datos hacia arriba hasta la potencia exacta de 2 más cercana, llamando a estonorte2{\displaystyle N_{2}}y es probable que el algoritmo de Goertzel sea más rápido si

METRO5norte26norteregistro2(norte2){\displaystyle M\leq {\frac {5N_{2}}{6N}}\log _{2}(N_{2})}

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

  1. 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 
  2. 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.
  3. 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
  4. 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
  5. 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.
  6. 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 .
  7. Stoer, J.; Bulirsch, R. (2002), Introducción al análisis numérico , Springer, ISBN 9780387954523
  8. "Algoritmo de Goertzel" . Cnx.org. 12 de septiembre de 2006. Consultado el 3 de febrero de 2014 .
  9. "Electronic Engineering Times | Conectando a la comunidad electrónica global" . EE Times . Consultado el 3 de febrero de 2014 .
  10. 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 .
  11. 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 
Obtenido de " https://en.wikipedia.org/w/index.php?title=Goertzel_algorithm&oldid=1331147672 "