Main Content

modwt

最大重複離散ウェーブレット変換

説明

w = modwt(x) は、x の最大重複離散ウェーブレット変換 (MODWT) を返します。x は、実数値または複素数値のベクトルまたは行列です。x が行列の場合、modwtx の列を処理します。modwt がウェーブレット変換を計算するのは、x がベクトルの場合はレベル floor(log2(length(x))) まで、x が行列の場合はレベル floor(log2(size(x,1))) までです。既定では、modwt は、4 つの消失モーメント ('sym4') と周期的な境界の処理をもつ Daubechies 最小非対称ウェーブレットを使用します。

w = modwt(x,wname) は、MODWT に直交ウェーブレット wname を使用します。

w = modwt(x,Lo,Hi) は、スケーリング フィルター Lo とウェーブレット フィルター Hi を使用して、MODWT を計算します。これらのフィルターは、直交ウェーブレットの条件を満たさなければなりません。wname とフィルター ペア (LoHi) の両方を指定することはできません。

w = modwt(___,lev) は、前述の構文にある引数のいずれかを使用して、指定されたレベル lev まで MODWT を計算します。

w = modwt(___,'reflection') は、反射境界処理を使用して MODWT を計算します。他の入力は、前述の構文にある引数のいずれかです。ウェーブレット変換を計算する前に、modwt は、信号をその終端で信号長の 2 倍に対称的に拡張します。modwt が返すウェーブレット係数の数やスケーリング係数の数は、入力信号の長さの 2 倍に等しくなります。既定では、信号は周期的に拡張されます。

文字ベクトル 'reflection' 全体を入力しなければなりません。ウェーブレット マネジャーを使用して 'reflection' という名前のウェーブレットを追加した場合は、このオプションを使用する前に、そのウェーブレットの名前を変更しなければなりません。'reflection' は、入力引数リストで x より後の任意の位置に配置できます。

w = modwt(___,TimeAlign=alignflag) は、すべてのレベル (スケール) でウェーブレット係数とスケーリング係数を循環的にシフトして、スケーリング フィルターとウェーブレット フィルターの遅延を補正します。他の入力は、前述の構文にある引数のいずれかです。

すべて折りたたむ

既定の sym4 ウェーブレットを最大レベルまで使用して、心電図 (ECG) 信号の MODWT を求めます。データは Percival & Walden (2000) の p.125 から採用しています (元々ワシントン大学の William Constantine と Per Reinhall によって提供されたデータ)。

load wecg;
wtecg = modwt(wecg);
whos wtecg
  Name        Size               Bytes  Class     Attributes

  wtecg      12x2048            196608  double              

wtecg の最初の 11 行は、スケール 21 から 211 のウェーブレット係数です。最後の行には、スケール 211 でのスケーリング係数が格納されます。スケール 23 の Detail (ウェーブレット) 係数をプロットします。

plot(wtecg(3,:))
title('Level 3 Wavelet Coefficients')

Figure contains an axes object. The axes object with title Level 3 Wavelet Coefficients contains an object of type line.

db2 ウェーブレットを最大レベルまで使用して、南方振動指数データの MODWT を求めます。

load soi;
wsoi = modwt(soi,'db2');

Fejér-Korovkin の長さ 8 のスケーリング フィルターとウェーブレット フィルターを使用して、ドイツ マルクとアメリカ ドルの為替レート データの MODWT を求めます。

load DM_USD
[~,~,Lo,Hi] = wfilters("fk8");
wdmf = modwt(DM_USD,Lo,Hi);

同じウェーブレットで 2 番目の MODWT を取得しますが、今回はウェーブレット名を指定します。

wdmn = modwt(DM_USD,"fk8");

分解が等しいことを確認します。

max(abs(wdmf(:)-wdmn(:)))
ans = 0

スケール 24 (レベル 4 に対応) までの ECG 信号の MODWT を求めます。既定の sym4 ウェーブレットを使用します。データは Percival & Walden (2000) の p.125 から採用しています (元々ワシントン大学の William Constantine と Per Reinhall によって提供されたデータ)。

load wecg;
wtecg = modwt(wecg,4);
whos wecg wtecg
  Name          Size              Bytes  Class     Attributes

  wecg       2048x1               16384  double              
  wtecg         5x2048            81920  double              

wtecg の行サイズは L+1 です。ここで、この場合、レベル (L) は 4 です。列サイズは入力サンプルの数と一致します。

反射境界処理を使用して、ECG 信号の MODWT を求めます。既定の sym4 ウェーブレットを使用して、レベル 4 までの変換を求めます。データは Percival & Walden (2000) の p.125 から採用しています (元々ワシントン大学の William Constantine と Per Reinhall によって提供されたデータ)。

load wecg;
wtecg = modwt(wecg,4,'reflection');
whos wecg wtecg
  Name          Size               Bytes  Class     Attributes

  wecg       2048x1                16384  double              
  wtecg         5x4096            163840  double              

wtecg は 4096 列で、これは入力信号の長さ wecg の 2 倍です。

ユニット インパルス信号を作成します。

n = 128;
sig = zeros(1,n);
sig(n/2) = 1;
clf
plot(sig)
axis tight
title("Unit Impulse")

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

modwt の既定の設定を使用して、信号の MODWT をレベル 4 まで取得します。時間揃え係数を使用して、信号の 2 番目の MODWT をレベル 4 まで取得します。

lev = 4;
w = modwt(sig,lev);
wTimeAligned = modwt(sig,lev,TimeAlign=true);

既定の設定で取得した MODWT のウェーブレット係数とスケーリング係数をプロットします。MODWT で使用されるウェーブレット フィルターとスケーリング フィルターの位相応答は非ゼロであるため、スケールと共に遅延が大きくなります。

for k=1:lev+1
    subplot(lev+1,1,k)
    plot(w(k,:))
    axis tight
    if k==1
        title("MODWT Analysis with Delay")
    end
end

Figure contains 5 axes objects. Axes object 1 with title MODWT Analysis with Delay contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 contains an object of type line.

時間軸で揃えた係数のプロットと比較します。

for k=1:lev+1
    subplot(lev+1,1,k)
    plot(wTimeAligned(k,:))
    axis tight
    if k==1
        title("Time-Aligned MODWT Analysis")
    end
end

Figure contains 5 axes objects. Axes object 1 with title Time-Aligned MODWT Analysis contains an object of type line. Axes object 2 contains an object of type line. Axes object 3 contains an object of type line. Axes object 4 contains an object of type line. Axes object 5 contains an object of type line.

23 チャネルの EEG データ Espiga3[3]を読み込みます。チャネルは列方向に配置されます。データは 200 Hz でサンプリングされます。

load Espiga3

最大重複離散ウェーブレット変換を最大レベルまで計算します。

wt = modwt(Espiga3);

信号エネルギーの 2 乗を求め、すべてのレベルのウェーブレット係数を合計して得られたエネルギーの 2 乗と比較します。ある成分のエネルギーが不釣り合いなほどに大きいため、エネルギーの 2 乗の対数を使用します。

sigN2 = vecnorm(Espiga3).^2;
wtN2 = sum(squeeze(vecnorm(wt,2,2).^2));
bar(1:23,log(sigN2))
hold on
scatter(1:23,log(wtN2),'filled','SizeData',100)
alpha(0.75)
legend('Signal Energy','Energy in Wavelet Coefficients', ...
        'Location','NorthWest')
xlabel('Channel')
ylabel('ln(squared energy)')

Figure contains an axes object. The axes object with xlabel Channel, ylabel ln(squared energy) contains 2 objects of type bar, scatter. These objects represent Signal Energy, Energy in Wavelet Coefficients.

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。x がベクトルの場合、x には少なくとも 2 つの成分がなければなりません。x が行列の場合、x の行の次元は少なくとも 2 でなければなりません。

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

ウェーブレット。文字ベクトルまたは string スカラーとして指定します。ウェーブレットは直交でなければなりません。直交ウェーブレットは、ウェーブレット マネージャー wavemngr のタイプ 1 ウェーブレットとして指定されます。

有効な組み込み直交ウェーブレット ファミリは次のとおりです。最適局在化 Daubechies ("bl")、Beylkin ("beyl")、Coiflet ("coif")、Daubechies ("db")、Fejér-Korovkin ("fk")、Haar ("haar")、Han 線形位相モーメント ("han")、Morris 最小帯域幅 ("mb")、Symlet ("sym")、および Vaidyanathan ("vaid")。

各ファミリに含まれるウェーブレットの一覧については、wfilters を参照してください。ウェーブレット ファミリの略称を指定して waveinfo を使用することもできます。たとえば、waveinfo("db") のようにします。wavemngr("type",wn) を使用して、ウェーブレット wn が直交 (1 が返される) かどうかを判定します。たとえば、wavemngr("type","db6") は 1 を返します。

フィルター。偶数長の実数値ベクトルのペアとして指定します。Lo はスケーリング フィルター、Hi はウェーブレット フィルターです。フィルターは、直交ウェーブレットの条件を満たさなければなりません。LoHi の長さは等しくなければなりません。詳細については、wfilters を参照してください。wname とフィルター ペア Lo,Hi の両方を指定することはできません。

メモ

既定では、関数 wfilters は、指定した直交ウェーブレットまたは双直交ウェーブレットに関連する 2 組のフィルターを返します。数値パッケージでの MODWT の実装における通常の慣例と一致するものとして、直交ウェーブレット wname が指定されたとき、関数 modwtwfilters によって返されるフィルターの 2 番目のペアを内部的に使用します。たとえば、

wt = modwt(x,"db2");

これは次と等価です。

[~,~,Lo,Hi] = wfilters("db2"); wt = modwt(x,Lo,Hi);

この慣例は、Wavelet Toolbox™ のほとんどの離散ウェーブレット変換関数が信号を分解するときに従うものとは異なります。ほとんどの関数はフィルターの最初のペアを内部的に使用します。

データ型: single | double

変換レベル。floor(log2(N)) 以下の正の整数として指定します。ここで、x がベクトルの場合は N = length(x)x が行列の場合は N = size(x,1) です。lev を指定しない場合、既定で floor(log2(N)) になります。

MODWT が、スケーリング フィルターとウェーブレット フィルターの遅延を補正するために、すべてのレベル (スケール) でウェーブレット係数とスケーリング係数を循環的にシフトするかどうかを決定する時間揃え係数の logical 値。数値または logical の 1 (true) または 0 (false) として指定します。係数は、Hess-Nielsen と Wickerhauser [4]の "エネルギー中心" 法を使用してシフトされます。係数のシフトは、信号内の特徴とウェーブレット係数の時間を揃えたい場合に便利です。

関数 imodwt を使用して信号を再構成する場合、または関数 modwtmra を使用して多重解像度解析を取得する場合は、係数をシフトしないでください。この場合、逆解析または多重解像度解析を取得する際に時間揃えが行われます。

データ型: logical

出力引数

すべて折りたたむ

x の MODWT 変換。w には、x のウェーブレット係数と最終レベルのスケーリング係数が格納されます。x がベクトルの場合、wlev+1 行 N 列の行列です。x が行列の場合、wlev+1×N×NC の配列です。ここで、NC は x の列数です。'reflection' 境界処理を指定しない限り、N は入力信号長に等しくなります。指定した場合、N は入力信号長の 2 倍になります。配列 w の k 番目の行には、スケール 2k (ウェーブレット スケール 2(k-1)) のウェーブレット係数が格納されます。最後の (lev+1) 番目の行には、スケール 2lev のスケーリング係数が格納されます。

アルゴリズム

MODWT の標準アルゴリズムは、時間領域で循環畳み込みを直接実装します。MODWT のこの実装は、フーリエ領域で循環畳み込みを実行します。レベル j のウェーブレット フィルター係数とスケーリング フィルター係数は、離散フーリエ変換 (DFT) の積の逆離散フーリエ変換を取得することにより計算されます。積の DFT は、信号の DFT と j 番目のレベルのウェーブレット フィルターまたはスケーリング フィルターの DFT です。

Hk と Gk は、それぞれ MODWT のウェーブレット フィルターとスケーリング フィルターに対する長さ N の DFT を表します。j はレベルを表し、N はサンプル サイズを表します。

j 番目のレベルのウェーブレット フィルターは、

1Nk=0N1Hj,kei2πnk/N

によって定義されます。ここで

Hj,k=H2j1kmodNm=0j2G2mkmodN

です。

j 番目のレベルのスケーリング フィルターは

1Nk=0N1Gj,kei2πnk/N

です。ここで

Gj,k=m=0j1G2mkmodN

です。

参照

[1] Percival, Donald B., and Andrew T. Walden. Wavelet Methods for Time Series Analysis. Cambridge Series in Statistical and Probabilistic Mathematics. Cambridge ; New York: Cambridge University Press, 2000.

[2] Percival, Donald B., and Harold O. Mofjeld. “Analysis of Subtidal Coastal Sea Level Fluctuations Using Wavelets.” Journal of the American Statistical Association 92, no. 439 (September 1997): 868–80. https://doi.org/10.1080/01621459.1997.10474042.

[3] Mesa, Hector. “Adapted Wavelets for Pattern Detection.” In Progress in Pattern Recognition, Image Analysis and Applications, edited by Alberto Sanfeliu and Manuel Lazo Cortés, 3773:933–44. Berlin, Heidelberg: Springer Berlin Heidelberg, 2005. https://doi.org/10.1007/11578079_96.

[4] Hess-Nielsen, N., and M.V. Wickerhauser. “Wavelets and Time-Frequency Analysis.” Proceedings of the IEEE 84, no. 4 (April 1996): 523–40. https://doi.org/10.1109/5.488698.

拡張機能

バージョン履歴

R2015b で導入