Optimización de Algoritmos DSP: Goertzel, Filtros IIR y Procesamiento en Punto Fijo

Enviado por Programa Chuletas y clasificado en Matemáticas

Escrito el en español con un tamaño de 2,59 KB

Algoritmo de Goertzel

El algoritmo de Goertzel es apropiado cuando no se requiere calcular todos los términos de la DFT de orden N. Una aplicación típica de este caso es la detección de tonos DTMF.

La ecuación en diferencias estándar no es eficiente debido a:

  • Se deben calcular todos los yk(n), ya que solo interesa el último valor.
  • Aparecen multiplicaciones complejas (donde cada una equivale a 4 reales) en todos los pasos intermedios.

Ejemplo de implementación (X(1)):

k = 1; Bv = 1; Av = [1 -2*cos(2*pi*k/N) 1]; 
v = filter(Bv, Av, [x,0]); 
y = v(end) - exp(-2j*pi*k/N) * v(end-1); 
y(end) % espectro(k+1)

Ejemplo de Bucle de Procesamiento

clear; while(1)
a=1.5; x(1)=leer(AD);
b=-1.5; y=a*x(1)+b*x(2)+c*x(3);
c=1;
x=zeros(1,3); x(3)=x(2); x(2)=x(1); sacarDA(y)
end

Implementación de Filtros IIR

Se utilizan etapas de 2º orden para obtener coeficientes reales, dado que habitualmente se trabaja con polos complejos. Además, cuanto menor es el orden, menor es la sensibilidad frente a la cuantificación de los coeficientes.

Nota: No se permite usar la descomposición en cascada de un FIR de fase lineal de 2º orden, ya que no mantiene la simetría de coeficientes; para ello, es necesario agrupar en etapas de 4º orden.

Implementación en Formato Q15

En este formato, los coeficientes y entradas se encuentran en el intervalo -1 ≤ x < 1.

  • Suma: Al sumar dos números, no podemos asegurar que el resultado permanezca en el mismo intervalo, lo que puede producir desbordamiento (overflow) en los nodos suma.
  • Producto: No presenta problemas, ya que el resultado permanece en el intervalo representable.

Para evitar el desbordamiento, se debe escalar la señal de entrada o los coeficientes por un factor adecuado que limite la salida en el nodo suma.

DFT con Menor Carga Computacional

Para optimizar la DFT mediante diezmado en tiempo y frecuencia, el número de muestras debe ser una potencia de 2, lo cual se puede conseguir mediante zero-padding.

Este algoritmo aprovecha la redundancia del término, transfiriendo el cálculo de una DFT de orden N en dos DFTs de orden N/2, logrando reducir a la mitad el número de productos.

Entradas relacionadas: