Main Content

wt

フィルター バンクによる連続ウェーブレット変換

説明

cfs = wt(fb,x) は、連続ウェーブレット変換 (CWT) フィルター バンクである fb を使用して、信号 x の CWT 係数を返します。x は、実数値または複素数値のベクトルです。x は少なくとも 4 つのサンプルをもたなければなりません。x が実数値の場合、cfs は各行が 1 つのスケールに対応する 2 次元行列です。cfs の列サイズは x の長さと等しくなります。x が複素数値の場合、cfs は 3 次元配列です。1 ページ目が正のスケール (解析的な部分または反時計回りの成分) の CWT で、2 ページ目が負のスケール (反解析的な部分または時計回りの成分) の CWT になります。

[cfs,f] = wt(fb,x) は、SamplingPeriod プロパティが CWT フィルター バンク fb で指定されていない場合、cfs のスケール (行) に対応する周波数 f を返します。サンプリング周波数を指定しない場合、f の単位はサイクル/サンプルです。

[cfs,f,coi] = wt(fb,x) は、CWT の円錐状影響圏 coi を返します。coi の単位は f と同じです。入力 x が複素数の場合、cfs の両方のページに coi が適用されます。

[cfs,f,coi,scalcfs] = wt(fb,x) は、ウェーブレット変換のスケーリング係数 scalcfs を返します。

[cfs,p] = wt(fb,x) は、CWT フィルター バンクでサンプリング周期を指定した場合、cfs のスケール (行) に対応する周期 p を返します。p の単位と形式は、duration スカラーのサンプリング周期と同じです。

[cfs,p,coi] = wt(fb,x) は、CWT の周期で円錐状影響圏 coi を返します。coi は、サンプリング周期と同じ書式プロパティをもつ duration の配列です。入力 x が複素数の場合、cfs の両方のページに coi が適用されます。

[cfs,p,coi,scalcfs] = wt(fb,x) は、ウェーブレット変換のスケーリング係数 scalcfs を返します。

すべて折りたたむ

ノイズがある Doppler 信号を読み込みます。信号に適用できる CWT フィルター バンクを作成します。

load noisdopp
fb = cwtfilterbank('SignalLength',numel(noisdopp));

フィルター バンクを使用して、信号の連続ウェーブレット変換を求めます。

[cfs,f,coi] = wt(fb,noisdopp);

円錐状影響圏を含む CWT スカログラムをプロットします。

t = 0:numel(noisdopp)-1;
pcolor(t,f,abs(cfs))
shading flat
set(gca,'YScale','log')
hold on
plot(t,coi,'w-','LineWidth',3)
xlabel('Time (Samples)')
ylabel('Normalized Frequency (cycles/sample)')
title('Scalogram')

Figure contains an axes object. The axes object with title Scalogram contains 2 objects of type surface, line.

1000 Hz でサンプリングされた信号を作成してプロットします。信号に使用できる CWT フィルター バンクを作成します。信号は周期的であるため、フィルター バンクの境界拡張プロパティを 'periodic' に設定します。

Fs = 1000;
t = 0:1/Fs:1-1/Fs;
sig = 3*sin(2*pi*20*t) + cos(2*pi*2*t);
fb = cwtfilterbank('SignalLength',length(sig),...
    'SamplingFrequency',Fs,...
    'Boundary','periodic');
plot(t,sig)
xlabel('Time (sec)')
title('Signal')

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

信号の CWT を取得します。ウェーブレット係数とスケーリング係数を返します。

[cfs,~,~,scalcfs] = wt(fb,sig);

信号を 2 つの方法で再構成します。まず信号の平均を使用してから、スケーリング係数を使用します。元の信号と再構成した両方の信号の差分をプロットします。

xrec0 = icwt(cfs,'SignalMean',mean(sig));
xrec1 = icwt(cfs,'ScalingCoefficients',scalcfs);
plot(t,sig-xrec0)
hold on
plot(t,sig-xrec1)
grid on
legend('Using mean(sig)','Using scalcfs')
title('Difference Between Reconstructions')

Figure contains an axes object. The axes object with title Difference Between Reconstructions contains 2 objects of type line. These objects represent Using mean(sig), Using scalcfs.

スケーリング係数により、再構成の正確性が大幅に向上します。劇的に改善した原因を調査するには、元の信号の 2 Hz 成分で構成される 2 番目の信号を作成します。スケーリング係数を 2 Hz の信号と比較します。スケーリング係数と 2 Hz の信号は実質的に同じです。2 Hz の成分はこのサンプリング周波数とサンプリング長のウェーブレットでは表現できないため、スケーリング係数の使用が再構成に役立ちます。

figure
sig2hz = cos(2*pi*2*t);
plot(t,sig2hz)
hold on
plot(t,scalcfs)
grid on
title('Comparing Scaling Coefficients with 2 Hz Component')
xlabel('Time (sec)')
legend('2 Hz Component', 'Scaling Coefficients')

Figure contains an axes object. The axes object with title Comparing Scaling Coefficients with 2 Hz Component contains 2 objects of type line. These objects represent 2 Hz Component, Scaling Coefficients.

この例では、CWT フィルター バンクを使用することで、複数の時系列の CWT を取得する場合の計算効率がどのように高まる可能性があるかを示します。

100 行 1024 列の行列 x を作成します。1024 個のサンプルをもつ信号に適した CWT フィルター バンクを作成します。

x = randn(100,1024);
fb = cwtfilterbank;

既定の設定で cwt を使用して、1024 個のサンプルをもつ信号の CWT を取得します。100 個の信号の CWT 係数を格納できる 3 次元配列を作成します。各信号には、1,024 個のサンプルがあります。

cfs = cwt(x(1,:));
res = zeros(100,size(cfs,1),size(cfs,2));

関数 cwt を使用して、行列 x の各行の CWT を取得します。経過時間を表示します。

tic
for k=1:100
    res(k,:,:) = cwt(x(k,:));
end
toc
Elapsed time is 0.928160 seconds.

次に、フィルター バンクのオブジェクト関数 wt を使用して、x の各行の CWT を取得します。経過時間を表示します。

tic
for k=1:100
    res(k,:,:) = wt(fb,x(k,:));
end
toc
Elapsed time is 0.393524 seconds.

入力引数

すべて折りたたむ

連続ウェーブレット変換 (CWT) フィルター バンク。cwtfilterbank オブジェクトとして指定します。

入力信号。実数値または複素数値のベクトルとして指定します。x は少なくとも 4 つのサンプルをもたなければなりません。

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

出力引数

すべて折りたたむ

連続ウェーブレット変換。複素数値の行列または 3 次元配列として返されます。x が実数値の場合、cfs は各行が 1 つのスケールに対応する 2 次元行列です。cfs の列サイズは x の長さと等しくなります。x が複素数値の場合、cfs は 3 次元配列です。1 ページ目が正のスケール (解析的な部分または反時計回りの成分) の CWT で、2 ページ目が負のスケール (反解析的な部分または時計回りの成分) の CWT になります。

データ型: double | single

周波数。'SamplingPeriod'fb で指定されていない場合、cfs のスケール (行) に対応するベクトルとして返されます。サンプリング周波数を指定した場合、f の単位はヘルツです。周波数を指定しない場合、f の単位はサイクル/サンプルです。

データ型: double

周期。fb にサンプリング周期が指定されている場合、cfs のスケール (行) に対応する duration の配列として返されます。p の単位と形式は、duration スカラーのサンプリング周期と同じです。

データ型: duration

CWT の円錐状影響圏。実数の配列または duration の配列のいずれかとして返されます。円錐状影響圏は、CWT でエッジの影響が現れる箇所を示します。サンプリング周波数を指定した場合、coif と同じ単位の実数の配列になります。サンプリング周期を指定した場合、coi はサンプリング周期と同じ書式プロパティをもつ duration の配列になります。エッジの影響により、円錐状影響圏の外側やそれと重なる領域は信頼性が低くなります。

詳細は、Boundary Effects and the Cone of Influenceを参照してください。

データ型: double | duration

ウェーブレット変換のスケーリング係数。x と同じ長さをもつベクトルとして返されます。x が実数値の場合、scalcfs は実数値です。x が複素数値の場合、scalcfs は複素数値です。

データ型: double

ヒント

  • フィルター バンクを使用して信号の CWT を初めて実行する場合、信号と同じデータ型をもつようにウェーブレット フィルターが作成されます。同じフィルター バンクを異なるデータ型の信号に適用すると、警告メッセージが生成されます。データ型を変更すると、フィルター バンクの精度を再設計または変更するためのコストが発生することになります。最適なパフォーマンスを得るには、一貫したデータ型を使用してください。

  • 複数の CWT を実行する場合 (for ループ内など)、まず cwtfilterbank オブジェクトを作成してから、オブジェクト関数 wt を使用するワークフローを推奨します。このワークフローにより、オーバーヘッドを最小限に抑え、パフォーマンスを最大限に向上することができます。複数の時系列での CWT フィルター バンクの使用を参照してください。

拡張機能

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

バージョン履歴

R2018a で導入