Main Content

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

wsst

ウェーブレット シンクロスクイーズド変換

説明

sst = wsst(x) は、時間-周波数平面でデータを調べるために使用するウェーブレット シンクロスクイーズド変換 sst を返します。シンクロスクイーズド変換では、連続ウェーブレット変換 (CWT) と比較して、エネルギーの不鮮明さが低減します。入力 x は、少なくとも 4 つのサンプルをもつ 1 次元の実数値信号でなければなりません。関数 wsst は、解析 Morlet ウェーブレットを使用してシンクロスクイーズド変換を計算します。

関数 wsst は、解析ウェーブレットを正規化して L1 ノルムを保持します。詳細については、アルゴリズムを参照してください。

[sst,f] = wsst(x) は、周波数ベクトル f をサンプルあたりのサイクル数で返します。周波数は sst の行に対応します。

[___] = wsst(x,fs) は、シンクロスクイーズド変換の計算用に指定されたサンプリング周波数 fs (Hz 単位) を使用してシンクロスクイーズド変換を計算します。出力 f を指定した場合、wsst は周波数を Hz 単位で返します。前述の出力値の任意の組み合わせを使用できます。

[___] = wsst(x,ts) は、サンプリング間隔として、正のスカラー入力をもつ duration ts を使用します。duration は、年、日、時間、分、または秒で指定できます。ts と出力 f を指定した場合、wsst は単位時間あたりのサイクル数で周波数を f に返します。ここで、時間単位は指定された duration から導出されます。

[___] = wsst(___,wav) は、wav で指定された解析ウェーブレットを使用して、シンクロスクイーズド変換を計算します。有効な値は 'amor''bump' で、それぞれ解析 Morlet ウェーブレットと Bump ウェーブレットを指定します。

出力引数なしの wsst(___) は、シンクロスクイーズド変換の大きさを時間と周波数の関数としてプロットします。サンプリング周波数 fs または間隔 ts を指定しない場合、シンクロスクイーズド変換はサンプルあたりのサイクル数でプロットされます。サンプリング周波数を指定した場合、シンクロスクイーズド変換が Hz 単位でプロットされます。duration を使用してサンプリング間隔を指定した場合、プロットは単位時間あたりのサイクルになります。時間単位は duration から導出されます。

[___] = wsst(___,Name=Value) は、1 つ以上の名前と値の引数で指定される追加オプションを使用して、シンクロスクイーズド変換を返します。

すべて折りたたむ

既定値を使用して、音声サンプルのウェーブレット シンクロスクイーズド変換を取得します。

load mtlb
sst = wsst(mtlb);

音声信号を読み込みます。信号は Fs=7418 Hz でサンプリングされています。シンクロスクイーズド変換を求めます。

load mtlb
% To hear, type sound(mtlb,Fs)
dt = 1/Fs;
t = 0:dt:numel(mtlb)*dt-dt;
[sst,f] = wsst(mtlb,Fs);

シンクロスクイーズド変換の大きさをプロットします。

pcolor(t,f,abs(sst))
shading interp
xlabel("Seconds")
ylabel("Frequency (Hz)")
title("Synchrosqueezed Transform")

Figure contains an axes object. The axes object with title Synchrosqueezed Transform, xlabel Seconds, ylabel Frequency (Hz) contains an object of type surface.

逆シンクロスクイーズド変換を求めます。元の信号と再構成したものをプロットします。

xrec = iwsst(sst);
% To hear, type soundsc(xrec,Fs)
plot(t,mtlb)
hold on
plot(t,xrec)
hold off
xlabel("Seconds")
ylabel("Amplitude")
legend("Original","Reconstruction")

Figure contains an axes object. The axes object with xlabel Seconds, ylabel Amplitude contains 2 objects of type line. These objects represent Original, Reconstruction.

2 次チャープのウェーブレット シンクロスクイーズド変換を求めます。チャープは 1000 Hz でサンプリングされます。

load quadchirp
[sst,f] = wsst(quadchirp,1000);

変換の大きさをプロットします。

hp = pcolor(tquad,f,abs(sst));
hp.EdgeColor = "none";
title("Wavelet Synchrosqueezed Transform")
xlabel("Time (s)")
ylabel("Frequency (Hz)")

Figure contains an axes object. The axes object with title Wavelet Synchrosqueezed Transform, xlabel Time (s), ylabel Frequency (Hz) contains an object of type surface.

既定の Morlet ウェーブレットを使用して、太陽黒点データのウェーブレット シンクロスクイーズド変換をプロットします。サンプリング間隔を 1 年に指定します。

load sunspot
wsst(sunspot(:,2),years(1))

Figure contains an axes object. The axes object with title Wavelet Synchrosqueezed Transform, xlabel Time (years), ylabel Frequency (cycles/year) contains an object of type surface.

Bump ウェーブレットを使用し、太陽黒点データのウェーブレット シンクロスクイーズド変換をプロットします。サンプリング間隔を 1 年に指定します。

load sunspot
wsst(sunspot(:,2),years(1),"bump")

Figure contains an axes object. The axes object with title Wavelet Synchrosqueezed Transform, xlabel Time (years), ylabel Frequency (cycles/year) contains an object of type surface.

入力引数

すべて折りたたむ

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

サンプリング周波数。正のスカラーとして指定します。

サンプリング間隔 (サンプリング周期とも呼ばれます)。正のスカラー入力をもつ duration として指定します。有効な duration は、yearsdayshoursseconds、および minutes です。カレンダー期間 (caldayscalweekscalmonthscalquarterscalyears) は使用できません。tsfs の両方を指定することはできません。

例: sst = wsst(x,hours(12))

シンクロスクイーズド変換の計算に使用される解析ウェーブレット。次のいずれかとして指定します。

  • 'amor' — 解析 Morlet ウェーブレット

  • 'bump' — Bump ウェーブレット

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: VoicesPerOctave=26

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'VoicesPerOctave',26

シンクロスクイーズド変換で使用するオクターブあたりの音の数。10 ~ 48 の偶数の整数として指定します。オクターブあたりの音の数とオクターブ数の積が音階の数になります。オクターブ数は入力 x のサイズに依存し、floor(log2(numel(x)))-1 になります。

入力信号を対称的に拡張するオプション。数値または logical の 0 (false) または 1 (true) として指定します。信号を対称的に拡張すると境界の影響を軽減できます。false を指定すると、信号は拡張されません。true を指定すると、信号が拡張されます。

出力引数

すべて折りたたむ

シンクロスクイーズド変換。行列として返されます。既定では、シンクロスクイーズド変換は floor(log2(numel(x)))-1 オクターブ、オクターブあたり 32 音、さらに解析 Morlet ウェーブレットを使用します。sst は Na 行 N 列の行列で、Na は音階の数、N は x のサンプル数です。既定の音階の数は 32*(floor(log2(numel(x)))-1) です。

シンクロスクイーズド変換の周波数。ベクトルとして返されます。周波数は sst の行に対応します。fs または ts を指定しない場合、周波数はサンプルあたりのサイクル数になります。fs を指定した場合、周波数は Hz 単位になります。ts を指定した場合、周波数は単位時間あたりのサイクル数になります。周波数ベクトルの長さは、sst 行の数と同じです。ts をサンプリング間隔として指定した場合、ts を使用して、f について、音階から周波数への変換が計算されます。

アルゴリズム

関数 wsst は、解析ウェーブレットを正規化して L1 ノルムを保持します。これを言い換えると、wsst はウェーブレット バンドパス フィルターのフーリエ変換にスケールの平方根を乗算しないということです。スケールの平方根を乗算すると、各バンドパスの寄与の重み付けが均等ではなくなります。

L1 正規化では、振幅の等しい振動成分がスケールの異なるデータ内にある場合、そのような振動成分は CWT で等しい大きさをもちます。関数 cwt も L1 正規化を使用します。詳細については、CWT の L1 ノルムを参照してください。

参照

[1] Daubechies, Ingrid, Jianfeng Lu, and Hau-Tieng Wu. “Synchrosqueezed Wavelet Transforms: An Empirical Mode Decomposition-like Tool.” Applied and Computational Harmonic Analysis 30, no. 2 (March 2011): 243–61. https://doi.org/10.1016/j.acha.2010.08.002.

[2] Thakur, Gaurav, Eugene Brevdo, Neven S. Fučkar, and Hau-Tieng Wu. “The Synchrosqueezing Algorithm for Time-Varying Spectral Analysis: Robustness Properties and New Paleoclimate Applications.” Signal Processing 93, no. 5 (May 2013): 1079–94. https://doi.org/10.1016/j.sigpro.2012.11.029.

バージョン履歴

R2016a で導入