入力サイズと離散ウェーブレット変換によって与えられる係数の数の間の相関関係について疑問に思っています。
私はDaubechiesウェーブレットを使用して1D関数を記述し、それを実装するためにPyWaveletsを使用しています(これは、MATLABツールボックスに類似しています)。
私は、Haarウェーブレットを使用してそれを実装することから始めました。これは正しい結果を与え、それがどのように機能するかを正確に理解しています。入力関数に16個のデータポイントがあるとしましょう。Haarを使用する場合、マルチレベル分解(wavedec
)から得られるものは次のようなものです(括弧内のシフトの数):
V1[1], W1[1], W2[2], W3[4], W4[8]
これはすべて順調です。V1は、スケーリング関数と、さまざまなスケールと膨張のW1〜W5ウェーブレットを提供します。私の問題は、次のDaubechies('db2'
ツールボックスではD4と呼ばれます)を使用するときに発生し、
V1[6], W1[6], W2[9]
私はすべての直感を失います。6、6、9の出所はわかりませんが、指定したレベル(レベルを指定する意味がわかりません)と入力サイズによって異なります。係数の数はどのように予測できますか。また、その理由をより深く理解するために役立つリソースは何ですか。
ありがとう!
編集:VとWの説明:
は通常、特定のスケーリング関数のスパン、つまり示します。ここで、はシフト、はスケーリングです。は、ウェーブレット関数を除いて同じです。VとWによる係数のベクトルを参照することで、表記を少し乱用した可能性があります。
EDIT2:コード
以下は、上記を生成するためのMATLABコードです。
>> [C, L] = wavedec(1:16, 4, 'db1'); L
L =
1 1 2 4 8 16
>> [C, L] = wavedec(1:16, 2, 'db2'); L
L =
6 6 9 16
私は実際にPyWaveletsを使用しました。
>>> import pywt
>>> map(len, pywt.wavedec(range(16), 'db1')) # defaults to level = 4
[1, 1, 2, 4, 8]
>>> map(len, pywt.wavedec(range(16), 'db2')) # defaults to level = 2
[6, 6, 9]
V1[6], W1[6], W2[9]
、長さが6のスケーリング関数と、長さが6と9の2つのウェーブレット関数を取得するということですか。または、これらは変換された信号の異なるレベルの係数の数ですか?これらを取得するためのMATLABコードも非常に便利です。
V
とW
?