メインコンテンツ

wavedec

多重レベル 1 次元離散ウェーブレット変換

説明

[c,l] = wavedec(x,n,wname) は、ウェーブレット wname を使用してレベル n における 1 次元信号 x のウェーブレット分解を返します。出力の分解構造は、ウェーブレット分解ベクトル c とブックキーピング ベクトル l (c の解析に使用) で構成されます。

[c,l] = wavedec(x,n,LoD,HiD) は、指定されたローパスおよびハイパスのウェーブレット分解フィルター LoD および HiD を使用してウェーブレット分解を返します。

[c,l] = wavedec(___,Mode=extmode) は、指定された離散ウェーブレット変換 (DWT) 拡張モード extmode を使用します。この構文は、前述のいずれの構文でも使用できます。

すべて折りたたむ

1 次元信号を読み込んでプロットします。

load sumsin 
plot(sumsin)
title("Signal")

Figure contains an axes object. The axes object with title Signal contains an object of type line.

次数 2 の Daubechies ウェーブレットを使用して、信号の 3 レベル ウェーブレット分解を実行します。分解から粗いスケールの Approximation 係数と Detail 係数を抽出します。

[c,l] = wavedec(sumsin,3,"db2");
approx = appcoef(c,l,"db2");
[cd1,cd2,cd3] = detcoef(c,l,[1 2 3]);

係数をプロットします。

tiledlayout(4,1)
nexttile
plot(approx)
title("Approximation Coefficients")
nexttile
plot(cd3)
title("Level 3 Detail Coefficients")
nexttile
plot(cd2)
title("Level 2 Detail Coefficients")
nexttile
plot(cd1)
title("Level 1 Detail Coefficients")

Figure contains 4 axes objects. Axes object 1 with title Approximation Coefficients contains an object of type line. Axes object 2 with title Level 3 Detail Coefficients contains an object of type line. Axes object 3 with title Level 2 Detail Coefficients contains an object of type line. Axes object 4 with title Level 1 Detail Coefficients contains an object of type line.

どの GPU がサポートされているかについては、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。

ノイズがある Doppler 信号を読み込みます。gpuArray を使用して信号を GPU に入力します。現在のグローバル DWT 拡張モードを保存します。

load noisdopp
noisdoppg = gpuArray(noisdopp);
origMode = dwtmode("status","nodisp");

db4 ウェーブレットを使用して、GPU での信号の 3 レベル DWT を求めます。gpuArray 入力では zpd 拡張モードがサポートされていませんが、それを指定します。関数 wavedec は代わりに sym 拡張モードを使用します。

[czpd,lzpd] = wavedec(noisdoppg,3,"db4",Mode="zpd");

関数 wavedecsym 拡張モードを使用したことを確認します。グローバル拡張モードを sym に設定し、拡張モードを指定せずに noisdoppg の 3 レベル DWT を求めます。この結果が前の結果と等しいことを確認します。

dwtmode("sym","nodisp")
[csym,lsym] = wavedec(noisdoppg,3,"db4");
[max(abs(czpd-csym)) max(abs(lzpd-lsym))]
ans =

     0     0

gpuArray 入力でサポートされている per 拡張モードを使用して、noisdoppg の 3 レベル DWT を求めます。この結果が sym の結果と異なっていることを確認します。

[cper,lper] = wavedec(noisdoppg,3,"db4",Mode="per");
[length(csym) ; length(cper)]
ans = 2×1

        1044
        1024

[lsym ; lper]
ans =

         134         134         261         515        1024
         128         128         256         512        1024

グローバル拡張モードを元の設定に戻します。

dwtmode(origMode,"nodisp")

この例では、信号の多重レベル 1 次元離散ウェーブレット分解から始めて、連続するスケールのウェーブレット部分空間とスケーリング部分空間への信号の投影を取得する方法を示します。これらの投影は、元の信号と同じ時間スケールで行われます。つまり、間引き離散ウェーブレット変換 (DWT) に基づく "多重解像度解析" (MRA) を取得できます。各投影を加算すると信号を復元できます。詳細については、Practical Introduction to Multiresolution Analysisを参照してください。

信号を読み込んでプロットします。

load noissin
plot(noissin)
title("Original Signal")

Figure contains an axes object. The axes object with title Original Signal contains an object of type line.

関数 wavedec を使用し、db4 ウェーブレットを使ってレベル 3 までの信号の離散ウェーブレット分解を取得します。

level = 3;
wv = "db4";
[C,L] = wavedec(noissin,level,wv);

MRA を保存するために行列を事前に割り当てます。行数は分解レベルより 1 つ多く、列数は信号の長さに等しくなります。

mra = zeros(level+1,numel(noissin));

関数 wrcoef を使用して、3 つのウェーブレット (Detail) 部分空間への信号の投影を取得します。次に、最終的なスケーリング (粗大、つまり Approximation) 部分空間への投影を取得します。

for k=1:level
    mra(k,:) = wrcoef("d",C,L,wv,k);
end
mra(end,:) = wrcoef("a",C,L,wv,level);

MRA の行の和が元の信号と等しいことを確認します。

mraSum = sum(mra,1);
max(abs(mraSum-noissin))
ans = 
1.6591e-12

MRA をプロットします。

tiledlayout(level+1,1)
for k=1:level
    nexttile
    plot(mra(k,:))
    title("Projection Onto Detail Subspace "+num2str(k))
end
nexttile
plot(mra(end,:))
title("Projection Onto Approximation Subspace")

Figure contains 4 axes objects. Axes object 1 with title Projection Onto Detail Subspace 1 contains an object of type line. Axes object 2 with title Projection Onto Detail Subspace 2 contains an object of type line. Axes object 3 with title Projection Onto Detail Subspace 3 contains an object of type line. Axes object 4 with title Projection Onto Approximation Subspace contains an object of type line.

入力引数

すべて折りたたむ

入力信号。ベクトルで指定します。

データ型: single | double
複素数のサポート: あり

分解レベル。正の整数として指定します。wavedec では最大レベルの制限は適用されません。ウェーブレット係数が境界の影響を受けないようにするには wmaxlev を使用します。用途で境界の影響が問題にならない場合は、一般に nfix(log2(length(x))) 以下に設定します。

データ型: single | double

解析ウェーブレット。文字ベクトルまたは string スカラーとして指定します。

メモ

wavedec では、タイプ 1 (直交) とタイプ 2 (双直交) のウェーブレットのみがサポートされます。直交ウェーブレットと双直交ウェーブレットの一覧については、wfilters を参照してください。

ウェーブレット分解フィルター。偶数長の実数値ベクトルのペアとして指定します。LoD はローパス分解フィルター、HiD はハイパス分解フィルターです。LoDHiD の長さは等しくなければなりません。詳細については、wfilters を参照してください。

データ型: single | double

R2023b 以降

ウェーブレット分解に使用する拡張モード。次のように指定します。

extmode

DWT 拡張モード

"zpd"

ゼロ パディング

"sp0"

次数 0 の平滑化拡張

"spd" (または "sp1")

次数 1 の平滑化拡張

"sym" または "symh"

対称拡張 (半分の点): 境界値の対称的な複製

"symw"

対称拡張 (全点): 境界値の対称的な複製

"asym" または "asymh"

反対称拡張 (半分の点): 境界値の反対称の複製

"asymw"

反対称拡張 (全点): 境界値の反対称の複製

"ppd", "per"

周期化拡張

信号長が奇数で mode"per" の場合、最後の値と等しい追加サンプルが右に追加され、"ppd" モードで拡張が実行されます。信号の長さが偶数である場合、"per""ppd" に簡略化されます。このルールはイメージにも適用されます。

既定の拡張モードは dwtmode で管理されるグローバル変数で指定されます。

出力引数

すべて折りたたむ

ウェーブレット分解ベクトル。ベクトルとして返されます。

データ型: single | double

ブックキーピング ベクトル。正の整数のベクトルとして返されます。各レベルの係数の数と元の信号の長さがベクトルに格納されます。

ブックキーピング ベクトルは、ウェーブレット分解ベクトル c の係数をレベルごとに解析するのに使用されます。分解ベクトルとブックキーピング ベクトルは、このレベル 3 の分解の図のように編成されます。

データ型: single | double

アルゴリズム

長さ N の信号 s が与えられた場合、DWT は最大 log2 N のステップで構成されます。s から始まり、最初のステップで Approximation 係数 cA1 と Detail 係数 cD1 の 2 組の係数が生成されます。Approximation 係数と Detail 係数は、それぞれローパス フィルター LoD とハイパス フィルター HiD による s の畳み込みとその後の 2 進間引き (2 でダウンサンプリング) によって得られます。

ここで、

  • — フィルター X での畳み込み

  • 2 — ダウンサンプリング (偶数のインデックスが付いた要素を維持)

各フィルターの長さは 2n に等しくなります。N = length(s) の場合、信号 F および G の長さは N + 2n −1、係数 cA1 および cD1 の長さは次のようになります。

floor(N12)+n

次のステップで、Approximation 係数 cA1 が同じスキームを使用して 2 つの部分に分割されます。つまり、scA1 に置き換えて、cA2cD2 が生成されます。

レベル j で解析された信号 s のウェーブレット分解の構造は、[cAj, cDj, ..., cD1] になります。

この構造には、j = 3 の場合、次のツリーの終端ノードが含まれます。

参照

[1] Daubechies, I. Ten Lectures on Wavelets, CBMS-NSF Regional Conference Series in Applied Mathematics. Philadelphia, PA: SIAM Ed, 1992.

[2] Mallat, S.G. “A Theory for Multiresolution Signal Decomposition: The Wavelet Representation.” IEEE Transactions on Pattern Analysis and Machine Intelligence 11, no. 7 (July 1989): 674–93. https://doi.org/10.1109/34.192463.

[3] Meyer, Y. Wavelets and Operators. Translated by D. H. Salinger. Cambridge, UK: Cambridge University Press, 1995.

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する