如何在频率中指定一定数量的fft点

How to specify a certain number of fft points in a frequency

如果我的问题没有任何意义,我提前道歉。我自己也很困惑,因为我很难理解它。这是一个一般性问题,我需要为我目前正在处理的代码回答这个问题。

我的音频文件 (wav) 的采样率为 44.1 kHz,我想在该文件上使用 FFT。如果我是对的,那就意味着,1秒内有44100点。我已经满足奈奎斯特香农定理的规则,即我的 fs/2 > fmax。我的频率分辨率为 4096。我定义了一个变量,即 300 Hz。我想知道里面有多少点。

如果您的意思是 FFT 大小为 4096,采样率为 44.1 kHz,则每个 bin 的分辨率为 44100/4096 = 10.7666015625 Hz,并且 300 Hz 正弦波将在具有索引的 bin 处具有峰值4096*300/44100 = 27.863945578231293,因此在实践中它将在 bin 索引 28 处具有最大值,并且在相邻的 bin 中有一些能量。 (请注意,这是使用从 0 开始的索引的通用约定 - 如果您使用的是 MATLAB,那么索引很可能是基于 1 的,您需要对此进行补偿。)

有关 bin 索引如何与频率相关的更详细说明,请参阅 this useful answer