Main Content

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

ifsst

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

説明

x = ifsst(s) は、s の逆フーリエ シンクロスクイーズド変換を返します。xs の時間-周波数平面全体を使用して再構成されます。

x = ifsst(s,window) は、window を使用してフーリエ シンクロスクイーズド変換が計算される信号を再構成します。

x = ifsst(s,window,f,freqrange) は、freqrange 内の周波数 f でサンプリングされたと仮定して、逆シンクロスクイーズド変換を行います。逆シンクロスクイーズド変換は、周波数が freqrange 内の s のビンについて行われます。

x = ifsst(s,window,iridge) は、インデックス ベクトルまたは行列 iridge で指定される時間-周波数リッジに沿って、逆シンクロスクイーズド変換を行います。iridge が行列の場合、ifsst はまず iridge の最初の列に沿って逆変換を行い、次に後続の列に沿って反復して進みます。出力は、iridge と同じサイズのベクトルまたは行列です。

x = ifsst(s,window,iridge,'NumFrequencyBins',nbins) は、iridge のインデックス近傍の周波数ビンの数を指定して、再構成に使用します。

すべて折りたたむ

Fs=7418Hz でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。信号のフーリエ シンクロスクイーズド変換を計算します。

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

[sst,f] = fsst(mtlb,Fs);

逆変換を行い、信号を再構成します。元の信号、再構成した信号およびこれらの差分をプロットします。

xrec = ifsst(sst);
 
t = (0:length(mtlb)-1)/Fs;
plot(t,mtlb,t,xrec,t,mtlb-xrec)

xlabel('Time (s)')
legend('Original','Reconstructed','Difference')

Figure contains an axes object. The axes object with xlabel Time (s) contains 3 objects of type line. These objects represent Original, Reconstructed, Difference.

再構成の精度を確認するために、元の信号と逆変換との差の ノルムを計算します。

Linf = norm(abs(mtlb-xrec),Inf)
Linf = 1.9762e-14
% To hear, type sound(mtlb-xrec,Fs)

1024 Hz で 2 秒間サンプリングされた信号を生成します。

nSamp = 2048;
Fs = 1024;
t = (0:nSamp-1)'/Fs;

最初の 1 秒間、信号は 400 Hz の正弦波と凹の 2 次チャープで構成されています。開始および終了時の周波数が 250 Hz で、最小でも 150 Hz に到達するチャープを区間の中間点で対称となるように指定します。

t1 = t(1:nSamp/2);

x11 = sin(2*pi*400*t1);
x12 = chirp(t1-t1(nSamp/4),150,nSamp/Fs,1750,'quadratic');
x1 = x11+x12;

信号の他の部分は、減少する周波数の 2 つの線形チャープで構成されています。一方のチャープの初期周波数は 250 Hz で、100 Hz まで減少します。もう一方のチャープの初期周波数は 400 Hz で、250 Hz まで減少します。

t2 = t(nSamp/2+1:nSamp);

x21 = chirp(t2,400,nSamp/Fs,100);
x22 = chirp(t2,550,nSamp/Fs,250);
x2 = x21+x22;

信号のフーリエ シンクロスクイーズド変換を計算します。β = 100 の形状パラメーターをもつ 256 サンプルのカイザー ウィンドウを指定します。fsst のプロット機能を使用して、結果を表示します。

sig = [x1;x2];
wind = kaiser(256,120);

[sigtr,ftr,ttr] = fsst(sig,Fs,wind);

fsst(sig,Fs,wind,'yaxis')

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

逆変換を行い、関数を再構成します。元の信号、逆変換した信号およびこれらの差分をプロットします。

x = ifsst(sigtr,wind);

plot(t,sig,t,x,t,x-sig)
legend('Original','Reconstructed','Difference')

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

diffnorm = norm(x-sig)
diffnorm = 3.9026e-13

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);

信号のフーリエ シンクロスクイーズド変換を計算し、プロットします。時間が x 軸に、周波数が y 軸に表示されます。

[sst,f] = fsst(x1+x2,fs);
fsst(x1+x2,fs,'yaxis')

Figure contains an axes object. The axes object with title Fourier Synchrosqueezed Transform, xlabel Time (ms), ylabel Frequency (kHz) contains an object of type image.

信号の高エネルギー成分に対応するリッジを抽出します。これはより大きい振幅をもつチャープです。リッジを使用して、信号を再構成します。

[~,iridge] = tfridge(sst,f);
 
xrec = ifsst(sst,[],iridge);

高エネルギー成分のスペクトログラムをプロットします。成分を 256 サンプルのセクションに分割し、255 サンプルのオーバーラップを指定します。512 の DFT 点および箱型ウィンドウを使用します。

spectrogram(xrec,rectwin(256),255,512,fs,'yaxis')

Figure contains an axes object. The axes object with xlabel Time (ms), ylabel Frequency (kHz) contains an object of type image.

2 番目のチャープを抽出するために、2 つのリッジで tfridge 探索を指定します。出力の 2 番目の列は、信号の低エネルギー成分です。

[~,iridge] = tfridge(sst,f,'NumRidges',2);

xrec = ifsst(sst,[],iridge(:,2));

spectrogram(xrec,rectwin(256),255,512,fs,'yaxis')

Figure contains an axes object. The axes object with xlabel Time (ms), ylabel Frequency (kHz) contains an object of type image.

入力引数

すべて折りたたむ

シンクロスクイーズド変換の入力。行列として指定します。

例: fsst(cos(pi/4*(0:159))) は、正弦波のシンクロスクイーズド変換を指定します。

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

スペクトル ウィンドウ。整数、あるいは行ベクトルまたは列ベクトルとして指定します。

  • window が整数の場合、ifsst では、シンクロスクイーズド変換 s は長さ window および β = 10 のカイザー ウィンドウを使用して計算されたと仮定されます。

  • window がベクトルの場合、ifsst では、swindow を使用して元の信号の各セグメントをウィンドウ処理して計算されたと仮定されます。

  • window が指定されない、ifsst では、s は長さ 256 および β = 10 のカイザー ウィンドウを使用して計算されたと仮定されます。再構成される信号 x のサンプル数が 256 未満の場合、x の長さと一致するウィンドウの長さまたはウィンドウ ベクトルを指定しなければなりません。

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

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

データ型: double | single

サンプリング周波数。ベクトルとして指定します。f の長さは、s の要素数と等しくなければなりません。

データ型: single | double

周波数範囲。2 要素ベクトルとして指定します。freqrange の値は、厳密に増加し、f により構成される範囲内になければなりません。

データ型: single | double

時間-周波数リッジのインデックス。ベクトルまたは行列として指定します。iridgetfridge の出力です。

データ型: single | double

対象の時間-周波数リッジのそれぞれの側に隣接するビンの数。'NumFrequencyBins' および正の整数スカラーで構成されるコンマ区切りのペアとして指定します。片側のビンの数が nbins より少ない周波数エッジの近傍のインデックスは、より少ないビンの数を使用して再構成されます。

データ型: single | double

出力引数

すべて折りたたむ

逆シンクロスクイーズド変換。ベクトルとして返されます。x の長さは s の列数と等しくなります。

拡張機能

バージョン履歴

R2016b で導入

すべて展開する