スペクトログラムの作成


10

私はこのタスクのロジックを考え出そうとしており、KissFFTソースパッケージを使用して高速フーリエ変換を実行することを計画しています。これが正しいと思われる場合はお知らせください:

  1. FFT構造を割り当てます。私が使用しているウィンドウサイズはkiss_fft_alloc(N,0,NULL,NULL) どこですかN。入力バッファはN、タイプの要素の配列になりますkiss_fft_scalar。出力バッファはN/2 + 1、タイプの要素の配列になりますkiss_fft_cpx
  2. NPCMサンプルの数(ウィンドウサイズ)をデコードします。
  3. 各PCMサンプルについて、各チャネルの振幅(符号なしサンプル)を平均し、0から2にスケーリング(65536.0で除算)して、結果を入力バッファーに格納します。
  4. 入力バッファでウィンドウ処理(つまり、ハニング)を実行します。
  5. 入力バッファーで高速フーリエ変換を実行し、出力バッファーに格納します。実際の値を入力として使用しているため、を使用できますkiss_fftr()
  6. N/2出力値については、変換されたデータの2乗された大きさを取得し、次の式を使用して値をdBスケールに変換します。 10 * log10 (re * re + im * im)
  7. N/2手順6 の値をプロットします。
  8. 入力バッファの前半を破棄し、次の(ウィンドウサイズ/ 2)PCMサンプルをデコードして、データのスケーリングとウィンドウ処理を実行します。これにより、入力ウィンドウが効果的にスライドし、処理されたPCMサンプルの計算をやり直す必要がなくなります。
  9. ステップ5にループし、すべてのサンプルが処理されるまでこれらのステップを繰り返します。
  10. 使用済みメモリをから解放しkiss_fft_alloc()ます。

FFTを実行する前に、入力ウィンドウから値を減算して、結果のDC値の大きさがゼロになるようにすることが提案されました。入力データから平均または平均を差し引くべきですか?

また、ウィンドウサイズを選択するときに考慮する必要があることは何ですか?それ以外に、KissFFTの指示に従って偶数にする必要がありますが、小さなウィンドウサイズを使用することには利点があります。それはより良いグラフを提供しますか?ウィンドウサイズを大きくすると、実行する必要があるFFTの数が減ると思いますが、ウィンドウサイズを大きくすることの唯一の利点は何ですか。

x

提供できるあらゆるガイダンスを事前に感謝します。

回答:


8

私にはかなりよさそうだ。ただし、ステップ3では、実際には信号を-​​1から1にスケーリングする必要があります。そうでない場合は、DCを追加します。平均値を差し引くとおっしゃっていましたが、スペクトログラムがDCを効果的に除外しているため、スペクトログラムがある場合はそれを表示する必要があるため、これを行うことはお勧めしません。

ウィンドウサイズの選択は、すべてトレードオフに関するものです。ウィンドウが大きくなると、周波数の分解能は高くなりますが、時間の分解能はぼやけます。ウィンドウが短いと、その逆になります。つまり、時間分解能は高くなりますが、周波数分解能はぼやけます。ウィンドウサイズの適切な選択は、分析しようとしているデータによって異なります。通常、FFTは2の累乗を好む傾向があるという理由だけで、2の累乗になります。まともな経験則では、ウィンドウは、正確にできるようにする最低周波数の周期の少なくとも約2倍の長さにする必要があります。解決します。

このトレードオフにもっとうまく対処できるかどうか疑問に思うかもしれませんが、そのためのテクニックがあります。それらは一般に、一度にいくつかの異なるFFTサイズのスペクトログラムを計算し、それらを組み合わせる必要があります。このWebページには、いくつかの優れた視覚情報があります。http//www.izotope.com/tech/aes_adapt/

ウィンドウサイズが小さすぎる場合、2つの非常に近い周波数は、両方とも同じFFTビンに入れられるため、互いに区別できない場合があります。ウィンドウサイズが大きすぎる場合は、時間内の2つの終了イベントが組み合わされるか、鋭い過渡が徐々に攻撃に変わる可能性があります。これを視覚化する方法については、私が投稿したWebページを確認してください。

ウィンドウサイズが大きくても、必ずしもFFTの数が減るとは限りません。FFTサイズの半分のオーバーラップがある短時間フーリエ変換を使用してスペクトログラムを計算することを選択しました。必要に応じて、より高いオーバーラップ係数を使用できます。ウィンドウサイズの選択は、計算する必要のあるFFTの数よりも、時間と周波数のトレードオフの問題です。スペクトログラム(または任意のSTFT)の設計では、ウィンドウサイズ、ホップサイズ、ブロック間の距離を独立したパラメーターとして選択することを考えることができます。

プロットするとき、時間は通常x軸にあり、周波数はy軸にあります(通常、線形スケールではなく対数スケール、メルスケールなど)。次に、大きさは色の強度で表されます。非常に暗い色は小さな等級に対応し、非常に明るい色は大きな等級に対応します。


あなたのリンクは死んでいるようです。更新していただけますか?
ダニエルウルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.