3

我目前正在开发一种音频处理软件,该软件必须通过使用过零估计来检测输入信号的频率。当输入一个完美的正弦波时,估计频率并不难,但是当谈到钢琴时,声波是不同的,其背后的理论也发生了变化。

目前,软件检测到每个零并保存它与前一个之间的索引位置(以记录经过了多少样本)。

以下是一个数组,其中包含以 44.1kHz 采样的 130 Hz 钢琴 C 音符的每个零之间的样本。

44  11  36  65  56  12  37  66  52  13  38  67  51  11  39  68  50  11  47  60  49  11  48  61  47  14  47  66  43  13

任务是确定未知长度的未知模式。但是,这些模式可能有误差范围。例如,

44, 11, 36, 65
56, 12, 37, 66
52, 13, 38, 67

是模式。因此,在处理模式的均值和之后,可以很容易地检测到频率。 我怎样才能检测到这些类型的模式,知道模式,原样,它的长度是未知的。

4

1 回答 1

1

你应该先尝试低通你的信号。这将减少信号分量,包括导致额外零交叉的更高泛音。这里的重点是增加基波相对于其他谐波的强度,这些谐波实际上只是产生了无关的零交叉。

有关 EQ 的一些提示:

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

和 eq 因为它特别与音高检测有关:

http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

根据您的信号,您可能需要更陡峭的东西,例如更高阶或不同类型的滤波器。

当然,zeroX 音高检测将受到固有限制,低通可能不够。

更新:澄清了低通的目的是强调基础,而不是消除噪音。

于 2013-03-08T19:00:41.020 回答