8

我一直在 iphone 上进行简单的频率检测设置。在存在谐波的情况下,使用 FFT 结果在频域中进行分析有些不可靠。我希望使用倒谱结果来帮助确定正在播放的基频。

我正在使用 AudioToolbox 框架中的 AudioQueues,并使用 Accelerate 框架进行傅里叶变换。

我的过程正是 Wikipedia 的倒谱文章中列出的 Real Power Cepstrum 的内容,具体来说:signal → FT → abs() → square → log → FT → abs() → square → power cepstrum。

我遇到的问题是倒谱结果非常嘈杂。我必须删除第一个和最后 20 个值,因为它们与其他值相比是天文数字。即使在“清理”数据之后,仍然存在大量变化 - 远远超出我对第一张图表的预期。有关频域和频域的可视化,请参见下面的图片。 快速傅里叶变换 FFT 倒谱 倒谱

当我在该图上看到频域中如此明显的赢家时,我希望在频域中看到同样清晰的结果。我玩过 A440,预计 bin 82 左右的震级最高。图表上的第三个峰值代表 bin 79,它足够接近。正如我所说,前 20 个左右的 bin 的数量级如此之大,以至于无法使用,我不得不从数据集中删除它们才能看到任何东西。倒谱数据的另一个奇怪质量是偶数仓似乎比奇数仓高得多。以下是 77-86 的频率区间:

77: 151150.0313
78:  22385.92773
79: 298753.1875
80:  56532.72656
81: 114177.4766
82:  31222.88281
83:   4620.785156
84:  13382.5332
85:     83.668259
86: 1205.023193

我的问题是如何清理频域,以使我的倒谱域结果不那么狂野。或者,帮助我更好地理解如何解释这些结果,如果它们符合倒谱分析中的预期。我可以发布我正在使用的代码示例,但它主要使用 vDSP 调用,我不知道这会有多大帮助。

4

3 回答 3

3

倒谱或倒谱分析是一种用于尝试将具有高泛音内容的信号分成两部分的技术。DC 附近的部分代表所有泛音或语音共振峰的频谱包络,这可能对说话人或乐器的识别很有用。如果该频率产生足够的谐波泛音内容,则倒谱结果中的后期峰值代表一个或多个激励频率。

由于倒谱通常在没有任何(非矩形)窗口的情况下完成,它甚至可以对干净的泛音序列产生 Sinc 响应,响应的宽度大致与泛音序列的长度或泛音的数量成反比。当然,任何轻微不和谐的泛音(如在实际乐器中发现的那样)都会使倒谱结果更加混乱。因此,倒谱峰值可能只擅长于给出基频的大致位置,这仍然可能是在进行频率估计时拒绝其他频率候选的有用结果。

“看起来干净”的倒谱可能是由非常长序列的精确谐波泛音产生的结果,其频率响应几乎平坦,这可能不是现实生活中的信号。

于 2011-03-12T19:33:18.670 回答
2

以下分析说明了倒谱在合成信号和真实信号上的性能。

首先我们检查一个合成信号。

下图显示了合成的稳态 E2 音符,使用典型的近直流分量合成,基波频率为 82.4 Hz,总共 8 个谐波为 82.4 Hz 的整数倍。合成正弦曲线被编程为生成 4096 个样本。

合成 E2 音符谱

下图显示了用于合成 E2 音符的倒谱计算的输入的特写。它是合成 E2 音符的 log(|FFT|^2) 输出。

倒谱输入:合成 E2 音符的频谱

下图显示了合成 E2 音符的倒谱。观察 12.36 处的显着非 DC 峰值。倒谱宽度为 1024(第二个 FFT 的输出),因此峰值对应于 1024/12.36 = 82.8 Hz,非常接近基波的实际 82.4 Hz。

合成 E2 注意倒谱特写

现在我们检查一个真实世界的信号。

下图显示了真实原声吉他 E2 音符的频谱。

吉他 E2 音符频谱特写

下图显示了用于对原声吉他 E2 音符进行倒谱计算的输入的特写。它是原声吉他 E2 音符的 log(|FFT|^2) 输出。

在此处输入图像描述

下图显示了原声吉他 E2 音符的倒谱。观察 542.8 处显着的非 DC 峰值。倒谱宽度为 32768(第二个 FFT 的输出),因此峰值对应于 32768/542.8 = 60.4 Hz,与实际的 82.4 Hz 基频相差甚远。

吉他 E2 注意倒谱特写

用于此分析的 E2 吉他音符的录音是在录音室条件下使用高质量麦克风以 44.1 KHz 采样的,它基本上包含零背景噪音,并且没有其他乐器或声音。

这说明了在现实世界的音频信号中使用倒谱分析来确定音高的重大挑战。

参考:

真实音频信号数据、合成信号生成、绘图、FFT 和倒谱分析在此处完成:乐器倒谱

于 2013-02-12T22:33:46.073 回答
1

如果我理解得很好,主要问题是从音频信号中检测频率。

当然你的意思是频谱中最强的频率,所以我建议使用这个优秀的图书馆http://www.schmittmachine.com/dywapitchtrack.html

“该算法的核心是一个非常强大的小波算法,Eric Larson 和 Ross Maddox 在一篇论文中进行了描述:UIUC Physics 的“Real-Time Time-Domain Pitch Tracking Using Wavelets”。”

希望这有帮助

于 2013-02-12T11:30:05.280 回答