高速フーリエ変換かかりしながら、動作を高速ウェーブレット変換をとるO(Nを)。しかし、具体的には、FWTは何を計算しますか?
それらはしばしば比較されますが、FFTとFWTはリンゴとオレンジのようです。私が理解しているように、STFT(経時的な小さなチャンクのFFT)と複雑なMorlet WTを比較する方が適切です。なぜなら、それらは両方とも複雑な正弦波に基づいた時間周波数表現であるからです)。多くの場合、これは次のような図で示されます。
(別の例)
左は、時間が経過するにつれてSTFTが積み重ねられた一連のFFTである様子を示しています(この表現はスペクトログラムの原点です)。右は、ダイアディックWTを示しています。低周波数での解像度(この表現はスカログラムと呼ばれます)。この例では、STFTのは垂直列の数(6)であり、単一のO(N log N ) FFT演算は、N個のサンプルからN 個の係数の単一の行を計算します。合計は、それぞれ6ポイントの8 FFT、または時間領域で48サンプルです。
わからないこと:
単一の FWT操作で計算される係数の数と、上記の時間周波数チャートのどこに位置していますか
単一の計算で塗りつぶされる長方形はどれですか?
両方を使用して時間周波数係数の等面積ブロックを計算すると、同じ量のデータが出力されますか?
FWTはFFTよりも効率的ですか?
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. ]))
4つの係数のセットを2つ作成するため、元の信号のサンプル数と同じです。しかし、これらの8つの係数とダイアグラム内のタイルとの関係はどうでしょうか?
更新:
実際、私はおそらくこれを間違っwavedec()
ていたので、マルチレベルDWT分解を行うを使用する必要があります。
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. ])]