傅立叶分解允许您获取任何时间函数并将其描述为正弦波的总和,每个正弦波具有不同的幅度和频率。但是,如果您想使用 DFT 解决此问题,则需要确保在频域中有足够的分辨率以区分不同的频率。一旦你有了它,你就可以确定哪些频率在信号中占主导地位,并创建一个由与这些频率相对应的多个正弦波组成的信号。您说得对,采样频率为 44.1 kHz,仅查看 256 个样本,您能够在这 256 个样本中检测到的最低频率是 172 Hz 的频率。
在频域中获得足够的分辨率:
频率的幅度值“仅在某些频率,基频的倍数”,对于傅里叶分解是正确的,而不是 DFT,它将具有一定增量的频率分辨率。DFT 的频率分辨率与用于计算 DFT 的时域信号的采样率和样本数有关。减小频率间隔将使您能够更好地区分靠近的两个频率,这可以通过两种方式完成;
- 降低采样率,但这会使频率上的周期性重复更靠近。(记住这里的奈奎斯特定理)
- 增加用于计算 DFT 的样本数。如果只有 256 个样本可用,则可以执行“零填充”,其中将 0 值样本附加到数据的末尾,但是需要考虑对此的一些影响。
如何得出结论:
如果您将不同音频信号的频率内容描绘成单独的图表,您会发现幅度略有不同。这是因为各个信号的声音不会相同,并且任何信号中总是存在固有的噪声(来自环境和硬件本身)。因此,您要做的是取两个或多个 DFT 信号的平均值以去除噪声并获得更准确的频率内容表示。根据您的应用程序,如果您正在捕获的声音随着时间的推移而显着变化(例如语音或音乐),这可能是不可能的。因此,仅当所有要平均的信号在声音上几乎相等时(“同一事物”的单独单独录音),平均才有用。只是为了澄清,例如,从四个时域信号,您想创建四个频域信号(使用 DFT 方法),然后将四个频域信号的平均值计算为单个平均频域信号。这将消除噪音并让您更好地表示音频中固有的频率。
另一种解决方案:
如果您知道您的信号应该包含一定数量的主频率(不是太多)并且这些是您唯一感兴趣的,那么我建议您使用 Pisarenko 的谐波分解 (PHD) 或多信号分类 ( MUSIC,不错的缩写!)来查找这些频率(及其相应的幅度值)。这比 DFT 在计算上的密集程度低。例如。如果您知道信号包含 3 个主要频率,Pisarenko 将返回这三个频率的频率值,但请记住,DFT 揭示了更多信息,让您得出更多结论。