Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

cwtfilterbank

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

説明

cwtfilterbank を使用して、連続ウェーブレット変換 (CWT) フィルター バンクを作成します。フィルター バンクで使用される既定のウェーブレットは、解析 Morse (3,60) ウェーブレットです。Morse ウェーブレットの時間-帯域幅パラメーターと対称性パラメーターを変更して、Morse ウェーブレットをニーズに合わせて調整できます。解析 Morlet (ガボール) ウェーブレットまたは Bump ウェーブレットを使用することもできます。時間-周波数で複数の信号を解析する場合、計算効率を向上させるために、フィルターを一度事前に計算してから、cwt への入力としてフィルター バンクを渡すことができます。フィルター バンクを使用して、ウェーブレットを時間と周波数で可視化できます。特定の周波数や周期の範囲を使用するフィルター バンクを作成し、3 dB の帯域幅を測定することもできます。フィルター バンクのウェーブレットの品質係数を決定できます。

作成

説明

fb = cwtfilterbank は、連続ウェーブレット変換 (CWT) フィルター バンク fb を作成します。フィルターは、すべての通過帯域のピーク振幅がほぼ 2 に等しくなるように正規化されます。既定のフィルター バンクは、1,024 サンプルの信号用に設計されています。既定のフィルター バンクは、解析 Morse (3,60) ウェーブレットを使用します。フィルター バンクは、既定のスケールとして、オクターブあたり約 10 個のウェーブレット バンドパス フィルター (オクターブあたり 10 個の音) を使用します。最も高い周波数の通過帯域は、振幅がナイキスト周波数におけるピーク値の半分に立ち下がるように設計されています。

実装に従い、CWT は L1 正規化を使用します。L1 正規化により、異なるスケールの等振幅の振動成分が CWT では同じ大きさになります。L1 正規化では信号の表現の精度が高くなります。振動成分の振幅は、対応するウェーブレット係数の振幅と同じになります。正弦波とウェーブレット係数の振幅を参照してください。

fbcwt の入力として使用できます。

fb = cwtfilterbank(Name=Value) は、名前と値の引数を 1 つ以上使用するプロパティをもつ CWT フィルター バンク fb を作成します。プロパティは、Name1=Value1,...,NameN=ValueN のように任意の順序で指定できます。

メモ

既存のフィルター バンクのプロパティ値を変更することはできません。たとえば、SignalLength が 2,000 であるフィルター バンク fb がある場合、2,001 サンプルの信号を処理するには 2 番目のフィルター バンク fb2 を作成しなければなりません。fb に異なる SignalLength を割り当てることはできません。

プロパティ

すべて展開する

信号の長さ。正の整数として指定します。信号は少なくとも 4 つのサンプルをもたなければなりません。

例: fb = cwtfilterbank(SignalLength=1700)

データ型: double

フィルター バンクで使用される解析ウェーブレット。"Morse""amor"、または "bump" として指定します。これらの文字列は、それぞれ Morse、Morlet (ガボール)、および Bump の解析ウェーブレットを示します。既定のウェーブレットは、解析 Morse (3,60) ウェーブレットです。

既定では、Morse ウェーブレットの場合、周波数応答はナイキストでのピーク振幅の 50% に減衰します。Morlet ウェーブレットと Bump ウェーブレットの場合、周波数応答はピーク振幅の 10% に減衰します。フィルター バンクの FrequencyLimits プロパティを設定することで、減衰率を変更できます。cwtfreqbounds を参照してください。

Morse ウェーブレットの場合、TimeBandwidth プロパティまたは WaveletParameters プロパティを使用してウェーブレットをパラメーター化することもできます。

例: fb = cwtfilterbank(SignalLength=1700,wavelet="bump")

CWT に使用するオクターブあたりの音の数。1 ~ 48 の整数として指定します。指定したオクターブあたりの音の数を使用して CWT のスケールが離散化されます。ウェーブレットの周波数と時間のエネルギーの広がりは、最小スケールと最大スケールによって自動的に決まります。

cwtfreqbounds を使用して、ウェーブレット フィルター バンクの周波数範囲を決定できます。周波数範囲は、ウェーブレットのエネルギーの広がり、オクターブあたりの音の数、信号長、サンプリング周波数などのパラメーターによって異なります。

データ型: single | double

ヘルツ単位のサンプリング周波数。正のスカラーとして指定します。指定されていない場合、周波数の単位はサイクル/サンプル、ナイキスト周波数は ½ となります。周期でのスケールを指定するには、SamplingPeriodPeriodLimits の名前と値の引数を使用します。

SamplingFrequency プロパティと SamplingPeriod プロパティの両方を指定することはできません。

例: fb = cwtfilterbank(SamplingFrequency=5,wavelet="amor")

データ型: single | double

ウェーブレット フィルター バンクの周波数の範囲。厳密に増加する正のエントリをもつ 2 要素ベクトルとして指定します。

  • 最初の要素は最も低いピーク通過帯域周波数を示します。周波数は、ウェーブレットのピーク周波数 (ヘルツ単位) と 2 つの時間の標準偏差の積を信号長で除算した値以上でなければなりません。

  • 2 番目の要素は最も高いピーク通過帯域周波数を示します。周波数の上限はナイキスト以下でなければなりません。

  • 周波数の下限 fMin に対する周波数の上限 fMax の比の基底 2 の対数は 1/NV 以上でなければなりません。ここで NV はオクターブあたりの音の数です。

    log2(fMax/fMin) ≥ 1/NV.

許容される範囲外の周波数範囲を指定した場合、cwtfilterbank では最小値と最大値まで範囲が切り詰められます。ウェーブレット変換の各種のパラメーター表現の周波数範囲を特定するには、cwtfreqbounds を使用します。

フィルター バンクでサンプリング周期を使用する場合、FrequencyLimits プロパティを指定することはできません。

例: fb = cwtfilterbank(SignalLength=1000,SamplingFrequency=1000,FrequencyLimits=[90 100]) の場合は、log2(100/90) ≥ 1/fb.VoicesPerOctave となります。

データ型: double

サンプリング周期。duration スカラーとして指定します。SamplingFrequency プロパティと SamplingPeriod プロパティの両方を指定することはできません。

例: fb = cwtfilterbank(SamplingPeriod=seconds(0.5))

データ型: duration

ウェーブレット フィルター バンクの周期の範囲。厳密に増加する正のエントリをもつ 2 要素 duration 配列として指定します。

  • PeriodLimits の最初の要素は、最大のピーク通過帯域周波数を示し、SamplingPeriod の 2 倍以上でなければなりません。

  • 最大周期は、ウェーブレットの 2 つの時間の標準偏差とウェーブレットのピーク周波数の積で信号長を除算した値を超えることはできません。

  • 最大周期 maxP に対する最小周期 minP の比の基底 2 の対数は -1/NV 以下でなければなりません。ここで NV はオクターブあたりの音の数です。

    log2(minP/maxP) ≤ -1/NV.

許容される範囲外の周期範囲を指定した場合、cwtfilterbank では最小値と最大値まで範囲が切り詰められます。ウェーブレット変換の各種のパラメーター表現の周期範囲を求めるには、cwtfreqbounds を使用します。

フィルター バンクでサンプリング周波数を使用している場合、PeriodLimits プロパティを指定することはできません。

例: fb = cwtfilterbank(SignalLength=1000,SamplingPeriod=seconds(0.1),PeriodLimits=[seconds(0.2) seconds(3)]) の場合は、log2(0.2/3) ≤ -1/fb.VoicesPerOctave となります。

データ型: duration

Morse ウェーブレットの時間-帯域積。3 以上 120 以下の正のスカラーとして指定します。Morse ウェーブレットの対称性 (ガンマ) は 3 に固定されています。このプロパティは、Wavelet"Morse" の場合にのみ有効です。

時間-帯域積が大きいほど、ウェーブレットの時間的広がりが大きくなり、ウェーブレットの周波数が狭くなります。Morse ウェーブレットの時間の標準偏差は約 sqrt(TimeBandwidth/2) です。周波数の標準偏差は約 1/2 × sqrt(2/TimeBandwidth) です。一般化 Morse と解析 Morlet ウェーブレットを参照してください。

TimeBandwidth プロパティと WaveletParameters プロパティの両方を指定することはできません。

Morse ウェーブレット の表記法では、TimeBandwidth は P2 です。

例: 'TimeBandwidth',20

データ型: double

Morse ウェーブレット パラメーター。2 要素ベクトルとして指定します。最初の要素は対称性パラメーター (γ) で、1 以上でなければなりません。2 番目の要素は時間-帯域積で、ガンマ以上でなければなりません。γ に対する時間-帯域積の比が 40 を超えることはできません。

γ が 3 に等しい場合、Morse ウェーブレットは周波数領域において完全に対称です。この歪度は 0 と等しくなります。ガンマの値が 3 より大きい場合は歪度が正になり、ガンマの値が 3 より小さい場合は歪度が負になります。

詳細については、Morse ウェーブレットを参照してください。

WaveletParametersTimeBandwidth の両方の名前と値の引数を指定することはできません。

例: fb = cwtfilterbank(WaveletParameters=[4,20])

信号の境界拡張。"reflection""periodic" のいずれかとして指定します。境界でのデータの扱い方を決定します。

メモ

デュアル フレームまたは近似合成フィルターを使用して CWT を反転する場合は、Boundary"periodic" に設定します。

例: fb = cwtfilterbank(Boundary="periodic")

オブジェクト関数

wtフィルター バンクによる連続ウェーブレット変換
freqzCWT filter bank frequency responses
timeSpectrumTime-averaged wavelet spectrum
scaleSpectrumScale-averaged wavelet spectrum
waveletsCWT フィルター バンク時間領域ウェーブレット
scalesCWT filter bank scales
waveletsupportCWT filter bank time supports
qfactorCWT フィルター バンクの品質係数
powerbwCWT filter bank 3 dB bandwidths
centerFrequenciesCWT filter bank bandpass center frequencies
centerPeriodsCWT filter bank bandpass center periods

すべて折りたたむ

連続ウェーブレット変換フィルター バンクを作成します。

fb = cwtfilterbank
fb = 
  cwtfilterbank with properties:

      VoicesPerOctave: 10
              Wavelet: "Morse"
    SamplingFrequency: 1
       SamplingPeriod: []
         PeriodLimits: []
         SignalLength: 1024
      FrequencyLimits: []
        TimeBandwidth: 60
    WaveletParameters: []
             Boundary: "reflection"

振幅周波数応答をプロットします。

freqz(fb)

Figure contains an axes object. The axes object with title CWT Filter Bank, xlabel Normalized Frequency (cycles/sample), ylabel Magnitude contains 71 objects of type line.

周波数が 16 Hz と 64 Hz の 2 つの正弦波を作成します。データは 1000 Hz でサンプリングされます。信号をプロットします。

Fs = 1e3;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*64*t).*(t>=0.1 & t<0.3)+ ...
    sin(2*pi*16*t).*(t>=0.5 & t<0.9);
plot(t,x)
title("Signal")
xlabel("Time (s)")
ylabel("Amplitude")

Figure contains an axes object. The axes object with title Signal, xlabel Time (s), ylabel Amplitude contains an object of type line.

信号用の CWT フィルター バンクを作成します。フィルター バンクのウェーブレットの周波数応答をプロットします。

fb = cwtfilterbank(SignalLength=numel(t),SamplingFrequency=Fs);
figure
freqz(fb)
title("Frequency Responses — Morse (3,60) Wavelet")

Figure contains an axes object. The axes object with title Frequency Responses — Morse (3,60) Wavelet, xlabel Frequency (Hz), ylabel Magnitude contains 71 objects of type line.

解析 Morse (3,60) ウェーブレットは、フィルター バンクの既定のウェーブレットです。ウェーブレットは 60 に等しい時間-帯域積をもちます。最初のフィルター バンクと同じ 2 番目のフィルター バンクを作成しますが、代わりに解析 Morse (3,5) ウェーブレットを使用します。2 番目のフィルター バンクのウェーブレットの周波数応答をプロットします。

fb3x5 = cwtfilterbank(SignalLength=numel(t),SamplingFrequency=Fs,...
    TimeBandwidth=5);
figure
freqz(fb3x5)
title("Frequency Responses — Morse (3,5) Wavelet")

Figure contains an axes object. The axes object with title Frequency Responses — Morse (3,5) Wavelet, xlabel Frequency (Hz), ylabel Magnitude contains 96 objects of type line.

周波数応答の幅が最初のフィルター バンクよりも広いことを確認します。Morlet (3,60) ウェーブレットは、Morse (3,5) ウェーブレットよりも周波数に局在化しています。各フィルター バンクを信号に適用し、結果のスカログラムをプロットします。Morse (3,60) ウェーブレットが Morse (3,5) ウェーブレットよりも優れた周波数分解能を示すことを確認します。

figure
cwt(x,FilterBank=fb)
title("Magnitude Scalogram — Morse (3,60)")

Figure contains an axes object. The axes object with title Magnitude Scalogram — Morse (3,60), xlabel Time (ms), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

figure
cwt(x,FilterBank=fb3x5)
title("Magnitude Scalogram — Morse (3,5)")

Figure contains an axes object. The axes object with title Magnitude Scalogram — Morse (3,5), xlabel Time (ms), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

この例では、信号の振動成分の振幅が対応するウェーブレット係数の振幅と一致することを示します。

時間のサポートが互いに素である 2 つの正弦波で構成される信号を作成します。一方の正弦波は周波数が 32 Hz で振幅は 1 です。もう一方の正弦波は周波数が 64 Hz で振幅は 2 です。この信号を 1000 Hz で 1 秒間サンプリングします。信号をプロットします。

frq1 = 32;
amp1 = 1;
frq2 = 64;
amp2 = 2;

Fs = 1e3;
t = 0:1/Fs:1;
x = amp1*sin(2*pi*frq1*t).*(t>=0.1 & t<0.3)+... 
    amp2*sin(2*pi*frq2*t).*(t>0.6 & t<0.9);

plot(t,x)
grid on
xlabel("Time (sec)")
ylabel("Amplitude")
title("Signal")

Figure contains an axes object. The axes object with title Signal, xlabel Time (sec), ylabel Amplitude contains an object of type line.

信号に適用できる CWT フィルター バンクを作成します。信号の成分の周波数がわかっているため、フィルター バンクの周波数範囲をそれらの周波数を含む狭い範囲に設定します。範囲を確認するには、フィルター バンクの振幅周波数応答をプロットします。

fb = cwtfilterbank(SignalLength=numel(x),SamplingFrequency=Fs,...
    FrequencyLimits=[20 100]);
freqz(fb)

Figure contains an axes object. The axes object with title CWT Filter Bank, xlabel Frequency (Hz), ylabel Magnitude contains 24 objects of type line.

cwt とフィルター バンクを使用して信号のスカログラムをプロットします。

cwt(x,FilterBank=fb)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (secs), ylabel Frequency (Hz) contains 3 objects of type image, line, area.

データ カーソルを使用して、ウェーブレット係数の振幅が正弦波成分の振幅と基本的に等しいことを確認します。結果は次の Figure のようになるはずです。

この例では、一般化 Morse ウェーブレットの時間-帯域幅パラメーターを変更して、解析 Morlet ウェーブレットを近似する方法を示します。

一般化 Morse ウェーブレットは、厳密な解析ウェーブレットのファミリです。Morse ウェーブレットには対称性と時間-帯域積の 2 つのパラメーターがあります。これらのパラメーターを変更して、さまざまなプロパティや動作を使用した解析ウェーブレットを取得できます。詳細については、Morse ウェーブレットおよびその中の参考文献を参照してください。

1995 年の阪神淡路大震災の発生時に記録された地震計データを読み込みます。このデータは、オーストラリアのホバートにあるタスマニア大学の地震計で 1995 年 1 月 16 日 20:56:51 (GMT) から 51 分間にわたって 1 秒間隔で記録された測定値 (垂直加速度、nm/sq.sec) です。データに適用できる既定の設定を使用して CWT フィルター バンクを作成します。フィルター バンクを使用して、スカログラムを生成します。

load kobe
fb = cwtfilterbank(SignalLength=numel(kobe),SamplingFrequency=1);
cwt(kobe,FilterBank=fb)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (mins), ylabel Frequency (mHz) contains 3 objects of type image, line, area.

ウェーブレット係数の振幅は、10 mHz から 100 mHz の周波数範囲で大きくなっています。周波数の範囲をこれらの値に設定して、新しいフィルター バンクを作成します。スカログラムを生成します。

fb2 = cwtfilterbank(SignalLength=numel(kobe),SamplingFrequency=1,...
    FrequencyLimits=[1e-2 1e-1]);
cwt(kobe,FilterBank=fb2)
title("Default Morse (3,60) Wavelet")

Figure contains an axes object. The axes object with title Default Morse (3,60) Wavelet, xlabel Time (mins), ylabel Frequency (mHz) contains 3 objects of type image, line, area.

既定では、cwtfilterbank は Morse (3,60) ウェーブレットを使用します。同じ周波数範囲で解析 Morlet ウェーブレットを使用してフィルター バンクを作成します。スカログラムを生成し、Morse (3,60) ウェーブレットによって生成されたスカログラムと比較します。

fbMorlet = cwtfilterbank(SignalLength=numel(kobe),SamplingFrequency=1,...
    FrequencyLimits=[1e-2 1e-1],...
    Wavelet="amor");
cwt(kobe,FilterBank=fbMorlet)
title("Analytic Morlet Wavelet")

Figure contains an axes object. The axes object with title Analytic Morlet Wavelet, xlabel Time (mins), ylabel Frequency (mHz) contains 3 objects of type image, line, area.

Morlet ウェーブレットは、(3,60) Morse ウェーブレットほど周波数に局在化していません。ただし、時間-帯域積を変更することにより、Morlet ウェーブレットと同様のプロパティをもつ Morse ウェーブレットを作成できます。

上記の周波数範囲を使用し、時間-帯域幅の値が 30 [2]の Morse ウェーブレットを使用してフィルター バンクを作成します。地震計データのスカログラムを生成します。Morlet の結果とほぼ同じ周波数で不鮮明さが見られることに注意してください。

fbMorse = cwtfilterbank(SignalLength=numel(kobe),SamplingFrequency=1,...
    FrequencyLimits=[1e-2 1e-1],...
    TimeBandwidth=30);
cwt(kobe,FilterBank=fbMorse)
title("Morse (3,30)")

Figure contains an axes object. The axes object with title Morse (3,30), xlabel Time (mins), ylabel Frequency (mHz) contains 3 objects of type image, line, area.

次に、fbMorlet および fbMorse フィルター バンクに関連付けられたウェーブレットを調べます。両方のフィルター バンクから、ウェーブレット中心周波数、フィルター周波数応答、および時間領域ウェーブレットを取得します。中心周波数がほぼ同じであることを確認します。

cfMorlet = centerFrequencies(fbMorlet);
[frMorlet,fMorlet] = freqz(fbMorlet);
[wvMorlet,tMorlet] = wavelets(fbMorlet);
cfMorse = centerFrequencies(fbMorse);
[frMorse,fMorse] = freqz(fbMorse);
[wvMorse,tMorse] = wavelets(fbMorse);

disp(["Number of Center Frequencies: ",num2str(length(cfMorlet))]);
    "Number of Center Frequencies: "    "34"
disp(["Maximum difference: ",num2str(max(abs(cfMorlet-cfMorse)))]);
    "Maximum difference: "    "2.7756e-17"

各フィルター バンクには、同じ数のウェーブレットが含まれています。中心周波数を選択し、各フィルター バンクから関連するフィルターの周波数応答をプロットします。応答がほぼ同一であることを確認します。

wv = 13;
figure
plot(fMorlet,frMorlet(wv,:));
hold on
plot(fMorse,frMorse(wv,:));
grid on
hold off
title("Frequency Response")
xlabel("Frequency")
ylabel("Amplitude")
legend("Morlet","Morse (3,30)")

Figure contains an axes object. The axes object with title Frequency Response, xlabel Frequency, ylabel Amplitude contains 2 objects of type line. These objects represent Morlet, Morse (3,30).

同じ中心周波数に関連付けられた時間領域ウェーブレットをプロットします。それらがほぼ同一であることを確認します。

figure
subplot(2,1,1)
plot(tMorlet,real(wvMorlet(wv,:)))
hold on
plot(tMorse,real(wvMorse(wv,:)))
grid on
hold off
title("Real")
legend("Morlet","Morse (3,30)")
xlim([-100 100])
subplot(2,1,2)
plot(tMorlet,imag(wvMorlet(wv,:)))
hold on
plot(tMorse,imag(wvMorse(wv,:)))
grid on
hold off
title("Imaginary")
legend("Morlet","Morse (3,30)")
xlim([-100 100])

Figure contains 2 axes objects. Axes object 1 with title Real contains 2 objects of type line. These objects represent Morlet, Morse (3,30). Axes object 2 with title Imaginary contains 2 objects of type line. These objects represent Morlet, Morse (3,30).

この例では、Morse ウェーブレットの時間-帯域積 P2 が大きくなるとウェーブレットの包絡線下部の振動が増えることを示します。P2 が大きくなると、ウェーブレットの周波数が狭まります。

2 つのフィルター バンクを作成します。1 つ目のフィルター バンクの TimeBandwidth の値は既定の 60 です。2 つ目のフィルター バンクの TimeBandwidth の値は 10 です。SignalLength はどちらのフィルター バンクも 4096 サンプルです。

sigLen = 4096;
fb60 = cwtfilterbank(SignalLength=sigLen);
fb10 = cwtfilterbank(SignalLength=sigLen,TimeBandwidth=10);

フィルター バンクの時間領域のウェーブレットを求めます。

[psi60,t] = wavelets(fb60);
[psi10,~] = wavelets(fb10);

関数 scales を使用して各フィルター バンクのマザー ウェーブレットを検出します。

sca60 = scales(fb60);
sca10 = scales(fb10);
[~,idx60] = min(abs(sca60-1));
[~,idx10] = min(abs(sca10-1));
m60 = psi60(idx60,:);
m10 = psi10(idx10,:);

fb60 フィルター バンクの方が時間-帯域積が大きいため、m60 ウェーブレットの方が m10 ウェーブレットよりも包絡線の下の振動が多いことを確認します。

subplot(2,1,1)
plot(t,abs(m60))
grid on
hold on
plot(t,real(m60))
plot(t,imag(m60))
hold off
xlim([-30 30])
legend("abs(m60)","real(m60)","imag(m60)")
title("TimeBandwidth = 60")
subplot(2,1,2)
plot(t,abs(m10))
grid on
hold on
plot(t,real(m10))
plot(t,imag(m10))
hold off
xlim([-30 30])
legend("abs(m10)","real(m10)","imag(m10)")
title("TimeBandwidth = 10")

Figure contains 2 axes objects. Axes object 1 with title TimeBandwidth = 60 contains 3 objects of type line. These objects represent abs(m60), real(m60), imag(m60). Axes object 2 with title TimeBandwidth = 10 contains 3 objects of type line. These objects represent abs(m10), real(m10), imag(m10).

m60m10 の振幅周波数応答のピークを揃えます。m60 ウェーブレットの周波数応答が m10 ウェーブレットの周波数応答よりも狭いことを確認します。

cf60 = centerFrequencies(fb60);
cf10 = centerFrequencies(fb10);

m60cFreq = cf60(idx60);
m10cFreq = cf10(idx10);

freqShift = 2*pi*(m60cFreq-m10cFreq);
x10 = m10.*exp(1j*freqShift*(-sigLen/2:sigLen/2-1));

figure
plot([abs(fft(m60)).' abs(fft(x10)).'])
grid on
legend("Time-bandwidth = 60","Time-bandwidth = 10")
title("Magnitude Frequency Responses")

Figure contains an axes object. The axes object with title Magnitude Frequency Responses contains 2 objects of type line. These objects represent Time-bandwidth = 60, Time-bandwidth = 10.

この例では、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 のスカログラムを Figure のサブプロットにプロットする方法を示します。

音声サンプルを読み込みます。データは 7418 Hz でサンプリングされます。CWT の既定のスカログラムをプロットします。

load mtlb
cwt(mtlb,Fs)

Figure contains an axes object. The axes object with title Magnitude Scalogram, xlabel Time (ms), ylabel Frequency (kHz) contains 3 objects of type image, line, area.

信号の連続ウェーブレット変換と CWT の周波数を求めます。

[cfs,frq] = cwt(mtlb,Fs);

関数 cwt により、時間と周波数の座標軸がスカログラムで設定されます。サンプル時間を表すベクトルを作成します。

tms = (0:numel(mtlb)-1)/Fs;

新しい Figure で、元の信号を上のサブプロットにプロットし、スカログラムを下のサブプロットにプロットします。対数スケールで周波数をプロットします。

figure
subplot(2,1,1)
plot(tms,mtlb)
axis tight
title("Signal and Scalogram")
xlabel("Time (s)")
ylabel("Amplitude")
subplot(2,1,2)
surface(tms,frq,abs(cfs))
axis tight
shading flat
xlabel("Time (s)")
ylabel("Frequency (Hz)")
set(gca,"yscale","log")

Figure contains 2 axes objects. Axes object 1 with title Signal and Scalogram, xlabel Time (s), ylabel Amplitude contains an object of type line. Axes object 2 with xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

ヒント

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

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

参照

[1] Lilly, J. M., and S. C. Olhede. “Generalized Morse Wavelets as a Superfamily of Analytic Wavelets.” IEEE Transactions on Signal Processing. Vol. 60, No. 11, 2012, pp. 6036–6041.

[2] Lilly, J. M., and S. C. Olhede. “Higher-Order Properties of Analytic Wavelets.” IEEE Transactions on Signal Processing. Vol. 57, No. 1, 2009, pp. 146–160.

[3] Lilly, J. M. jLab: A data analysis package for MATLAB®, version 1.6.2. 2016. http://www.jmlilly.net/jmlsoft.html.

[4] Lilly, J. M. “Element analysis: a wavelet-based method for analysing time-localized events in noisy time series.” Proceedings of the Royal Society A. Volume 473: 20160776, 2017, pp. 1–28. dx.doi.org/10.1098/rspa.2016.0776.

拡張機能

バージョン履歴

R2018a で導入

すべて展開する