La Trasformata di Fourier veloce accetta le operazioni , mentre la Trasformazione di Fast Wavelet prende . Ma cosa calcola in particolare l'FWT?
Sebbene vengano spesso confrontati, sembra che FFT e FWT siano mele e arance. A quanto ho capito, sarebbe più appropriato confrontare gli STFT (FFT di piccoli pezzi nel tempo) con il complesso Morlet WT , dal momento che entrambi sono rappresentazioni tempo-frequenza basate su sinusoidi complessi (per favore correggimi se sbaglio ). Questo è spesso mostrato con un diagramma come questo:
( Un altro esempio )
La sinistra mostra come lo STFT è un gruppo di FFT sovrapposte l'una all'altra col passare del tempo (questa rappresentazione è l'origine dello spettrogramma ), mentre la destra mostra il diadico WT, che ha una migliore risoluzione temporale ad alte frequenze e una migliore frequenza risoluzione alle basse frequenze (questa rappresentazione è chiamata scalogramma ). In questo esempio, per STFT è il numero di colonne verticali (6) e una singola operazione FFT di calcola una singola riga di coefficienti da campioni. Il totale è di 8 FFT da 6 punti ciascuno o 48 campioni nel dominio del tempo.
Quello che non capisco:
Quanti coefficienti viene calcolata una singola operazione FWT e dove si trovano sul grafico frequenza-tempo sopra?
Quali rettangoli vengono riempiti da un singolo calcolo?
Se calcoliamo un blocco di area uguale di coefficienti tempo-frequenza utilizzando entrambi, otteniamo la stessa quantità di dati?
L'FWT è ancora più efficiente dell'FFT?
Esempio 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 due serie di 4 coefficienti, quindi è uguale al numero di campioni nel segnale originale. Ma qual è la relazione tra questi 8 coefficienti e le piastrelle nel diagramma?
Aggiornare:
In realtà, probabilmente stavo facendo questo male, e dovrei usare wavedec()
, che fa una decomposizione DWT a più livelli:
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. ])]