【发布时间】:2015-08-08 14:12:20
【问题描述】:
我通过相关性了解 DFT 的工作原理,并将其作为理解 FFT 结果的基础。如果我有一个以 44.1kHz 采样的离散信号,那么这意味着如果我要采集 1 秒的数据,我将有 44,100 个样本。为了在上面运行 FFT,我必须有一个 44,100 的数组和一个 N=44,100 的 DFT,以获得检测高达 22kHz 频率所需的分辨率,对吧? (因为 FFT 只能将输入与频率最高为 N/2 的正弦分量相关联)
这显然需要很多数据点和计算时间,而且我已经读到这就是短时 FT (STFT) 的用武之地。如果我随后获取前 1024 个样本(约 23 毫秒)并运行 FFT那,然后取一个重叠的1024个样本,我可以每23ms得到一次信号的连续频域。那么我该如何解释输出呢?如果 FFT 对静态数据的输出是 N/2 个数据点,带宽为 fs/(N/2),那么 STFT 频率输出的带宽是多少?
这是我在 Mathematica 中运行的一个示例:
100Hz 正弦波,44.1kHz 采样率:
然后我只对前 1024 个点运行 FFT:
然后,感兴趣的频率位于数据点 3,它应该以某种方式对应于 100Hz。我认为 44100/1024 = 43 有点像比例因子,这意味着这个小窗口中的 1Hz 信号将对应于完整数据阵列中的 43Hz 信号。但是,这会给我一个 43Hz*3 = 129Hz 的输出。我的逻辑是否正确但我的实现不正确?
【问题讨论】:
-
我认为您误解了 DFT、FFT 和 STFT。您不需要 N = 44100 来检测高达 22Khz 的频率,任何 N 都可以获得高达 22KHz 的频率(即 N 可以是 200、2000 等)。变量 N 仅影响您获得的频率分辨率,而不是最大值或最小值频率值的值。
-
STFT 用于频谱随时间变化的信号,如音乐。
-
我应该说我打算将其用于连续输入,例如音乐或麦克风。
-
是的@KillaKem。我的问题是我必须有 N=44100 才能检测到 22k 的频率。我应该说,“检测高达 22kHz 的单一频率”。谢谢你澄清这一点。然后我意识到通过应用您的评论,29Hz 错误可能是因为我的分辨率不够好。当我获得 4096 分的 STFT 时,我得到 107.6。可以看出,随着 N 的增加,这将趋向于 100Hz。 (如果您发表评论,我会接受您的评论作为答案。)再次感谢。
标签: fft