¿Existe un término técnico para este método simple de suavizar una señal?

26

En primer lugar, soy nuevo en DSP y no tengo una educación real en él, pero estoy desarrollando un programa de visualización de audio y estoy representando una matriz FFT como barras verticales como en una visualización de espectro de frecuencia típica.

El problema que tuve fue que los valores de la señal de audio cambiaron demasiado rápido para producir una salida visual agradable si solo asignaba los valores de FFT directamente:

ingrese la descripción de la imagen aquí

Así que aplico una función simple a los valores para "suavizar" el resultado:

// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2; 
// 0.2 is arbitrary - the lower the number, the more "smoothing"

En otras palabras, estoy tomando el valor actual y lo comparo con el último, y luego agrego una fracción de ese delta al último valor. El resultado se ve así:

ingrese la descripción de la imagen aquí

Entonces mi pregunta es:

  1. ¿Es este un patrón o función bien establecida para la cual ya existe un término? Es así, ¿cuál es el término? Utilizo "suavizado" arriba pero soy consciente de que esto significa algo muy específico en DSP y puede no ser correcto. Aparte de eso, parecía estar relacionado con un sobre de volumen, pero tampoco era exactamente lo mismo.

  2. ¿Hay mejores enfoques o más estudios sobre soluciones a esto que debería mirar?

Gracias por su tiempo y disculpas si esta es una pregunta estúpida (leyendo otras discusiones aquí, soy consciente de que mi conocimiento es mucho más bajo que el promedio que parece).

Michael Bromley
fuente
1
Ahora me pregunto qué obtienes si tomas la FFT suavizada y la FFT inversa.
user253751
¿Sería más sencillo hacer la primera respuesta en un orden diferente? current_value = current_value * decay; if (new_value> current_value) {current_value = new_value; }
Richard Forster
@immibis Esto debería ser una reverberación, según tengo entendido. Corrígeme si me equivoco.
Andreas
Claro, y un compilador optimizador producirá la misma implementación. El punto clave era obtener el resultado correcto cuando (current_value * decay) <new_value <current_value.
Richard Forster
2
Realmente me gusta esta pregunta. Es uno de esos en los que alguien que prueba algunas cosas se descubre accidentalmente en el fondo de un enorme árbol de conocimiento (filtros de respuesta de impulso infinito, específicamente). Mientras tanto, las personas que ya están subiendo al árbol pueden describir todas las cosas geniales que ya han descubierto entre las ramas ...
DrMcCleod

Respuestas:

37

Lo que ha implementado es un filtro de paso bajo unipolar, a veces llamado integrador con fugas . Su señal tiene la ecuación de diferencia:

y[norte]=0.8y[norte-1]+0.2 0.2X[norte]

X[norte]y[norte] [2] [3] .

Jason R
fuente
44
Muchas gracias por esto. Muy, muy útil. Buscar en Google por mi cuenta es como estar perdido en el mar cuando se trata de DSP. Solo tener un par de términos para buscar me da algo que entender.
Michael Bromley el
3
Me pregunto. Creo que el OP aplica este filtro en la serie de valores en los contenedores individuales en el dominio de frecuencia. Se aplica un paso bajo normal en la serie de muestras en el dominio del tiempo. ¿El efecto es el mismo (no lo creo, porque las partes de alta frecuencia todavía están en la señal, pero ... ¿su intensidad cambia más lentamente?)? Si no, ¿podría explicar qué hace el filtro realmente con la señal en el dominio del tiempo?
Jonas Schäfer
3
@JonasWielicki Creo que el objetivo es suavizar cada valor de bin individual, para que no cambie muy rápidamente. también el filtro de paso bajo (como se explica en la respuesta) es aplicable a cualquier serie temporal independientemente de su dominio (tiempo o frecuencia o cualquier otra cosa).
Arpit Jain
@ Arpitjain Entiendo eso. Simplemente me gustaría saber si hay alguna comprensión (no necesariamente por usted, el OP o el respondedor) cómo afecta el dominio del tiempo cuando lo hace.
Jonas Schäfer el
@JonasWielicki La operación es una convolución en el dominio de la frecuencia, por lo que se traduce en una multiplicación (de las transformadas de Fourier correspondientes) en el dominio del tiempo.
MBaz
17

Advertencia: ¡incluya algo de historia, papeles viejos (los amo) y tarjetas perforadas!

a=0.2

y(n)=y(n1)+a[x(n)y(n1)],
y(n)=ax(n)+(1a)y(n1).

La primera versión anterior es menos natural, pero evita una multiplicación, y de alguna manera es más eficiente. Ambas fórmulas producen un filtro de respuesta de impulso lineal , causal e infinito . La historia se remonta a Poisson, Kolmogorov-Zurbenko Adaptive Filters , Brown (Pronóstico Estadístico para el Control de Inventario. McGraw-Hill, 1959), Holt (1957) y Winters (1960). Se implementa como un filtrado recursivo esquema de conocido con diferentes nombres en toda la literatura:

  • promedio exponencial de primer ordenfiltro de paso bajo de ,
  • promediador exponencial,
  • suavizado exponencial ,
  • promedio móvil exponencial (EMA),
  • promedio móvil ponderado exponencialmente (EWMA),
  • Suavizado exponencial simple (lineal) de Brown (a veces llamado SES),
  • Modelo ARIMA (0,1,1) .

h[norte]=(1-una)tu[norte]unanorte

Para una nota histórica, Robert G. Brown y Arthur D. Little usaron este método en 1956 en el suavizado exponencial para predecir la demanda , aparentemente para la industria del tabaco. Un poco más de la historia y explicaciones se pueden encontrar en Holt-Winters Pronósticos para los simulado (o desarrolladores) - Parte I . Peter Zehna ofrece una revisión crítica en Algunos comentarios sobre el suavizado exponencial , 1966. Un capítulo de R. Brown en la Enciclopedia de Investigación de Operaciones y Ciencias de la Administración (Google books) data de la historia de 1944, las páginas legibles se reproducen aquí:

Alisamiento exponencial, p.  205, Enciclopedia de Investigación de Operaciones y Ciencias de la Gestión

Alisamiento exponencial, p.  206, Enciclopedia de Investigación de Operaciones y Ciencias de la Gestión

Muchos métodos extienden este suavizado, que carece de validez cuando los datos tienen una tendencia o estacionalidad. Algunos de ellos se conocen como suavizado exponencial doble o triple, y filtros Holt-Winters .

También puede verificar: ¿Cómo funciona este "filtro simple"?

Laurent Duval
fuente
1
Gracias, esto es excelente. Como se mencionó, soy totalmente nuevo en esto, por lo que algunas de sus respuestas requerirán más investigación para que las aprecie completamente, pero ciertamente responde a mi pregunta y más. Si no fuera por la otra respuesta, anteriormente, este es también, por supuesto, digno de ser aceptado como la respuesta.
Michael Bromley el
1
Pequeña corrección, Winters 1 (960) debería ser Winters (1960), supongo
SGR
9

¿Hay mejores enfoques o más estudios sobre soluciones a esto que debería mirar?

El enfoque normal para los medidores de audio es un "detector de pico con pérdida".

if new_value > current_value
  current_value = new_value;
else
 current_value = current_value * decay;  

Esto reacciona de inmediato a cualquier señal nueva o pico o transitoria en la señal, pero permanece durante un tiempo, por lo que crea una imagen mucho menos agitada. La disminución debería ser una constante entre 0 y 1. Controla la rapidez con la que se hacen las barras, siendo 0 instantáneo y 1 nunca.

Hilmar
fuente
Observo que esto tiene similitudes con una tarea que hice en la universidad, se mejoró un MIDI que suena muy metálico (creado en una tarea anterior) al convolucionar (y escalar para igualar picos y duraciones) las señales de nota (completamente rectangulares) con un triángulo señal que aumentó bruscamente (aunque no al instante), y luego decayó gradualmente, para producir una nota aguda que se extinguió "naturalmente". Gran mejora en el sonido de la canción (Fur Elise en este caso).
KRyan
Supongo que querrías quedarte new_valuesi es mayor quecurrent_value * decay
user276648
6

En los círculos de contratistas del Departamento de Defensa de los EE. UU., Este filtro en particular se denomina con frecuencia "filtro alfa", porque puede caracterizarse con un parámetro que tradicionalmente se denomina "alfa".

Es directamente análogo a un filtro de paso bajo RC analógico simple.

Son extremadamente simples, tienen serias limitaciones, pero tienen la ventaja innegable sobre los filtros más complejos (¡y complicados!) Que, si te alejas de sus áreas problemáticas, hacen el trabajo.

John R. Strohm
fuente
3

Como se menciona en otras respuestas, este es un filtro recursivo de un solo polo, un tipo de filtro de respuesta de impulso infinito (IIR).

Un gran recurso para obtener información sobre esta y otras características de DSP es la Guía del científico e ingeniero para el procesamiento digital de señales de Steven W. Smith : respuesta de impulso infinito (IIR)

... cada punto de la señal de salida se encuentra multiplicando los valores de la señal de entrada por los coeficientes "a", multiplicando los valores calculados previamente de la señal de salida por los coeficientes "b" y sumando los productos juntos. Aviso que no hay un valor para b0, porque esto corresponde a la muestra que se calcula. La ecuación 19-1 se llama ecuación de recursión, y los filtros que la usan se llaman filtros recursivos. Los valores "a" y "b" que definen el filtro se denominan coeficientes de recursión.

Asmund
fuente