¿Hilbert se transforma para calcular la envolvente de señal?

27

He oído que la transformación de Hilbert se puede usar para calcular la envolvente de una señal. ¿Como funciona esto? ¿Y en qué se diferencia este "sobre de Hilbert" del sobre que se obtiene simplemente rectificando una señal?

Me interesa específicamente encontrar una manera de calcular una envolvente para usar en la compresión de rango dinámico (es decir, "bajar el volumen" de las partes ruidosas de una señal de audio automáticamente).

dB '
fuente
¿tienes algún código de trabajo ahora? ya sea con la transformación de Hilbert u otro método?
Basj

Respuestas:

18

La transformada de Hilbert se usa para calcular la señal "analítica". Ver por ejemplo http://en.wikipedia.org/wiki/Analytic_signal . Si su señal es una onda sinusoidal o una onda sinusoidal modulada, la magnitud de la señal analítica se parecerá a la envolvente. Sin embargo, el cálculo de la transformación de Hilbert no es trivial. Técnicamente requiere un filtro FIR no causal de longitud considerable, por lo que requerirá una buena cantidad de MIPS, memoria y latencia.

Para una señal de banda ancha, realmente depende de cómo defina "envolvente" para su aplicación específica. Para su aplicación de compresión de rango dinámico, desea una métrica que esté bien correlacionada con la percepción del volumen a lo largo del tiempo. La transformación de Hilbert no es la herramienta adecuada para eso.

Una mejor opción sería aplicar un filtro con ponderación A ( http://en.wikipedia.org/wiki/A-weighting ) y luego hacer un detector de RMS con pico o con pérdida. Esto se correlacionará bastante bien con el volumen percibido con el tiempo y es relativamente barato de hacer.

Hilmar
fuente
Ambas no son causales, pero ¿el método FFT (desechar la mitad del espectro e IFFT) suele ser más rápido que el filtro FIR?
endolito
Además, ¿cómo requiere el método FFT para calcular la transformación de Hilbert la no causalidad? Probablemente solo se necesita una ventana bastante grande para obtener formas útiles de sobres.
mavavilj
4

Puede usar la transformación de Hilbert para calcular un sobre de la siguiente manera. (Lo escribiré como código MATLAB):

envelope = abs(hilbert(yourTimeDomainSignal));

No tengo tiempo para escribir las matemáticas en este momento (lo intentaré más adelante), pero simplemente, digamos que su señal es una onda sinusoidal. La transformación de Hilbert de un seno es un -coseno. (En otras palabras, la transformación de hilbert siempre le dará su señal desplazada en una fase de -90 grados, es decir, su cuadratura).

Si agrega su señal (la onda sinusoidal) a jveces su señal hilberted, (onda de coseno), obtendrá:

sin(wt) - j.*cos(wt)

Que también resulta ser e ^ (j * (wt - pi / 2)).

Por lo tanto, cuando toma el valor absoluto de esto, obtiene 1, que es su sobre. (Para este caso).

Spacey
fuente
¡Uy! Olvidé el signo negativo: gracias Dilip, arreglado ahora.
Spacey
2

Soy consciente de al menos dos formas distintas de recuperar la envolvente de amplitud de una señal.

La ecuación clave es:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

La forma más simple que conozco es que obtener Q sería descomponer S (t) en un grupo de componentes sinusoidales usando FFT, rotar cada componente un cuarto de vuelta en sentido antihorario (recuerde que cada componente será un número complejo, por lo que un componente particular x + iy -> -y + ix) y luego recombinar.

Este enfoque funciona bastante bien, aunque requiere un poco de ajuste (todavía no entiendo las matemáticas lo suficientemente bien como para explicar esto de una mejor manera)

Aquí hay un par de términos clave, a saber, 'transformación de Hilbert' y 'señal analítica'

Estoy evitando usar estos términos porque estoy bastante seguro de que he sido testigo de una considerable ambigüedad en su uso.

Un documento describe la señal analítica (compleja) de una señal real original f (t) como:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

en cuyo caso la envolvente de amplitud es simplemente | Analítica (f (t)) |, lo que nos lleva de vuelta a la ecuación pitagórica original

NB: Recientemente me he encontrado con una técnica más avanzada que implica el desplazamiento de frecuencia y un filtro digital de paso bajo. La teoría es que podemos construir la señal analítica por diferentes medios; descomponemos f (t) en componentes de frecuencia sinusoidal positiva y negativa y luego simplemente eliminamos los componentes negativos y duplicamos los componentes positivos. y es posible hacer esta 'eliminación de componentes de frecuencia negativa' mediante una combinación de desplazamiento de frecuencia y filtrado de paso bajo. Esto se puede hacer extremadamente rápido usando filtros digitales. Todavía no he explorado este enfoque, por lo que es todo lo que puedo decir en este momento.

Pi
fuente
1
Estas son solo formas diferentes de calcular la misma cosa (magnitud de la señal analítica a través de una transformada de Hilbert). La técnica "avanzada" es simplemente hacer una FFT, poner a cero las frecuencias negativas y luego hacer una FFT inversa. La parte real es la señal original y la parte imaginaria de la transformación de Hilbert. El diablo está en los detalles como el encuadre, la ventana, la superposición y el procesamiento lineal vs. circular.
Hilmar
2
Es desalentador ver que alguna persona ha considerado conveniente recompensar el tiempo y la energía que le he dado a esta comunidad (a través de la publicación anterior) con un voto negativo. Una publicación que contiene buena información sólida que será de beneficio para alguien.
P i
2
@Hilmar, hay una mejor manera de 'eliminar las frecuencias negativas' para lograr la Transformación de Hilbert. Como dije, una forma que no involucra FFT. A la luz de lo anterior, no me siento particularmente entusiasmado por detallarlo en este momento.
P i
Agradecemos tu respuesta detallada sobre la transformación de Hilbert; quería asegurar que esto sea bien recibido, por lo tanto, no se desanime. Por favor, ignore el voto negativo de quien sea.
0

así que básicamente estás buscando un Control automático de ganancia (AGC). No estoy seguro de si debe hacerlo procesando digitalmente, pero existen muy buenos circuitos integrados que pueden realizar esa tarea muy bien, por lo general, el AGC está integrado con muchas otras características, pero se pueden crear algunos circuitos con transistores JFET y algunos diodos

Pero una forma muy fácil de entender esto con el procesamiento digital sería diseñar un estimador de varianza adaptativo, como tomar una ventana de tiempo de muestras suficientes para representar 5 o 10 ms, y aplicar un factor de olvido alfa ^ n (alfa <1) para cada nueva muestra que viene se toma en cuenta más que las muestras pasadas. luego, basándose en esta estimación de varianza, usted diseña según su deseo, una función que asigna la varianza a una ganancia que aplica a cada muestra de audio. esto podría ser un límite de decisión difícil, mientras que si la varianza supera un umbral, disminuye la ganancia en algún factor.

O podría ser un límite de decisión más suave, donde crea una transformación no lineal de la varianza a la ganancia, y aplica la transformación a cada muestra en función de la última estimación de la varianza.

Estos son métodos más heurísticos, pero al menos te salvan de todas las matemáticas pesadas.

hueso
fuente