短時間フーリエ変換 (STFT) アルゴリズムを使用して、時間/周波数共同領域における信号エネルギー分布を計算します。


icon

入力/出力

  • ccclst.png 時間-周波数構成

    時間-周波数構成は、周波数ビンの構成を指定する他、STFTスペクトログラム{X}{X}の列数を決定します。

  • cbool.png 周波数ビンを2の累乗に強制?

    周波数ビンを2の累乗に強制?は、周波数ビンを2の累乗に強制するかどうかを指定します。周波数ビンを2の累乗に強制?がTRUEで周波数ビンが2の累乗でない場合、このVIは周波数ビンを最も近い2の累乗に設定します。デフォルトはTRUEです。

  • cbool.png ナイキスト周波数を除外?

    ナイキスト周波数を除外?は、ナイキスト周波数でのエネルギーをSTFTスペクトログラム{X}から除外するかどうか指定します。

    周波数ビンが偶数でナイキスト周波数を除外?がTRUEの場合、STFTスペクトログラム{X}はナイキスト周波数でのエネルギーを除外します。周波数ビンが奇数の場合、LabVIEWはナイキスト周波数を除外?を無視します。デフォルトはTRUEです。

  • c1ddbl.png X

    Xは、入力時間領域信号を指定します。

  • cnclst.png 時間-周波数サンプリング情報

    時間-周波数サンプリング情報は、時間/周波数共同領域内での信号のサンプルに使用する密度を指定し、結果の2D時間/周波数配列の大きさを定義します。

  • ci32.png 時間ステップ

    時間ステップは、スライド式窓を切り替えるためのサンプル数です。

    時間ステップが0以下の場合、STFTスペクトログラム{X}の行数が512以下になるように時間ステップの値が自動的に調整されます。デフォルトは–1です。

  • ci32.png 周波数ビン

    周波数ビンは、STFTのFFTサイズを指定します。周波数ビンが0以下の場合、このVIは周波数ビンを512に設定します。周波数ビンが1の場合、このVIは周波数ビンを2に強制設定します。デフォルトは 512 です。

  • cnclst.png 窓情報

    窓情報は、STFTの計算に使用する窓の情報を指定します。

  • cu32.png タイプ

    タイプは、STFTの計算に使用する窓のタイプに使用されます。デフォルトはハニングです。

    0長方形
    1ハニング
    2ハミング
    3ブラックマン・ハリス
    4完全ブラックマン
    5ブラックマン
    6フラットトップ
    74項ブラックマン・ハリス
    87項ブラックマン・ハリス
    9低サイドローブ
    11ブラックマン・ナットール
    30三角波
    31バートレット・ハニング
    32ボーマン
    33パーゼン
    34ウェルチ
    60カイザー
    61ドルフ・チェビシェフ
    62ガウス
  • ci32.png 長さ

    長さはサンプルの窓の長さを指定します。長さが0以下の場合、このVIは長さを64に設定します。デフォルトは64です。

  • cdbl.png 窓パラメータ

    窓パラメータは、カイザー窓ではベータパラメータ、ドルフ・チェビシェフ窓ではメインローブとサイドローブの比率s、ガウス窓では標準偏差です。窓タイプが他の窓の場合、このVIはこの入力を無視します。

    窓パラメータのデフォルト値はNaNです。カイザー窓ではベータ~0、ドルフ・チェビシェフ窓ではs~60、ガウス窓ではへの標準偏差に設定され、ここでLは窓の長さを示します。

  • cbool.png エネルギー節約?

    エネルギー節約?は、時間/周波数共同領域が時間領域のエネルギーに等しくなるようにSTFTスペクトログラム{X}をスケールするかどうかを指定します。デフォルトはTRUEです。

  • i2ddbl.png STFTスペクトログラム{X}

    STFTスペクトログラム{X}は、時間/周波数共同領域の時間波形エネルギー分布を記述する2次元配列です。

  • ii32.png エラー

    エラーは、VIからのエラーまたは警告を返します。エラーは「エラーコードからエラークラスタ」VIに配線して、エラーコードまたは警告をエラークラスタに変換できます。

  • このVIでは、STFTスペクトログラム{X}を計算するためにまずXのSTFTが計算されます。XのSTFTを計算するには、このVIでスライド式窓を使用して信号を複数ブロックのデータに分割します。次に、Nポイントの高速フーリエ変換を各ブロックのデータに適用し、各ブロックのデータの周波数内容を取得します。ここで、N周波数ビンです。STFTは信号Xの最初のサンプルで最初のスライド式窓の中心に整列し、ゼロを追加して信号の最初を拡張します。スライド式窓は時間ステップサンプルを次のブロックのデータに移動させます。窓をXから移動する場合、このVIはゼロでXをパッドします。

    以下の図は、このVIでSTFTを計算する手順を示します。

    周波数ビンを2の累乗に強制?がTRUEで周波数ビンが2の累乗でない場合、以下の式も真となります。

    K = 2[log2(周波数ビン)]

    ここで、[ ] は最近接法です。

    FALSEの場合、K = 周波数ビンとなります。

    STFTが行列STFT{X},の結果である場合、STFT{X}の大きさはM x Kで、以下が真となります。

    • LXの要素数です。
    • は切り下げ演算です。

    STFT{X}を以下の式で使用して、時間/周波数共同領域のエネルギーを近似できます。

    この結果は、以下の式で示すように時間領域のエネルギーとほぼ等しくなります。

    XのSTFTの計算完了後、XのSTFTスペクトログラムが計算されます。このVIでは、STFTスペクトログラムがはSTFT{X}の要素の振幅の平方根として計算されます。FFTは対称な結果を返すため、STFTスペクトログラム{X}は以下の式で示すようにSTFT{X}の左半分だけで計算します。

    ここで、以下はTRUEです。

    • i = 0, 1, ..., M-1
    • j = 0, 1, ..., N-1
    • は切り上げ演算です。

    時間ステップに小さい値を指定すると、大きなスペクトログラムが返され、演算時間とメモリが大幅に増加する可能性があります。NIでは、スペクトログラムが512を超えないように、時間ステップを設定することをお勧めします。また、詳細データを検証する小さいサンプリングレートが必要なときに信号の長さが大きい場合、信号をより小さいセグメントに分割して各セグメントのスペクトログラムを計算してください。

    窓の長さは、STFTの時間分解能と周波数分解能に影響します。幅が狭い窓を適用すると、精度の高い時間分解能が得られますが周波数分解能の精度が低くなります。これは、窓の持続時間が短いのに対し、周波数帯域幅が広いためです。幅が広い窓を適用すると、精度の高い周波数分解能が得られますが時間分解能の精度が低くなります。これは、窓の持続時間が長いのに対し、周波数帯域幅が広いためです。

    このVIは、 force freq bins to power of 2?exclude Nyquist frequency?energy conservation? をTRUEに設定すると、LabVIEW Advanced Signal Processing Toolkitの TFA STFT Spectrogram VIと同じ結果を返します。

    サンプルプログラム

    LabVIEWに含まれている以下のサンプルファイルを参照してください。

    • labview\examples\Signal Processing\Transforms\STFT Spectrogram Demo.vi