Main Content

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")

次数 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")

どの 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")

関数 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")

入力引数

すべて折りたたむ

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

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

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

データ型: single | double

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

メモ

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

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

データ型: single | double

R2023b 以降

DWT に使用する拡張モード。次のように指定します。

mode

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 つの部分に分割されます。つまり、s を cA1 に置き換えて、cA2 と cD2 が生成されます。

レベル 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 より前に導入

すべて展開する