2 votos

¿Es el filtro Kalman adecuado para suavizar el espectro sonoro?

Estoy implementando un software similar a un espectrógrafo en tiempo real con una FFT modificada. El vector de salida resume las intensidades de varios tonos musicales presentes en la señal de entrada. Su tamaño es una constante pequeña (comparada con el tamaño de la ventana de la FFT) y los valores pueden ser continuos. El problema es que hay mucho ruido tanto de la propia señal como del proceso de transformación. Creo que algún tipo de suavizado podría ayudar, ya que los tonos que deben destacarse suelen ser de mayor duración y los valores ruidosos varían mucho de un fotograma a otro.

He conocido el filtro de Kalman, que se utiliza principalmente en los sistemas de control en tiempo real. Parece ser muy potente. A medida que he ido profundizando en la bibliografía, he ido dudando de si este tipo de filtro es realmente adecuado para mi problema. Parece que el filtro Kalman requiere modelar el proceso lineal subyacente. Por otro lado no asumo ningún proceso particular detrás de la señal. ¿Debería simplemente modelar un proceso trivial de estado estacionario o este tipo de filtro no es adecuado?

1voto

shash Puntos 668

Ciertamente, se puede utilizar un filtro de Kalman adaptativo para identificar o eliminar el ruido, y hay cientos de artículos sobre esto en la literatura de procesamiento de señales. La necesidad o no de utilizarlo depende de la naturaleza de la tarea y del ruido, es decir, si el ruido se encuentra en el rango de frecuencias de la señal, si el ruido depende de la señal, etc.

Si fuera yo, a menos que hubiera razones para hacer lo contrario, intentaría (en el siguiente orden)

1) asegúrese de que la señal es buena, es decir, asegúrese de que está haciendo todo lo posible para eliminar el ruido antes de su adquisición, y asegúrese de que no está haciendo algo tonto, como aliasing su ruido en la señal por no adquirir lo suficientemente rápido o prefiltrado (que hará su tarea muy difícil

2) Prueba las técnicas de filtrado estándar, como los filtros FIR e IIR para hacer lo que necesitas

3) Pasar a técnicas no lineales, pero fáciles, como el filtrado de la mediana, el filtrado de Sovitsky-Golay, ..., que podrían ser más tolerantes con su ruido.

4) Sacar la artillería pesada: los filtros adaptativos.

Encontrar el filtro adecuado en situaciones difíciles puede ser cuestión de arremangarse y probar cosas diferentes.

0voto

Achilles Puntos 121

Un filtro de Kalman es genial si no se conocen todos los estados del sistema, en realidad es un sistema de control adaptativo o de tipo observador que utiliza la estimación de estados para rellenar los huecos dejados por el ruido.

Los estimadores de estado de Kalman o Luenberger son excelentes para sistemas bien definidos, con mucho ruido, en los que se pueden observar ciertos estados y reducirlos esencialmente a lo que "deberían ser" si todos los estados del sistema fueran observables.

Así que para su sistema, siempre y cuando usted no está aliasing sus entradas con la FFT que no debería necesitar ninguno de los filtros más loco y probablemente puede ir con un sistema de control PID utilizando un FIR o IIR.

Además, ya que no estás totalmente seguro de cuál es el sistema que estás modelando, sería una buena idea asegurarte de que tu señal no está siendo borkeada por la FFT y tratar de hacer que esa señal sea lo más limpia posible como entrada antes de pasar a filtrar el ruido y las perturbaciones, de esa manera estás haciendo tu trabajo de control/procesamiento de la señal lo más fácil posible para ti.

ADDENDUM: Acabo de leer la respuesta de TomL, y tiene una pizca de verdad. Matlab y Simulink son geniales para este tipo de problemas, con la caja de herramientas DSP integrada de Matlab puedes construir fácilmente la mayoría de los trabajos de procesamiento de señales fáciles e intermedios y con su nueva caja de herramientas HDL, si estás usando VHDL o Verilog, puedes incluso obtener el código para ti. Además, una vez que el bloque IP está construido, puedes introducirlo en una simulación de Simulink con una/su configuración de FFT y señal, de modo que puedes probar rápida y fácilmente la validez general de los diferentes tipos y métodos de filtrado sin tener que recurrir a probar diferentes construcciones en cualquier lenguaje/pila en la que estés trabajando. Así, una vez que elijas el método que quieras, podrás probarlo fácilmente para ti, tus inversores o tus superiores. Añadir esto a cualquier pila de controles/procesamiento de señales te hace la vida mucho más fácil a largo plazo que es con lo que empiezo cualquiera de mis trabajos/proyectos ahora.

El uso de un enfoque de alto nivel primero le permitirá ser capaz de dividir su sistema en sus bloques de vista más básicos de 30.000 pies que luego puede empujar en cualquier sistema de control que se adapte a esos bloques mejor.

TL;DR: Asegúrate de que tu señal sea lo mejor posible y de que no la rompas en tu FFT, modela cómo quieres que se procese la señal, ajusta un filtro al modelo (probablemente no sea Kalman).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X