関数 > 信号処理 > 時間-周波数解析 > 例: 短時間フーリエ変換
例: 短時間フーリエ変換
stft関数を使用して、時間の経過とともにスペクトル特性が変化する信号の短時間フーリエ変換 (STFT) を計算します。
この関数は、s サンプルごとの入力信号のフーリエ変換が列に格納されている行列を返します。信号 x(t) の STFT は次のように連続時間で定義されます。
クリックしてこの式をコピー
ここで、w(t) は特定の時間における変換の影響を局所化するときに使用される実数のスライディング逓減ウィンドウです。
2 ピッチ信号
次の信号は、異なる時間に発生した異なる周波数の 2 つの正弦曲線から成ります。
1. 信号の成分を定義します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. 複合信号をプロットします。
クリックしてこの式をコピー
STFT には、信号の周波数内容とその周波数が発生する時間についての情報が含まれています。
3. 時間ステップ 30 で Hanning ウィンドウを使用して、100 個の周波数サンプルで STFT を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
これは 100 x 56 の行列です (長さ L の信号には時間ステップ 30 が 56 個あります)。
4. マグニチュードの二乗を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
5. 生成されたコンターを BMP 画像として保存します。
クリックしてこの式をコピー
(v_spec_rotated.bmp)
画像には、2 つの周波数のほかに、それらの周波数が発生する時間も示されています。ただし、このスペクトログラムには、いわゆる局所化トレードオフがあります。時間を局所化するためには (正弦曲線がアクティブになる時間を特定する STFT)、タイムドメインで短いウィンドウが必要です。その反対に、周波数の局所化には長時間のウィンドウが必要です。このトレードオフは、使用されるウィンドウのタイプ、対象となる信号、時間、周波数によっても左右されます。
6. これを確認するため、今度は 100 ではなく 300 の長さの周波数ウィンドウを使用して、上記と同じ信号の STFT とスペクトログラムを計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
7. 生成されたコンターを BMP 画像として保存します。
クリックしてこの式をコピー
(v_nbspec_rotated.bmp)
長いウィンドウを使用して計算された STFT は周波数解像度が良好ですが、時間解像度は良好ではありません。timefreq や timecorr などのその他の時間-周波数関数を使用することで、この時間-周波数のトレードオフを回避できます。
カスタムウィンドウ処理
この例の周波数ウィンドウは、フーリエ変換の長さまでゼロで埋められます。
1. ウィンドウの長さと二乗余弦の割合を定義します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
ウィンドウの長さがフーリエ変換の長さを超えてはなりません。
2. ウィンドウが単位エネルギーを持つようにウィンドウの係数の尺度を変更します。
クリックしてこの式をコピー
クリックしてこの式をコピー
3. STFT とスペクトログラムを計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
4. 生成されたコンターを BMP 画像として保存します。
クリックしてこの式をコピー
(v_spec2_rotated.bmp)
stft 関数のパラメータや入力信号の正弦曲線の周波数を変えて、プロットがどのように変化するのかを確認します。
これは役に立ちましたか?