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 つ以上の Name,Value 引数ペアで指定される追加オプションを使用して、シンクロスクイーズド変換を返します。

すべて折りたたむ

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

load mtlb;
sst = wsst(mtlb);

音声信号のウェーブレット シンクロスクイーズド変換を取得し、元の信号と再構成された信号を比較します。

音声信号を読み込み、そのシンクロスクイーズド変換を取得します。

load mtlb
soundsc(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')

逆シンクロスクイーズド変換を取得し、再構成された音声信号を再生します。

xrec = iwsst(sst);
soundsc(xrec,Fs)

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'); ylabel('Hz');

Figure contains an axes object. The axes object with title Wavelet Synchrosqueezed Transform, xlabel Time, ylabel 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 年に 1 つのサンプルに対して、サンプリング間隔を 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 は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

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

例: 'VoicesPerOctave',26

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

入力信号を対称的に拡張するオプション。'ExtendSignal'false または 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 で導入