メインコンテンツ

dwt

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

説明

[cA,cD] = dwt(x,wname) は、wname で指定されたウェーブレットを使用してベクトル x の単一レベル離散ウェーブレット変換を返します。ウェーブレットは wavemngr で認識されなければなりません。dwt は、DWT の Approximation 係数のベクトル cA と Detail 係数のベクトル cD を返します。

メモ

用途で多重レベルウェーブレット分解が必要な場合は、wavedec の使用を検討してください。

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

[cA,cD] = dwt(___,"mode",extmode) は、指定された拡張モード extmode で単一レベル DWT を返します。詳細については、dwtmode を参照してください。この引数は前述のいずれかの入力構文にも追加できます。

メモ

gpuArray 入力でサポートされているモードは、"symh" ("sym") および "per" です。"per" 以外のすべての "mode" オプションは "symh" に変換されます。GPU での単一レベル離散ウェーブレット変換の例を参照してください。

すべて折りたたむ

"sym4" ウェーブレットを使用して、ノイズを含むドップラー信号の単一レベル DWT を求めます。

load noisdopp;
[cA,cD] = dwt(noisdopp,"sym4");

Approximation 係数を使用して、信号の平滑化されたバージョンを再構成します。プロットして元の信号と比較します。

xrec = idwt(cA,zeros(size(cA)),"sym4");
plot(noisdopp)
hold on
grid on
plot(xrec)
legend("Original","Reconstruction")
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Reconstruction.

ウェーブレット (ハイパス) フィルターとスケーリング (ローパス) フィルターを使用して、ノイズを含む Doppler 信号の単一レベル DWT を求めます。

load noisdopp
[LoD,HiD] = wfilters("bior3.5","d");
[cA,cD] = dwt(noisdopp,LoD,HiD);

同じウェーブレットを使用して、ノイズを含む Doppler 信号に適用できる DWT フィルター バンクを作成します。フィルター バンクからハイパス フィルターとローパス フィルターを求めます。

len = length(noisdopp);
fb = dwtfilterbank("SignalLength",len,"Wavelet","bior3.5");
[lo,hi] = filters(fb);

bior3.5 ウェーブレットの lohi は 12 行 2 列の行列です。lo はローパス フィルターで、hi はハイパス フィルターです。lohi の最初の列は解析に使用され、2 列目は合成に使用されます。lo および hi の最初の列を LoD および HiD とそれぞれ比較します。それらが等しくなることを確認します。

disp("Lowpass Analysis Filters")
Lowpass Analysis Filters
[lo(:,1) LoD']
ans = 12×2

   -0.0138   -0.0138
    0.0414    0.0414
    0.0525    0.0525
   -0.2679   -0.2679
   -0.0718   -0.0718
    0.9667    0.9667
    0.9667    0.9667
   -0.0718   -0.0718
   -0.2679   -0.2679
    0.0525    0.0525
    0.0414    0.0414
   -0.0138   -0.0138
      ⋮

disp("Highpass Analysis Filters")
Highpass Analysis Filters
[hi(:,1) HiD']
ans = 12×2

         0         0
         0         0
         0         0
         0         0
   -0.1768   -0.1768
    0.5303    0.5303
   -0.5303   -0.5303
    0.1768    0.1768
         0         0
         0         0
         0         0
         0         0
      ⋮

第 1 レベルのウェーブレット フィルターとスケーリング フィルターの片側振幅周波数応答をプロットします。

[psidft,f,phidft] = freqz(fb);
level = 1;
plot(f(len/2+1:end),abs(phidft(level,len/2+1:end)))
hold on
plot(f(len/2+1:end),abs(psidft(level,len/2+1:end)))
grid on
hold off
legend("Scaling Filter","Wavelet Filter")
title("First-Level One-sided Frequency Responses")
xlabel("Normalized Frequency (cycles/sample)")
ylabel("Magnitude")

Figure contains an axes object. The axes object with title First-Level One-sided Frequency Responses, xlabel Normalized Frequency (cycles/sample), ylabel Magnitude contains 2 objects of type line. These objects represent Scaling Filter, Wavelet Filter.

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

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

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

dwtmode を使用して拡張モードをゼロ パディングに変更します。db2 ウェーブレットを使用して、GPU での信号の単一レベル離散ウェーブレット変換を求めます。

dwtmode("zpd","nodisp")
[cA,cD] = dwt(noisdoppg,"db2");

現在の拡張モード zpdgpuArray 入力をサポートしていません。そのため、DWT は代わりに sym 拡張モードを使用して実行されます。拡張モードを sym に設定して noisdoppg の DWT を求め、前の結果と比較して、これを確認します。

[cAsym,cDsym] = dwt(noisdoppg,"db2","mode","sym");
[max(abs(cA-cAsym)) max(abs(cD-cDsym))]
ans =

     0     0

サポートされていない拡張モードが入力引数として指定された場合、"sym" に変換されます。サポートされていないモードに "mode" が設定されている noisdoppg の DWT も、既定で sym 拡張モードに設定されることを確認します。

[cA,cD] = dwt(noisdoppg,"db2","mode","spd");
[max(abs(cA-cAsym)) max(abs(cD-cDsym))]
ans =

     0     0

現在の拡張モードを周期化に変更します。db2 ウェーブレットを使用して、GPU での信号の単一レベル離散ウェーブレット変換を求めます。

dwtmode("per","nodisp")
[cA,cD] = dwt(noisdoppg,"db2");

現在の拡張モード pergpuArray 入力をサポートしていることを確認します。

[cAper,cDper] = dwt(noisdopp,"db2","mode","per");
[max(abs(cA-cAper)) max(abs(cD-cDper))]
ans =

     0     0

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

dwtmode(origMode,"nodisp")

入力引数

すべて折りたたむ

入力データ。ベクトルとして指定します。

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

単一レベル DWT の計算に使用する解析ウェーブレット。文字ベクトルまたは string スカラーとして指定します。ウェーブレットは wavemngr で認識されなければなりません。解析ウェーブレットは、次のいずれかのウェーブレット ファミリから指定します。最適局在化 Daubechies、Beylkin、Coiflet、Daubechies、Fejér-Korovkin、Haar、Han 線形位相モーメント、Morris 最小帯域幅、Symlet、Vaidyanathan、Discrete Meyer、双直交、および逆双直交。各ファミリの利用可能なウェーブレットについては、wfilters を参照してください。

例: "db4"

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

データ型: single | double

離散ウェーブレット変換の実行時に使用する拡張モード。次のいずれかとして指定します。

extmode

DWT 拡張モード

"zpd"

ゼロ パディング

"sp0"

次数 0 の平滑化拡張

"spd" (または "sp1")

次数 1 の平滑化拡張

"sym" または "symh"

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

"symw"

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

"asym" または "asymh"

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

"asymw"

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

"ppd", "per"

周期化拡張

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

既定の拡張モードは dwtmode で管理されるグローバル変数で指定されます。拡張モードの詳細については、dwtmode を参照してください。

例: [cA,cD] = dwt(x,"db4","mode","symw") は、次数 4 の Daubechies 極値位相ウェーブレットと全点対称拡張を使用して x の単一レベル DWT を返します。

出力引数

すべて折りたたむ

ウェーブレット分解から得られた Approximation 係数。ベクトルとして返されます。Approximation 係数は、スケーリング フィルター LoD による入力信号 x の畳み込みとその後の 2 進間引きによって得られます。sx = size(x) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、cA は長さ ceil(sx/2) のベクトルです。

  • それ以外の拡張モードの場合、cA は長さ floor((sx+lf-1)/2) のベクトルです。

データ型: single | double

ウェーブレット分解から得られた Detail 係数。ベクトルとして返されます。Detail 係数は、ウェーブレット フィルター HiD による入力信号 x の畳み込みとその後の 2 進間引きによって得られます。sx = size(x) および lf = 分解フィルターの長さとします。

  • DWT 拡張モードが周期化に設定されている場合、cD は長さ ceil(sx/2) のベクトルです。

  • それ以外の拡張モードの場合、cD は長さ floor((sx+lf-1)/2) のベクトルです。

データ型: single | double

アルゴリズム

長さ N の信号 s から始まり、Approximation 係数 cA1 と Detail 係数 cD1 の 2 組の係数が計算されます。Approximation 係数は、スケーリング フィルター LoD による s の畳み込みとその後の 2 進間引きによって得られます。同様に、Detail 係数は、ウェーブレット フィルター HiD による s の畳み込みとその後の 2 進間引きによって得られます。

ここで、

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

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

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

畳み込みに基づくアルゴリズムによる信号の端点の影響に対処するために、dwtmode で管理されるグローバル変数で、使用される信号拡張モードの種類が定義されます。使用可能なオプションとしては、ゼロ パディング拡張や対称拡張 (既定のモード) があります。

メモ

関数 dwt と DSP System Toolbox™ の DWT ブロックでは、同じ入力に対して同じ結果は得られません。DWT ブロックはリアルタイムの実装用に設計されたものであるのに対し、Wavelet Toolbox™ ソフトウェアは分析用に設計されたものであるため、境界条件やフィルター状態の扱いが異なります。

dwt 関数の出力を DWT ブロックの出力と一致させるには、MATLAB® コマンド プロンプトで dwtmode("zpd") と入力して、関数の境界条件をゼロ パディングに設定します。FIR フィルターによって実装される DWT ブロックのレイテンシと一致させるには、関数 dwt の入力にゼロを追加します。追加するゼロの数はフィルター長の半分と等しくなければなりません。

参照

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

[2] Mallat, S. G. “A Theory for Multiresolution Signal Decomposition: The Wavelet Representation.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 11, Issue 7, July 1989, pp. 674–693.

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

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入