我了解基于相关的DFT如何工作,并以此为基础理解FFT的结果。如果我有一个被采样率为44.1kHz的离散信号,那么这意味着如果我要取1秒钟的数据,我将有44,100个样本。为了在此信号上运行FFT,我需要一个包含44,100个元素的数组和一个N=44,100的DFT,以获得检测频率高达22kHz所需的分辨率,对吗?(因为FFT只能将输入与最高频率为N/2的正弦成分进行相关)。
这显然是大量的数据点和计算时间,我已经了解到这就是短时傅里叶变换(STFT)的用途。然后我取前1024个样本(约23毫秒)并在其上运行FFT,接着取一个重叠的1024个样本,我就能每隔23毫秒得到连续的信号频域。那么我该如何解释输出结果呢?如果FFT在静态数据上的输出是N/2个数据点,具有fs/(N/2)带宽,那么STFT频率输出的带宽是多少?
以下是我在Mathematica中运行的一个例子:
44.1kHz采样率下的100Hz正弦波:
然后我只对前1024个点进行FFT:
感兴趣的频率在数据点3处,应该与100Hz有关。我认为44100/1024 = 43这样一个缩放因子,这意味着在此小窗口中具有1Hz信号将对应于完整数据数组中的43Hz信号。然而,这会给出129Hz的输出。我的逻辑正确但实现可能存在问题吗?
这显然是大量的数据点和计算时间,我已经了解到这就是短时傅里叶变换(STFT)的用途。然后我取前1024个样本(约23毫秒)并在其上运行FFT,接着取一个重叠的1024个样本,我就能每隔23毫秒得到连续的信号频域。那么我该如何解释输出结果呢?如果FFT在静态数据上的输出是N/2个数据点,具有fs/(N/2)带宽,那么STFT频率输出的带宽是多少?
以下是我在Mathematica中运行的一个例子:
44.1kHz采样率下的100Hz正弦波:
![enter image description here](https://istack.dev59.com/zGFLm.webp)
![enter image description here](https://istack.dev59.com/bBc8A.webp)