Implementación de filtro IIR de punto fijo en tiempo real en C


7

Me gustaría implementar un filtro IIR de paso bajo de punto fijo de cuarto orden en C (con aritmética Q15), y prepararé este filtro mediante el uso de filtros bi-quad en cascada de forma directa en cascada de dos etapas.

He encontrado innumerables implementaciones de C y coeficientes de ejemplo en los libros de procesamiento de señales digitales, pero vi que ninguno de ellos no es confiable durante la verificación (crean desbordamientos, no atenúan los componentes de frecuencia esperados, etc.).

¿Qué implementación de C es adecuada para este problema? Y también, ¿hay algún coeficiente de muestra para verificar esta implementación?


1
Si no ha encontrado ninguna implementación que funcione para usted, ¿qué le impide rodar la suya propia? Parece que comprende dónde los que ha encontrado se quedan cortos, así que simplemente aumente para satisfacer sus necesidades. Un IIR de cuarto orden basado en secciones de segundo orden no es tan complicado de escribir.
Jason R

¿Su problema es realmente sobre el diseño de un filtro o ya tiene los coeficientes y desea implementarlo?
Dipan Mehta

Ya he preparado el filtro y tengo coeficientes.
albin

Respuestas:


8

Aunque esto parece una pregunta notablemente simple, requiere una respuesta notablemente complicada.

No creo que haya una solución única para todos. La mejor opción de algoritmo dependerá de qué ruido puede tolerar y el tipo de paso bajo (inclinación y frecuencia). Por ejemplo, a una frecuencia de muestreo de 44.1 KHz, un Butterworth de cuarto orden a 10 kHz es bastante sencillo, mientras que un paso bajo a 100Hz es un verdadero problema. En esencia, depende de qué tan cerca estén sus polos del círculo unitario.

La cuantización y el error de redondeo de los filtros IIR generalmente se transfieren a la salida ponderada por la función de transferencia de solo polo. Un filtro de paso bajo Butterworth 10 kHz de cuarto orden tiene una amplificación de ruido en el peor de los casos de solo 5 dB, por lo que no es un gran problema.

Sin embargo, a un paso bajo de 100 Hz (de nuevo BW de cuarto orden), el ruido se amplifica por la friolera de 75 dB. Si usa matemática Q15, su nivel de ruido básico puede ser de -100dB más o menos. Después de que usted filtre su señal de ración de ruido solo será de 25 dB.

Esa es una de las razones por las cuales los filtros de punto fijo IIR son bastante complicados. SI necesita frecuencias de corte bajas y una relación de señal a ruido decente a la mitad, entonces los algoritmos básicos no funcionarán. Debe buscar matemática de doble precisión y / o forma de espectro de error o métodos relacionados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.