这个问题主要与这个答案有关:如果@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)。因此,我是否计算块内每个点的幅度,计算幅度的最高数字,然后使用公式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 块的大小。
然后这会给我每个块的频率。
这是正确的,还是我完全忽略了这一点?