最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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 を参照してください。

すべて折りたたむ

ウェーブレット名を使用して、ノイズを含む Doppler 信号の単一レベル 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')

ウェーブレット (ハイパス) フィルターとスケーリング (ローパス) フィルターを使用して、ノイズを含む 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
      ⋮

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
      ⋮

第 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
legend('Scaling Filter','Wavelet Filter')
title('First-Level One-sided Frequency Responses')
xlabel('Normalized Frequency (cycles/sample)')
ylabel('Magnitude')

入力引数

すべて折りたたむ

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

データ型: double

単一レベル DWT の計算に使用する解析ウェーブレット。文字ベクトルまたは string スカラーとして指定します。ウェーブレットは wavemngr で認識されなければなりません。解析ウェーブレットは、Daubechies、Coiflets、Symlets、Fejér-Korovkin、Discrete Meyer、Biorthogonal、Reverse Biorthogonal のいずれかのウェーブレット ファミリから指定します。各ファミリの利用可能なウェーブレットについては、wfilters を参照してください。

例: 'db4'

スケーリング (ローパス) フィルター。偶数長の実数値のベクトルとして指定します。LoDHiD と同じ長さでなければなりません。詳細は、wfilters を参照してください。

データ型: double

ウェーブレット (ハイパス) フィルター。偶数長の実数値のベクトルとして指定します。HiDLoD と同じ長さでなければなりません。詳細は、wfilters を参照してください。

データ型: double

DWT の実行時に使用する拡張モード。次のいずれかとして指定します。

mode

DWT 拡張モード

'zpd'

ゼロ拡張

'sp0'

次数 0 の平滑化拡張

'spd' (または 'sp1')

次数 1 の平滑化拡張

'sym' または 'symh'

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

'symw'

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

'asym' または 'asymh'

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

'asymw'

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

'ppd'

周期化拡張 (1)

'per'

周期化拡張 (2)

信号長が奇数の場合、wextend は最後の値と等しい追加サンプルを右に追加し、'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) のベクトルです。

データ型: double

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

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

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

データ型: 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.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

R2006a より前に導入