La transformation de Fourier rapide prend les opérations , tandis que la transformation rapide en ondelettes prend . Mais que calcule précisément le FWT?
Bien qu'ils soient souvent comparés, il semble que les FFT et FWT soient des pommes et des oranges. Si je comprends bien, il serait plus approprié de comparer les STFT (FFT de petits morceaux dans le temps) avec le Morlet WT complexe , car ce sont deux représentations temps-fréquence basées sur des sinusoïdes complexes (veuillez me corriger si je me trompe ). Ceci est souvent montré avec un diagramme comme celui-ci:
( Un autre exemple )
La gauche montre comment le STFT est un tas de FFT empilés les uns sur les autres au fil du temps (cette représentation est à l'origine du spectrogramme ), tandis que la droite montre le WT dyadique, qui a une meilleure résolution temporelle à hautes fréquences et une meilleure fréquence résolution aux basses fréquences (cette représentation est appelée un scalogramme ). Dans cet exemple, pour le STFT est le nombre de colonnes verticales (6), et une seule opération FFT calcule une seule ligne de coefficients à partir de échantillons. Le total est de 8 FFT de 6 points chacune, soit 48 échantillons dans le domaine temporel.O ( N log N ) N N
Ce que je ne comprends pas:
Combien de coefficients une seule opération FWT calcule-t-elle et où sont-ils situés sur le graphique temps-fréquence ci-dessus?
Quels rectangles sont remplis par un seul calcul?
Si nous calculons un bloc de surface égale de coefficients temps-fréquence en utilisant les deux, obtenons-nous la même quantité de données?
Le FWT est-il toujours plus efficace que le FFT?
Exemple concret utilisant 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. ]))
Il crée deux ensembles de 4 coefficients, c'est donc le même que le nombre d'échantillons dans le signal d'origine. Mais quelle est la relation entre ces 8 coefficients et les tuiles du diagramme?
Mise à jour:
En fait, je faisais probablement mal, et je devrais utiliser wavedec()
, qui fait une décomposition DWT à plusieurs niveaux:
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. ])]