ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

stft

短時間フーリエ変換

説明

s = stft(x) は、x の短時間フーリエ変換 (STFT) を返します。

s = stft(x,fs) は、サンプルレート fs を使用して x の STFT を返します。

s = stft(x,ts) は、サンプル時間 ts を使用して x の STFT を返します。

s = stft(___,Name,Value) は、名前と値のペアの引数を使用して追加オプションを指定します。オプションには FFT のウィンドウと長さが含まれます。これらの引数を前の入力構文のいずれかに追加できます。

[s,f] = stft(___) は、STFT が評価される周波数 f を返します。

[s,f,t] = stft(___) は、STFT が評価される時間を返します。

出力引数を設定せずに stft(___) を使用すると、現在の Figure ウィンドウに STFT の振幅がプロットされます。STFT は、両側および中央揃えとしてプロットされます。

すべて折りたたむ

10 kHz でサンプリングされる正弦波によって制御された、2 秒間の電圧制御発振器出力を生成します。

fs = 10e3;
t = 0:1/fs:2;
x = vco(sin(2*pi*t),[0.1 0.4]*fs,fs);

信号の STFT を計算してプロットします。長さ 256 で形状パラメーター β=5 のカイザー ウィンドウを使用します。オーバーラップの長さを 220 サンプル、DFT 長を 512 点として指定します。既定のカラーマップとビューをもつ STFT をプロットします。

stft(x,fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);

STFT をウォーターフォール プロットとして表示するようにビューを変更します。カラーマップを jet に設定します。

view(-45,65)
colormap jet

1 kHz で 2 秒間サンプリングされた 2 次チャープを生成します。瞬時周波数は、t=0 では 100 Hz であり、t=1 秒で 200 Hz になります。

ts = 0:1/1e3:2;

f0 = 100;
f1 = 200;

x = chirp(ts,f0,1,f1,'quadratic',[],'concave');

持続時間が 1 ms の 2 次チャープの STFT を計算して表示します。

d = seconds(1e-3);
win = hamming(100,'periodic');

stft(x,d,'Window',win,'OverlapLength',98,'FFTLength',128);

入力引数

すべて折りたたむ

入力信号。ベクトルまたは MATLAB® timetable として指定します。

メモ

istft を使用して s を反転させて、その結果を x と同じ長さになるようにする場合、(length(x)-noverlap)/(length(window) - noverlap) の値は整数でなければなりません。

  • timetable 入力の場合、x には、単一ベクトルと等間隔に増加する有限の行時間のみを含めなければなりません。timetable が欠損している場合や時間点が重複している場合、欠損または重複する時間および非等間隔の時間をもつ timetable の整理 (MATLAB)のヒントを使用して修正できます。

  • ベクトル入力の場合、x の長さはウィンドウの長さより大きくなければなりません。

例: x = chirp(0:1/4e3:2,250,1,500,'quadratic')

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

サンプルレート。正のスカラーで指定します。この引数は、x がベクトルの場合にのみ適用されます。

データ型: double | single

サンプル時間。duration スカラーで指定します。この引数は、x がベクトルの場合にのみ適用されます。

例: seconds(1) は、連続する信号サンプル間の 1 秒間の時間差を表す duration スカラーです。

データ型: double | single

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: stft('Window',win,'OverlapLength',50,'FFTLength',128) は、隣接するセグメント間で 50 サンプルがオーバーラップし 128 点 FFT をもつウィンドウ win を使用してデータをウィンドウ処理します。

スペクトル ウィンドウ。'Window' とベクトルから構成されるコンマ区切りのペアとして指定します。ウィンドウを指定しない場合、またはウィンドウを空として指定する場合、関数は長さが 128 のハン ウィンドウを使用します。Window の長さは 2 以上でなければなりません。

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

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

データ型: double | single

オーバーラップするサンプル数。window の長さより小さな非負の整数として指定します。'OverlapLength' を省略するか、空として指定する場合、ウィンドウの長さが 75% より少ない最大整数に設定されます。これは、既定のハン ウィンドウの 96 サンプルです。

データ型: double | single

正の整数として指定する DFT 点の数。この値は、ウィンドウの長さ以上でなければなりません。入力信号の長さが DFT 長より小さい場合、データにはゼロがパディングされます。

データ型: double | single

出力引数

すべて折りたたむ

短時間フーリエ変換。ベクトルとして返されます。時間は s の列方向に、周波数は行方向に下がって増加します。

  • 信号 x の長さが Nx の場合、s には k 列があります。ここで、k = ⌊(Nx – L)/(length(window) – L)⌋ ここで、window はベクトル、L'OverlapLength' と等価で、⌊ ⌋ 記号は床関数を表します。

  • s の行数は 'FFTLength' で指定された値と等しくなります。

データ型: double | single

STFT が評価される周波数。ベクトルとして返されます。

データ型: double | single

時点。ベクトルとして返されます。t には、短時間のパワー スペクトルの推定の計算に使用されるデータ セグメントの中心に対応する時間値が含まれます。

  • サンプルレート fs が指定された場合、ベクトルには時間値 (秒単位) が含まれます。

  • サンプル時間 ts が指定された場合、ベクトルは、入力と同じ時間形式をもつ duration 配列です。

  • 時間情報が指定されない場合、ベクトルはサンプル数を含みます。

データ型: double | single

アルゴリズム

短時間フーリエ変換 (STFT) を使用して、非定常信号の周波数成分が時間の経過と共に変化する様子を解析します。

信号の STFT は、信号上の長さ M"解析ウィンドウ" をスライドして、ウィンドウが適用されたデータの離散フーリエ変換を計算することによって計算されます。ウィンドウは、R サンプルの間隔で元の信号を飛び越えます。ほとんどのウィンドウ関数は、スペクトル リンギングを回避するためにエッジで小さくなります。非ゼロのオーバーラップ長 L が指定されている場合、ウィンドウが適用されたセグメントのオーバーラップ加算がウィンドウ エッジでの信号の減衰を補正します。ウィンドウが適用された各セグメントの DFT は、時間と周波数の各点の振幅と位相を含む行列に対して追加されます。STFT 配列の行数は DFT 点の数と同じで、列数は

k=NxLML,

によって指定されます。

ここで、Nx は元の信号 x(n) の長さです。

STFT 行列は、この行列の m 番目の要素が

Xm(f)=n=x(n)g(nmR)ej2πfn,

である X(f)=[X1(f)X2(f)X3(f)Xk(f)] によって指定されます。

ここで、

  • g(n) — 長さ M のウィンドウ関数。

  • Xm(f) — 時間 mR 付近を中心としたウィンドウが適用されたデータの DFT。

  • R — 連続する DFT 間のホップ サイズ。ホップ サイズは、ウィンドウの長さ M とオーバーラップ長 L 間の差異です。

STFT の振幅二乗では、関数のパワー スペクトル密度の spectrogram 表現が得られます。

参照

[1] Mitra, Sanjit K. Digital Signal Processing: A Computer-Based Approach. 2nd Ed. New York: McGraw-Hill, 2001.

[2] Smith, J. O. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov 2018.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

参考

関数

R2019a で導入