傅里叶分解允许您采取任何时间函数,并将其描述为每个具有不同幅度和频率的正弦波之和。但是,如果您想使用DFT来解决这个问题,则需要确保在频域中有足够的分辨率来区分不同的频率。一旦你有了,你可以确定哪些频率在信号中占主导地位,并创建一个由与这些频率相对应的多个正弦波组成的信号。您说的正确的是,采样频率为44.1 kHz,只能看到256个采样,在这256个采样中能够检测到的最低频率是172 Hz的频率。
获得足够的解决方案在频域中:“仅在某些频率,基本频率的倍数”为频率
振幅值,是真对傅立叶分解,而不是DFT,这将有一个频率分辨率一定的增量。 DFT的频率分辨率与用于计算DFT的时域信号的采样率和采样数有关。降低频率间隔可以让您更好地区分靠近在一起的两个频率,这可以通过两种方式来完成;
- 降低采样率,但这会使周期性重复频率更接近。 (请记住NyQuist定理)
- 增加用于计算DFT的样本数。如果只有256个样本可用,那么可以执行“零填充”,其中将0值样本附加到数据的末尾,但对此有一些影响需要考虑。
如何得出这样一个结论:
如果你描绘出不同的音频信号的频率内容为单个图,你会发现,幅度不同升技。这是因为单个信号的声音不完全相同,并且任何信号(来自周围环境和硬件本身)总是存在固有的噪声。因此,您想要做的是取两个或更多个DFT信号的平均值以消除噪声并获得更准确的频率成分表示。根据您的应用程序,如果您捕捉的声音随着时间的推移而快速变化(例如语音或音乐),则这可能无法实现。因此,平均值仅适用于所有要平均的信号在声音上几乎相等(单独的单独记录“同一事物”)。为了澄清,例如,从四个时域信号中,您需要创建四个频域信号(使用DFT方法),然后计算四个频域信号的平均值为单个平均频域信号。这将消除噪音,并更好地表示音频中固有的频率。
的替代解决方案:
如果你知道你的信号应该包含一定数量的主频率(不要太多),这些是唯一你是有趣的,那么我建议你使用Pisarenko的谐波分解(PHD)或多重信号分类(MUSIC,很好的缩写!)来找到这些频率(及其相应的幅度值)。这与DFT相比计算密度较低。例如。如果您知道信号包含3个主频率,Pisarenko会返回这三个频率值,但请记住DFT揭示了更多信息,让您得出更多结论。
这或多或少是正确的,但请注意,重叠FFT以便获得更多频率更加频繁的时变频谱“快照”是很常见的做法。 –
@PaulR,这就是我连接的维基百科文章所要求的STFT,不是吗? –
STFT不一定重叠 - “ST”部分仅意味着“短期”,因为您将DFT/FFT应用于连续的数据块(可能会或可能不会重叠),而不是单个大块整个数据集的DFT/FFT。所以你已经在上面的前两段中描述了STFT,或多或少。 –