problema con la implementación de punto fijo de Butterworth

1

He diseñado un filtro Butterworth de segundo orden con MATLAB fdatool para la implementación de VHDL. la frecuencia de corte es menor que Fs / 10, lo que debería estar bien, ya que fdatool usa prewarping. De hecho, la implementación de punto flotante funciona bien. Sin embargo, después de la cuantificación a punto fijo, incluso con longitudes de palabra muy grandes (64 bits), el filtro no funciona como se esperaba. ¿Hay alguna forma de arreglar esto? o ¿hay otra forma de aproximar una respuesta de Butterwoth que funcione con un punto fijo?

    

2 respuestas

0

La pregunta es cómo hizo el cambio al punto fijo. La clave principal aquí es que estás intentando preservar todo el rango dinámico.

Si todas las constantes de filtro están entre 0 y 5, digamos, si usa 64 bits, tendrá un rango dinámico muy pequeño porque es imposible hacer 1.3, solo puede hacer números enteros.

Lo que normalmente se hace, por ejemplo, es usar 16 bits como Q1.15. Esto significa que tiene un rango de -1 a 0.999969482421875. Aquí cada bit corresponde a 2 ^ (- 15).

Una consecuencia de esto es que necesita escalar su entrada para que su máximo esté restringido a -1/1. Si estás leyendo valores de un ADC, por ejemplo, es bastante sencillo porque sabes el valor máximo que se puede leer.

Para un filtro de segundo orden, 16bit debe ser más que suficiente rango dinámico, a menos que su rango de frecuencia también sea enorme.

    
respondido por el Andrés
0

Intenté usar los tipos int16 y in32 para la muestra de Señal, y encontré que cuando la longitud de palabra tiene una sobrecarga suficiente (bits de signo entre el bit de Signo y el MSB) el filtro funciona bien, por lo que aparentemente es un problema de desbordamiento. Lo que hice fue escalar la señal: la señal flotante está entre + -1, así que para int16 lo multiplicé por 2 ^ 5, y para int32 por 2 ^ 21, y probé el filtro, funcionó bien. en algunos casos se necesitaba menos sobrecarga, para el filtro de 1500 Hz, necesitaba 4 bits adicionales y para 250 Hz necesitaba 10 bits adicionales.

    
respondido por el Mordechai Salomon

Lea otras preguntas en las etiquetas