この質問は主にこの回答に関連しています。@Paul R がそれを見る機会があれば、ここが理想的です。
STFT を計算した信号があります。NFFT のサイズは 256 で、オーバーラップは 128 です。これにより、出力を含む 21 の個別のブロックが生成されます。
したがって、これをヘルツに変換して、信号内のこれらのポイントごとに異なるヘルツが何であるかを確認したいと思います。次の式を使用してマグニチュードを計算しました。
sqrt(output[i][j].re * output[i][j].re + output[i][j].im * output[i][j].im)
これにより、以下が生成されます。
私は主に、次の部分がどのように機能するかについて混乱しています。たとえば、基本的に、STFT のすべてのブロック (それぞれのサイズが 256) を含む 2D ベクトルがあります。したがって、ブロック内の各ポイントのマグニチュードを計算し、マグニチュードの最大数を計算してから、式を使用しfreq = i_max * Fs / N
ますか?
もしそうなら、それは次のようになりますか(例であり、実際のデータではありません):
D0 = {0.23 + 1.58,
1.05 + 0.56,
0.58 + 1.38,
.....,
0.58 + 87.6}
= mag[0] = sqrt(0.23 * 0.23 + 1.58 * 1.58),
....
....
これにより、STFT 出力ごとに大きさのベクトルが生成されます。そこから、どれが最も高いか (7 としましょう) を計算でき、次のように計算できます。
freq = 7 * 44100 / 4
ここで、44100 = サンプル レート、4 = STFT ブロックのサイズ。
これにより、各ブロックの頻度がわかります。
これは正しいですか、それとも要点を完全に見逃していますか?