清理嘈杂的倒谱结果

bro*_*ney 8 iphone signal-processing fft pitch frequency-analysis

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

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

我的过程正是维基百科的Cepstrum文章中列出的Real Power Cepstrum,具体为:信号→FT→abs()→square→log→FT→abs()→square→power倒谱.

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

当我在频域中看到如此明显的赢家时,我希望在quefrency域中看到类似的清晰结果.我玩了A440,并希望bin 82左右的音量最高.图表上的第三个峰值代表bin 79,它足够接近.正如我所说,前20个左右垃圾桶在幅度如此天文数字的是unusuable,我不得不从数据集中删除他们为了看到什么.倒谱数据的另一个奇怪的质量是偶数箱似乎远远高于奇数箱.以下是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
Run Code Online (Sandbox Code Playgroud)

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

hot*_*aw2 3

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

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

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