La Transformada rápida de Fourier toma operaciones , mientras que la Transformación rápida Wavelet toma O ( N ) . Pero, ¿qué calcula específicamente el FWT?
Aunque a menudo se comparan, parece que el FFT y el FWT son manzanas y naranjas. Según tengo entendido, sería más apropiado comparar el STFT (FFT de pequeños fragmentos a lo largo del tiempo) con el Morlet WT complejo , ya que ambos son representaciones de frecuencia de tiempo basadas en sinusoides complejas (corríjame si me equivoco ) Esto a menudo se muestra con un diagrama como este:
( Otro ejemplo )
La izquierda muestra cómo el STFT es un montón de FFT apilados uno encima del otro a medida que pasa el tiempo (esta representación es el origen del espectrograma ), mientras que la derecha muestra el WT diádico, que tiene una mejor resolución de tiempo a altas frecuencias y mejor frecuencia resolución a bajas frecuencias (esta representación se llama escalograma ). En este ejemplo, para el STFT es el número de columnas verticales (6), y una sola operación O ( N log N ) FFT calcula una sola fila de N coeficientes de N muestras. El total es de 8 FFT de 6 puntos cada una, o 48 muestras en el dominio del tiempo.
Lo que no entiendo:
¿Cuántos coeficientes calcula una sola operación FWT y dónde están ubicados en el gráfico de frecuencia de tiempo anterior?
¿Qué rectángulos se completan con un solo cálculo?
Si calculamos un bloque de área igual de coeficientes de frecuencia de tiempo usando ambos, ¿obtenemos la misma cantidad de datos?
¿Es el FWT aún más eficiente que el FFT?
Ejemplo concreto usando PyWavelets :
In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[2]:
(array([ 0.70710678, 0. , 0. , 0. ]),
array([ 0.70710678, 0. , 0. , 0. ]))
Crea dos conjuntos de 4 coeficientes, por lo que es igual al número de muestras en la señal original. Pero, ¿cuál es la relación entre estos 8 coeficientes y los mosaicos en el diagrama?
Actualizar:
En realidad, probablemente estaba haciendo esto mal, y debería estar usando wavedec()
, lo que hace una descomposición DWT de varios niveles:
In [4]: wavedec([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[4]:
[array([ 0.35355339]),
array([ 0.35355339]),
array([ 0.5, 0. ]),
array([ 0.70710678, 0. , 0. , 0. ])]