Python は短時間フーリエ変換を作成します
「torch.stft」関数を呼び出します
torch.stft()
PyTorchにおける短時間フーリエ変換(STFT)の計算に使用される関数で、主な機能は1D/2D/3Dテンソルから構成される時系列(時系列)をSTFT値に変換することです。この関数は、時間領域で信号をスライディング ウィンドウ処理し、FFT を実行することによって STFT を計算します。その関数プロトタイプは次のとおりです。
torch.stft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, pad_mode='reflect', normalized=False, onesided=True, return_complex=True)
より重要なパラメータには次のようなものがあります。
input
: STFT である必要がある入力テンソル。サポートされる形状は [batch_size, n_channels, time_steps] または [batch_size, time_steps] です。n_fft
: FFT ウィンドウのサイズ。デフォルトは 2048 です。一般的に使用される値は 1024、2048、4096 です。hop_length
: STFT スライディング ウィンドウのステップ サイズ。デフォルトは ですn_fft // 4
。一般的に使用される値は 256 と 512 です。win_length
:各ウィンドウのサイズ。指定しない場合のデフォルトwin_length = n_fft
。window
: フォーム関数は手動で定義でき、デフォルトでは Hann ウィンドウが使用されます。normalized
:正規化を行うかどうかを指定します。デフォルトは正規化されていません。return_complex
: デフォルトで複素数テンソルを返すかどうか。
補足として、ハミング ウィンドウを使用した例は次のとおりです。
import torch
import numpy as np
x = torch.from_numpy(np.random.randn(1, 44100).astype(np.float32))
mag_spec, phase = torch.stft(x, n_fft=2048, hop_length=512, window=torch.hann_window(2048))
このうち、window
パラメータはハミング ウィンドウ関数に渡され、サイズは 2048 で、他のウィンドウ関数も使用でき、n_fft
自由hop_length
に定義することもできますが、return_complex=True
デフォルト値です。
逆変換の更新、復元
短時間フーリエ変換の逆変換は「torch.istft」と呼ばれます。
torch.istft(input, n_fft, hop_length=None, win_length=None, window=None, center=True, normalized=False, onesided=True, length=None)
以下に、いくつかの主なパラメータと関数の意味を示します。
input
: 入力 STFT データ、形状は です(batch, channels, freq, time, complex=2)
。これは、complex=2
実数部と虚数部が複素数を表すために使用されることを意味します。n_fft
: フーリエ変換のウィンドウ サイズは、通常、STFT で使用される n_fft パラメーターと一致する必要があります。hop_length
: フレーム シフトのサイズは、通常、STFT で使用される hop_length パラメータと一致する必要があります。win_length
: ウィンドウの長さは、通常、STFT で使用される win_length パラメータと一致する必要があります。window
: ウィンドウ タイプ。win_length の長さのテンソルにすることができます。center
: 中心点に基づいてフーリエ変換を実行するかどうか。デフォルトは True です。normalized
: 正規化を実行するかどうか。デフォルトは False です。STFT との一貫性を保つことが推奨されます。onesided
: 正の周波数部分のみを保持するかどうか。デフォルトは True、つまりスペクトルの左半分のみが保持されます。length
: 出力信号の長さ。指定しない場合、入力 STFT データから計算されます。
出力 ISTFT データをshape で返します(batch, channels, time)
。
ISTFT は、STFT で使用されるウィンドウの種類、フレーム シフトのサイズ、信号自体の特性などの要因に応じて、常に元の信号を完全に復元できるわけではないことに注意してください。したがって、具体的な使用プロセスでは、実際の状況に応じてパラメータを調整および最適化する必要があります。