Hay muchas formas de definir una base wavelet. Por lo general, una wavelet se parece a:
wx0,k0(x)=Aexp(ik0x)e(k0(x−x0))
En el que es el centro en el tiempo, es el centro en frecuencia y es una función de ventana. absorbe la fase y la normalización. La principal forma en que esto difiere de su STFT es que el ancho de la ventana depende de .x0k0eAk
Por lo general, uno usa puntos discretos para limitar el número de wavelets. Como en su STFT, a menudo es bueno usar una cantidad mayor de puntos que la dimensionalidad de la señal. El objetivo es aproximar la respuesta que obtendría utilizando todos los posibles , pero con recursos computacionales razonables.(x0,k0)(x0,k0)
Debido a que la dimensionalidad de los datos transformados excede la de la señal, la base wavelet no será ortonormal. Es decir, lo siguiente será falso:
⟨wk0,x0|wk′0,x′0⟩=δ(x0,x′0)δ(k0,k′0)
Sin embargo, para y adecuados , puede hacer arreglos para que la base se complete en exceso:Aw
∑x0,k0|wx0,k0⟩1k0−−√⟨wx0,k0|=identity
En otras palabras, puede reconstruir la señal perfectamente simplemente sumando sus wavelets constituyentes.
Su "modificación" simplemente se puede insertar en la suma anterior:
my_filter=∑x0,k0|wx0,k0⟩f(x0,k0)⟨wx0,k0|
Actualización 2013-11-19: Agregando detalles de implementación a continuación según lo solicitado.
Para alguna señal , deseamos calcular coeficientes:f(x)
cx0,k0=⟨wx0,k0|f⟩
Para un fijo , puede verse como una función de , y esta función es simplemente una versión filtrada de . Específicamente, es una convolución de con , que podemos calcular de manera eficiente utilizando un método de Fourier. Por lo tanto, podemos calcular eficientemente todos los siguiente manera:k0cx0,k0x0ffw0,k0cx0,k0
- Aplique una transformada de Fourier a para obtener . Probablemente quiera hacer esto una ventana a la vez, con superposición suficiente para poder tirar los artefactos de ventanas, etc., pero por simplicidad supongamos que hace toda la señal de una vez, y que su longitud es una potencia de dos.ff^
- Para cada en alguna progresión geométrica con un espacio de aproximadamente del ancho de banda del filtro (o más fino si lo desea):
k01/4
- Forme el producto de con .f^w^0,k0
- Trunca el espectro a algún intervalo cuya longitud sea una potencia de dos, y que contenga la porción distinta de cero de .[kl,kr)w^0,k0
- Aplica una transformada inversa de Fourier a eso.
- Multiplique eso por para corregir la fase. El resultado es visto como una función de .exp(ixkl+kr2)cx0,k0x0
Esto calcula todos los coeficientes wavelet. Puede elegir la resolución en ajustando la relación en la progresión geométrica. La resolución en se establece por la longitud del espectro truncado, y cambiará dependiendo del ancho de banda de , que a su vez depende de . El esfuerzo computacional es una transformación de Fourier a alta resolución de tiempo, más una transformación inversa de Fourier para cada valor de a una resolución de tiempo mucho más baja. Funciona casi igual que STFT, tal vez más lento por algún pequeño factor que depende de la resolución que elija.k0x0w0,k0k0k0
Luego puede modificar como mejor le parezca, y puede reconstruir la señal invirtiendo el proceso anterior, sumando los espectros sobre antes de finalmente hacer una transformación de Fourier inversa general.cx0,k0k0
Los espectros truncados a veces presentan problemas de normalización, dependiendo de cómo se defina su FFT. No intentaré cubrir todas las posibilidades aquí. La normalización es básicamente un problema fácil. ;-)
La única parte que queda es elegir una envoltura wavelet adecuada. Resulta que es más fácil acertar que acertar . Una definición adecuada (de muchas posibilidades) es:w^x0,k0(k)wx0,k0(x)
w^x0,k0=Aexp(−i(k−k0)x0)exp(−(Qlog(k/k0))2)
en el que es una constante adimensional que selecciona el ancho de banda de su filtro, es decir, la resolución de frecuencia de sus wavelets, y se elige según sea necesario para la normalización. Con esta definición y resolución suficientemente alta para , la condición de sobrecomplete se mantiene y la reconstrucción de la señal funcionará.A k 0QAk0