Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

連続ウェーブレット係数の解釈

CWT は冗長な変換であり、CWT 係数はウェーブレットに依存するため、結果を解釈するのは困難な場合があります。

CWT 係数を解釈しやすくするには、単純な信号の解析と単純な構造をもつ解析ウェーブレットから始めるのが最善です。

ウェーブレットが検出するのに非常に適している信号の特徴は、不連続点または特異点です。信号の急激な遷移は、大きい絶対値をもつウェーブレット係数になります。

信号に対して、シフトされたインパルスを作成します。インパルスは点 500 で発生します。

x = zeros(1000,1);
x(500) = 1;

ウェーブレットには Haar ウェーブレットを選択します。

[~,psi,xval] = wavefun('haar',10);
plot(xval,psi); axis([0 1 -1.5 1.5]);
title('Haar Wavelet');

Haar ウェーブレットを使用してスケール 1 から 128 の CWT を計算するには、次を入力します。

CWTcoeffs = cwt(x,1:128,'haar');

CWTcoeffs は 128 行 1000 列の行列です。行列の各列には 1 つのスケールに対する CWT 係数が含まれます。cwt への SCALES 入力は 1:128 であるため、128 行あります。行列の列の次元は入力信号の長さと一致します。

1 次元信号の CWT はスケール パラメーターと位置パラメーターの関数であることを思い出してください。CWT 係数のプロットを生成するには、x 軸に沿って位置をプロットし、y 軸に沿ってスケーリングして、CWT 係数の大きさまたはサイズを x-y の各点における色または時間-スケール平面として符号化します。

このプロットは cwt とオプションの入力引数 'plot' を使用して生成できます。

cwt(x,1:128,'haar','plot'); 
colormap jet; colorbar;

前の図は、大きい CWT 係数と小さい CWT 係数を示す色を明示的に表すテキスト ラベルで変更されました。

CWT 係数のサイズを次のように 3 次元でプロットすることもできます。

cwt(x,1:64,'haar','3Dplot'); colormap jet;
ここでは、可視化しやすくするため、スケールの数を減らしています。

シフトされたインパルス信号の CWT を調べると、一連の大きな CWT 係数が時間-スケール平面の狭い領域に点 500 を中心とした小さいスケールで集中していることがわかります。このスケールが増加すると、一連の大きい CWT 係数は広くなりますが、中心は点 500 のままです。この領域の境界線をトレースすると、次の図に似たものになります。

この領域は、Haar ウェーブレットの点 t=500 の "円錐状影響圏" と呼ばれます。与えられた点に対し、円錐状影響圏はその点において信号値から影響を受ける CWT 係数を示します。

円錐状影響圏を理解するために、[-C, C] でサポートされるウェーブレットがあると仮定します。ウェーブレットを b だけシフトし、a だけスケーリングすると、[-Ca+b, Ca+b] でサポートされるウェーブレットになります。シフトされたインパルスの単純なケース δ(tτ) では、各スケールでのウェーブレットのサポートと等しい τ の周囲の区間においてのみ、CWT 係数は非ゼロになります。このことは、シフトされたインパルスの CWT に対する形式的な表現を見るとわかります。

C(a,b;δ(tτ),ψ(t))=δ(tτ)1aψ*(tba)dt=1aψ*(τba)

インパルスについては、CWT 係数はシフト パラメーター b の関数として、共役が取られ、時間反転され、スケーリングされたウェーブレットに等しくなります。このことは、選択した少数のスケールに対して CWT 係数をプロットすると確認できます。

subplot(311)
plot(CWTcoeffs(10,:)); title('Scale 10');
subplot(312)
plot(CWTcoeffs(50,:)); title('Scale 50');
subplot(313)
plot(CWTcoeffs(90,:)); title('Scale 90');

円錐状影響圏はウェーブレットによって異なります。conofinf で特定のウェーブレットに対する円錐状影響圏を検出してプロットできます。

次の例は、2 つのシフトされたインパルス δ(t300)+δ(t500) の重ね合わせについて説明します。このケースでは、4 つの消失モーメント db4 をもつ Daubechies の極値位相ウェーブレットを使用します。次の図は、db4 ウェーブレットを使用した点 300 と 500 に対する円錐状影響圏を示しています。

スケール 20 の点 400 を見てみます。このスケールでは、どちらの円錐状影響圏も点 400 とオーバーラップしないことが確認できます。したがって、その点とスケールにおいて、CWT 係数はゼロになることが想定できます。信号は 300 と 500 の 2 つの値でのみ非ゼロであり、これらの値に対するどちらの円錐状影響圏にもスケール 20 の点 400 は含まれません。これは、次を入力して確認できます。

x = zeros(1000,1);
x([300 500]) = 1;
CWTcoeffs = cwt(x,1:128,'db4');
plot(CWTcoeffs(20,:)); grid on;

次に、スケール 80 の点 400 を見てみます。スケール 80 では、点 300 と点 500 の両方に対する円錐状影響圏に点 400 が含まれています。点 400 で信号がゼロであっても、そのスケールでは非ゼロの CWT 係数が得られます。CWT 係数が非ゼロなのは、ウェーブレットのサポートがそのスケールで十分大きくなっており、上下 100 点の信号値が CWT 係数に影響するためです。これは、次を入力して確認できます。

plot(CWTcoeffs(80,:));
grid on;

前述の例では、CWT 係数は信号の急激な変化の近傍で大きくなりました。不連続点を検出する機能は、ウェーブレット変換の強みです。前の例では、CWT 係数が小さいスケールで最も効果的に不連続点を局在化することも示しています。小さいスケールの場合、ウェーブレットのサポートが小さいことにより、特異点が影響を及ぼすのはウェーブレット係数の小規模なセットのみになります。

ウェーブレット変換が信号の急激な変化を検出するのに優れている理由を示すために、シフトされたへヴィサイドまたは単位ステップ信号を検討します。

x = [zeros(500,1); ones(500,1)];
CWTcoeffs = cwt(x,1:64,'haar','plot'); colormap jet;

シフトされたインパルスの例と同様に、シフトされたステップ関数における急激な遷移によって、不連続点では CWT 係数が大きくなります。次の図は、この発生理由を示しています。

前の図では、赤い関数がシフトされた単位ステップ関数です。A、B、C のラベルが付いた黒い関数は同じスケールで異なる位置の Haar ウェーブレットを示します。位置 A の周りの CWT 係数がゼロであることを確認できます。この近傍で信号はゼロです。したがって、すべてのウェーブレットはゼロに積分されるため、ウェーブレット変換もゼロになります。

Haar ウェーブレットは位置 B を中心としていることに注目します。Haar ウェーブレットの負の部分は 1 に等しいステップ関数の領域とオーバーラップします。Haar ウェーブレットと単位ステップの積が負の定数であるため、CWT 係数は負の値です。その領域を積分すると、負の数値が得られます。

Haar ウェーブレットは位置 C を中心としていることに注目します。ここで CWT 係数はゼロです。ステップ関数は 1 と等しくなります。ステップ関数を使用したウェーブレットの積はウェーブレットに等しくなります。任意のウェーブレットをそのサポートで積分するとゼロになります。これは、ウェーブレットのゼロ モーメントの性質です。

位置 B では、Haar ウェーブレットは既にステップ関数の非ゼロ部分にそのサポートの 1/2 だけシフトしています。ウェーブレットのサポートがステップ関数の単一の部分と交差するとすぐに、CWT 係数は非ゼロになります。実際、前の図に示した状況は最大の絶対値を達成する CWT 係数と一致します。これは、ウェーブレットの正の偏位ではそうならないのに対し、ウェーブレットの振動の負の偏位全体が単位ステップの単一の部分とオーバーラップするためです。正の偏位が単位ステップとオーバーラップする点にウェーブレットがシフトすると、積分にいくらかの正の寄与が発生します。ウェーブレット係数は依然として負の値 (積分の負の部分が領域としてはより大きい) ですが、絶対値としては位置 B で求めた係数より小さくなります。

次の図は、ウェーブレットが単位ステップの単一の部分と交差するその他 2 つの位置を示します。

上の図のウェーブレットは単位ステップの単一の部分とオーバーラップし始めています。このケースでは、CWT 係数は負の値ですが、絶対値としては位置 B で求めた値ほど大きくありません。下の図のウェーブレットは位置 B を超えてシフトし、ウェーブレットの正の偏位が積分に寄与し始めます。CWT 係数は依然として負の値ですが、絶対値としては位置 B で求めた値ほど大きくありません。

これで、ウェーブレット変換が不連続点を検出する方法を可視化できます。また、このシンプルな例で、CWT 係数が、Haar ウェーブレットを使用してシフトされた単位ステップの CWT 内で負である理由も厳密に可視化できます。この動作は、他のウェーブレットでは異なることに注意してください。

x = [zeros(500,1); ones(500,1)];
CWTcoeffs = cwt(x,1:64,'haar','plot'); colormap jet;
% plot a few scales for visualization
subplot(311);
plot(CWTcoeffs(5,:)); title('Scale 5');
subplot(312);
plot(CWTcoeffs(10,:)); title('Scale 10');
subplot(313);
plot(CWTcoeffs(50,:)); title('Scale 50');

次に、CWT が平滑化された信号を表現する方法について考慮します。正弦波振動は一般的な現象であるため、この節では、信号内の正弦波振動が CWT 係数にどのように影響するかについて調べます。最初に、ある正弦波に重ね合わされた特定のスケールの sym4 ウェーブレットについて考えます。

CWT 係数は、信号と、シフトされスケーリングされた解析ウェーブレットの積を計算し、結果を積分することで得られることを思い出してください。次の図は、ウェーブレットと前の図からの正弦波との積を示しています。

この積を積分すると、正の CWT 係数が生成されることがわかります。ウェーブレット内の振動が正弦波の周期とほぼ一致するため、この結果となります。ウェーブレットは正弦波と同相です。ウェーブレットの負の偏位は正弦波の負の偏位とほぼ一致します。ウェーブレットと正弦波の両方の正の偏位についても同様です。

次の図では、ウェーブレットを正弦波の周期の 1/2 シフトします。

シフトされたウェーブレットと正弦波との積を調べます。

この積を積分すると、負の CWT 係数が生成されることがわかります。ウェーブレットが正弦波と 1/2 サイクルずれているため、この結果となります。ウェーブレットの負の偏位は正弦波の正の偏位とほぼ一致します。ウェーブレットの正の偏位は正弦波の負の偏位とほぼ一致します。

最後に、ウェーブレットを正弦波のサイクルの約 4 分の 1 シフトします。

次の図は、シフトされたウェーブレットと正弦波との積を示しています。

この積を積分すると、絶対値では前の 2 つの例のどちらよりもはるかに小さい CWT 係数が生成されます。ウェーブレットの負の偏位は正弦波の正の偏位とほぼ揃っているため、この結果となります。また、ウェーブレットの主な正の偏位は正弦波の正の偏位とほぼ揃っています。結果の積は、他の 2 つの積よりもウェーブレットにずっと近くなります。もしウェーブレットとまったく同じになると、積分は 0 になるでしょう。

ウェーブレットの振動が正弦波の周期よりはるかに大きい、またははるかに小さいスケールで発生するスケールでは、0 に近い CWT 係数が得られます。次の図は、ウェーブレットが正弦波よりはるかに小さいスケールで振動する場合を示します。

下側のペインに示されている積は、解析ウェーブレットと非常に近くなっています。この積を積分すると、結果は 0 に近い CWT 係数となります。

次の例では、60 Hz の正弦波を作成し、sym8 ウェーブレットを使用して CWT を求めます。

t = linspace(0,1,1000);
x = cos(2*pi*60*t);
CWTcoeffs = cwt(x,1:64,'sym8','plot'); colormap jet;

CWT 係数はスケール 9 ~ 21 近辺で絶対値が大きくなることに注意してください。次のコマンドを使用して、これらのスケールに対応する疑似周波数を見つけることができます。

freq = scal2frq(9:21,'sym8',1/1000);

CWT 係数が正弦波の周波数に近いスケールでは大きいことに注意してください。これらのスケールでの CWT 係数の正弦波パターンを次のコードではっきりと確認できます。

surf(CWTcoeffs); colormap jet;
shading('interp'); view(-60,12);

最後の例では、急激な遷移と平滑化された振動の両方から構成される信号を作成します。信号は、2 つの不連続部分が生じている 2 Hz の正弦波です。

N = 1024;
t = linspace(0,1,1024);
x = 4*sin(4*pi*t);
x = x - sign(t - .3) - sign(.72 - t);
plot(t,x); xlabel('t'); ylabel('x');
grid on;

t=0.3 および t=0.7 の近くの不連続部分に注目します。

sym4 ウェーブレットを使用して CWT を求め、プロットします。

CWTcoeffs = cwt(x,1:180,'sym4');
imagesc(t,1:180,abs(CWTcoeffs)); 
colormap jet; axis xy;
xlabel('t'); ylabel('Scales');

CWT が信号内で急激な遷移と振動の両方を検出することに注意してください。急激な遷移はすべてのスケールで CWT 係数に影響し、小さいスケールでは平滑化された信号特性とは明らかに区別されます。一方、2 Hz の正弦波の最大値および最小値は、CWT 係数で大きいスケールでは明確で、小さいスケールでは明らかでありません。

CWT 係数を解釈するときには、次の一般的な原則を考慮することが重要です。

  • 円錐状影響圏 — スケールに応じて、ある点における CWT 係数は、大きく離れた点における信号の値によって影響を受けることがあります。特定のスケールにおけるウェーブレットのサポートを考慮しなければなりません。conofinf を使用して円錐状影響圏を決定します。すべてのウェーブレットのサポートが等しいとは限りません。たとえば、Haar ウェーブレットはすべてのスケールにおいて sym4 ウェーブレットより小さいサポートをもちます。

  • 急激な遷移の検出 — ウェーブレットは信号の急激な変化の検出に非常に有用です。信号の急激な変化は、すべてのスケールにおいて不連続点の周囲に (絶対値で) 比較的大きなウェーブレットを生成します。ウェーブレットのサポートのため、特異点によって影響を受ける一連の CWT 係数は、増大するスケールと共に増加します。これが円錐状影響圏の定義であることを思い出してください。CWT 係数に基づく不連続点の最も精度の高い位置推定は、最小のスケールで得られます。

  • 平滑化された信号特性の検出 — 平滑化された信号特性は、ウェーブレットの振動が信号特性と最もよく相関するスケールにおいて、比較的大きなウェーブレット係数を生成します。正弦波の振動では、CWT 係数は、ウェーブレットの振動が正弦波の周期に近似するスケールにおいて、1 つの振動パターンを示します。

連続ウェーブレット変換 (CWT) の標準アルゴリズムは次のとおりです。

  1. 1 つのウェーブレットを、元の信号の最初のセクションと比較します。

  2. C という、ウェーブレットがその信号のセクションとどれだけ近く相関するかを表す数値を計算します。C の絶対値の数値が大きいほど、相似性が高くなります。これは、CWT 係数が内積を使用して計算されるという事実に従います。内積で相似性を測定する方法の詳細については、内積 を参照してください。信号エネルギーおよびウェーブレット エネルギーが 1 に等しい場合、C は相関係数として解釈されます。一般に、信号エネルギーは 1 に等しくはなく、CWT 係数は直接相関係数として解釈されないことに注意してください。

    連続および離散ウェーブレット変換 で説明されているとおり、CWT 係数は明示的に解析ウェーブレットに基づきます。したがって、同じ信号について異なるウェーブレットを使用して計算すると CWT 係数は異なります。

  3. ウェーブレットを右にシフトし、信号全体をカバーするまでステップ 1 およびステップ 2 を繰り返します。

  4. ウェーブレットをスケーリング (伸長) し、ステップ 1 ~ 3 を繰り返します。

  5. すべてのスケールについてステップ 1 ~ 4 を繰り返します。