C的未知模式提取

时间:2013-03-08 16:16:05

标签: c signal-processing extraction

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

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

以下是一个数组,其中包含以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

是模式。因此,在处理模式的平均和之后,可以容易地检测频率。 如何识别这些类型的模式,知道模式,模式和长度是未知的。

1 个答案:

答案 0 :(得分:0)

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

关于情商的一些提示:

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

和eq因为它特别涉及音高检测:

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

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

当然,零x间距检测本身就是有限的,低通可能还不够。

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