Main Content

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

fsst

フーリエ シンクロスクイーズド変換

説明

s= fsst(x)は、入力信号xのフーリエ シンクロスクイーズド変換を返します。sの各列には、xのウィンドウが適用されたセグメントのシンクロスクイーズド スペクトルが格納されます。

[s,w,n] = fsst(x)は、正規化周波数wのベクトルとフーリエ シンクロスクイーズド変換を計算した時点のサンプル数nのベクトルを返します。wsの列に、nsの行に対応します。

[s,f,t] = fsst(x,fs)は、巡回周波数fのベクトルおよび時点のベクトルtをサンプルレートfsで表して返します。

[s,f,t] = fsst(x,ts)は、サンプル時間tsdurationスカラーとして指定します。tの単位はtsと同じです。fの単位は、tsの単位の逆数です。

[___] = fsst(___,window)は、windowを使用して信号をセグメントに分割し、ウィンドウ処理を実行します。前の構文の入力引数を任意に組み合わせて使用し、対応する出力引数を取得することができます。

出力引数を設定せずにfsst(___)を使用すると、現在の Figure ウィンドウにシンクロスクイーズド変換がプロットされます。

fsst(___,freqloc)では、周波数をプロットする軸を指定します。

すべて折りたたむ

ホワイト ガウス ノイズに含まれた正弦波の和で構成される 1024 サンプルの信号を生成します。正弦波の正規化周波数は、 2 π / 5 ラジアン/サンプルおよび 4 π / 5 ラジアン/サンプルです。高周波数の正弦波の振幅は、他の正弦波の振幅の 3 倍です。

N = 1024; n = 0:N-1; w0 = 2*pi/5; x = sin(w0*n)+3*sin(2*w0*n);

信号のフーリエ シンクロスクイーズド変換を計算します。結果をプロットします。

[s,w,n] = fsst(x); mesh(n,w/pi,abs(s)) axistightview(2) colorbar

Figure contains an axes. The axes contains an object of type surface.

比較のために信号の通常の短時間フーリエ変換を計算します。spectrogramの既定の値を使用します。結果をプロットします。

[s,w,n] = spectrogram(x); surf(n,w/pi,abs(s),'EdgeColor','none') axistightview(2) colorbar

Figure contains an axes. The axes contains an object of type surface.

2 つのチャープで構成された信号を生成します。信号は、3 kHz で 1 秒間サンプリングされます。最初のチャープの初期周波数は 400 Hz で、サンプリングの最後には 800 Hz に到達します。2 番目のチャープは 500 Hz から開始し、最後には 1000 Hz に到達します。2 番目のチャープの振幅は最初のチャープ 2 倍です。

fs = 3000; t = 0:1/fs:1-1/fs; x1 = chirp(t,400,t(end),800); x2 = 2*chirp(t,500,t(end),1000);

信号のフーリエ シンクロスクイーズド変換を計算し、プロットします。

fsst(x1+x2,fs,'yaxis')

Figure contains an axes. The axes with title Fourier Synchrosqueezed Transform contains an object of type image.

シンクロスクイーズド変換と短時間フーリエ変換 (STFT) を比較します。STFT を計算するには、関数spectrogramを使用します。fsstで使用する既定のパラメーターを指定します。

  • β= 10 の 256 点カイザー ウィンドウで信号にウィンドウを適用

  • 隣り合ったウィンドウ セグメント間の 255 サンプルのオーバーラップ

  • 256 の FFT 長

[stft,f,t] = spectrogram(x1+x2,kaiser(256,10),255,256,fs);

STFT の絶対値をプロットします。

mesh(t,f,abs(stft)) xlabel('Time (s)') ylabel('Frequency (Hz)') title('Short-Time Fourier Transform') axistightview(2)

Figure contains an axes. The axes with title Short-Time Fourier Transform contains an object of type surface.

100 Hz で開始し、t= 1 秒で 200 Hz になる二次チャープのフーリエ シンクロスクイーズド変換を計算して表示します。サンプルレートを 1 kHz に指定します。サンプル時間をdurationスカラーとして表します。

fs = 1000; t = 0:1/fs:2; ts = duration(0,0,1/fs); x = chirp(t,100,1,200,'quadratic'); fsst(x,ts,'yaxis') title('Quadratic Chirp')

Figure contains an axes. The axes with title Quadratic Chirp contains an object of type surface.

シンクロスクイーズ アルゴリズムは、信号の周波数が緩やかに変化するという仮定の下で動作します。したがって、周波数の変化率は小さいため、スペクトルが早い時点で良好に集中します。

DC で開始し、t= 1 秒で 150 Hz になる線形チャープのフーリエ シンクロスクイーズド変換を計算して表示します。256 サンプルのハミング ウィンドウを使用します。

x = chirp(t,0,1,150); fsst(x,ts,hamming(256),'yaxis') title('Linear Chirp')

Figure contains an axes. The axes with title Linear Chirp contains an object of type surface.

対数チャープのフーリエ シンクロスクイーズド変換を計算し、表示します。このチャープは 1 kHz でサンプリングされ、20 Hz で開始し、t= 1 秒で 60 Hz に達します。β= 20 の 256 サンプル カイザー ウィンドウを使用します。

x = chirp(t,20,1,60,'logarithmic'); [s,f,t] = fsst(x,fs,kaiser(256,20)); clf mesh(t,f,(abs(s))) title('Logarithmic Chirp') xlabel('Time (s)') ylabel('Frequency (Hz)') view(2)

Figure contains an axes. The axes with title Logarithmic Chirp contains an object of type surface.

周波数軸に対数スケールを使用します。この変換は直線になります。

ax = gca; ax.YScale ='log'; axistight

Figure contains an axes. The axes with title Logarithmic Chirp contains an object of type surface.

F s = 7 4 1 8 H z でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。

loadmtlb% To hear, type sound(mtlb,Fs)

信号のシンクロスクイーズド変換を計算します。長さ 256 のハン ウィンドウを使用します。時間がx軸に、周波数がy軸に表示されます。

fsst(mtlb,Fs,hann(256),'yaxis')

Figure contains an axes. The axes with title Fourier Synchrosqueezed Transform contains an object of type image.

ifsstを使用して逆変換を行います。元の信号と再構成後の信号を比較します。

sst = fsst(mtlb,Fs,hann(256)); xrc = ifsst(sst,hann(256)); plot((0:length(mtlb)-1)/Fs,[mtlb xrc xrc-mtlb]) legend('Original','Reconstructed','Difference')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Original, Reconstructed, Difference.

% To hear, type sound(xrc-mtlb,Fs)

入力引数

すべて折りたたむ

入力信号。ベクトルで指定します。

例:cos(pi/4*(0:159))+randn(1,160)は、ホワイト ガウス ノイズに含まれる正弦波を指定します。

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

サンプルレート。正のスカラーで指定します。サンプルレートは単位時間あたりのサンプル数です。時間の単位が秒の場合、サンプルレートの単位は Hz です。

データ型:double|single

サンプル時間。durationスカラーで指定します。サンプル時間は、xの連続するサンプル間で経過する時間です。

データ型:duration

信号をセグメントに分割するために使用するウィンドウ。整数、あるいは行ベクトルまたは列ベクトルで指定します。

  • windowが整数の場合、fsstxを長さがwindowのセグメントに分割し、各セグメントに、その長さおよびβ = 10のカイザー ウィンドウを適用します。隣接するセグメント間のオーバーラップは、window– 1 です。

  • windowがベクトルの場合、fsstxをベクトルと同じ長さのセグメントに分割し、windowを使用して各セグメントにウィンドウを適用します。隣接するセグメント間のオーバーラップは,length(window)– 1 です。

  • windowが指定されない場合、fsstxを長さ 256 のセグメントに分割し、各セグメントに 256 サンプルのカイザー ウィンドウをβ = 10で適用します。隣接するセグメント間のオーバーラップは 255 です。xのサンプル数が 256 未満の場合、関数は、xと同じ長さでβ = 10の単一のカイザー ウィンドウを使用します。

利用可能なウィンドウのリストについては、ウィンドウを参照してください。

例:hann(N+1)(1-cos(2*pi*(0:N)'/N))/2は、いずれも長さN+ 1 のハン ウィンドウを指定します。

データ型:double|single

周波数の表示軸。'xaxis'または'yaxis'で指定します。

  • 'xaxis'— 周波数がx軸に、時間がy軸に表示されます。

  • 'yaxis'— 周波数がy軸に、時間がx軸に表示されます。

この引数は出力引数でfsstを呼び出している場合に無視されます。

出力引数

すべて折りたたむ

フーリエ シンクロスクイーズド変換。行列として返されます。時間はsの列方向に沿って増加し、周波数はs行方向に沿って 0 から増加します。xが実数の場合、シンクロスクイーズド スペクトルは片側になります。xが複素数の場合、シンクロスクイーズド スペクトルは両側で中央揃えになります。

ベクトルとして返される正規化周波数。wの長さはsの列数と等しくなります。

サンプル数。ベクトルとして返されます。nの長さはsの列数と等しくなります。nの各サンプル番号はウィンドウが適用されたセグメントxの中点になります。

ベクトルとして返される巡回周波数。fの長さはsの列数と等しくなります。

時点。ベクトルとして返されます。tの長さはsの列数と等しくなります。tの各時間の値はウィンドウが適用されたセグメントxの中点になります。

詳細

すべて折りたたむ

フーリエ シンクロスクイーズド変換

音声波形,機械の振動,生体信号などの多くの現実世界の信号は,振幅変調および周波数変調のモードの重ね合わせで表現できます。時間-周波数解析の場合、信号を解析信号の和として次のように表現できるため便利です。

f ( t ) = k = 1 K f k ( t ) = k = 1 K A k ( t ) e j 2 π ϕ k ( t ) .

位相ϕk(t)には時間導関数k(t)/dtがあり、これは瞬時周波数に対応します。正確な位相がわからない場合は、フーリエ シンクロスクイーズド変換を使用して推定できます。

フーリエ シンクロスクイーズド変換は、関数spectrogramに実装された短時間フーリエ変換をベースにしています。特定の非定常信号において、シンクロスクイーズド変換では、通常の変換よりもシャープな時間-周波数推定が生成されるため、再代入されたスペクトログラムとの類似性が高くなります。関数fsstは、スペクトル ウィンドウ g を使用し、次の計算を実行して関数 f の短時間フーリエ変換を求めます。

V g f ( t , η ) = f ( x ) g ( x t ) e j 2 π η ( x t ) d x .

通常の定義と違い、この定義には追加の係数のej2πηtがあります。次に、変換値は時間-周波数平面で、瞬時周波数の曲線の周囲に集中するように "押し込まれ" ます。結果のシンクロスクイーズド変換は次の形式になります。

T g f ( t , ω ) = V g f ( t , η ) δ ( ω Ω g f ( t , η ) ) d η ,

ここで、瞬時周波数は、次の "位相変換" によって推定されます。

Ω g f ( t , η ) = 1 j 2 π t V g f ( t , η ) V g f ( t , η ) = η 1 j 2 π V g / t f ( t , η ) V g f ( t , η ) .

分母での変換は、ウィンドウの影響を減少させます。簡単な例については、近接した正弦波の検出を参照してください。Tgf(t,ω) の定義は、本書に記載されている他の式の1/g(0)倍という違いがあります。fsstは、モードの再構成のステップでこの係数を組み込みます。

再代入されたスペクトログラムと違い、シンクロスクイーズド変換は可逆性があり、このため信号を構成する個々のモードを再構成できます。短時間フーリエ変換の計算では、可逆性によりいくつかの制約が加わります。

  • DFT 点の数は指定したウィンドウの長さに等しくなります。

  • 隣り合ったウィンドウ セグメント間のオーバーラップは、ウィンドウの長さよりも 1 短くなります。

  • 再割り当ては、周波数単位でのみ実行します。

モードを検出するには、Ωgf(t,η) 付近の小さな周波数範囲でシンクロスクイーズド変換を積分します。

f k ( t ) 1 g ( 0 ) | ω Ω k ( t ) | < ε T g f ( t , ω ) d ω ,

ここで ɛ は小さい数です。

シンクロスクイーズド変換は、ウィンドウを適用した短時間フーリエ変換と比べて狭いリッジを生成します。ただし、短時間変換の幅は、依然として、シンクロスクイーズド変換のモードを分離する機能に影響します。解決可能にするには、モードが次の条件に従う必要があります。

  1. それぞれのモードで、周波数は、振幅の変化率よりも厳密に大きくなる必要があります。すなわち、すべてのkについて d ϕ k ( t ) d t > d A k ( t ) d t です。

  2. 個々のモードは、最低でもウィンドウの周波数帯域で分離する必要があります。ウィンドウのサポートが[–Δ,Δ]の間隔の場合、k ≠ mのときに | d ϕ k ( t ) d t d ϕ m ( t ) d t | > 2 Δ です。

詳細は、近接した正弦波の検出を参照してください。

参照

[1] Auger, François, Patrick Flandrin, Yu-Ting Lin, Stephen McLaughlin, Sylvain Meignen, Thomas Oberlin, and Hau-Tieng Wu. "Time-Frequency Reassignment and Synchrosqueezing: An Overview." IEEE®Signal Processing Magazine. Vol. 30, November 2013, pp. 32–41.

[2] Oberlin, Thomas, Sylvain Meignen, and Valérie Perrier. "The Fourier-based Synchrosqueezing Transform." Proceedings of the 2014 IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), pp. 315–319.

[3] Thakur, Gaurav, and Hau-Tieng Wu. "Synchrosqueezing-based Recovery of Instantaneous Frequency from Nonuniform Samples." SIAM Journal of Mathematical Analysis. Vol. 43, 2011, pp. 2078–2095.

拡張機能

R2016b で導入