音高检测 - 计数音符

Pitch detection - count notes

我正在使用自相关算法对单声道声音(嗡嗡声、口哨声)执行音调检测,我得到的结果足以满足我的尝试。 但是如果我用音符 G F# D# 吹口哨并记录结果,我会得到这个序列:

2x F#
3x G
14x F#
54x G
14x G#
2x D
52x F#
6x G
14x F#
3x G
2x G
28x D#
2x D
33x D#
4x D
16x D#
2x E
2x D
2x D#

我们可以看到正确的音符被识别出来了,而且它们是重复次数较多的音符,我怎么知道它是真正的音符还是只是过渡音符?是否有任何类型的过滤器可以应用于该数组并仅获取真实音符 G F# 和 D#?

我正在使用这个 javascript 代码:https://github.com/cwilso/pitchdetect 来执行音调检测,我想知道是否有一些 post 过程算法可以应用于我的结果过滤注释或者如果我必须增加自相关算法的window。

在信号处理 (https://dsp.stackexchange.com/questions/16753/how-to-get-the-melody-from-a-signal) 的那个线程中,接受的答案提到了一些简单的 post 处理,在我的音高结果序列上应用模式过滤器。这个模式过滤器是什么?

模式过滤器是您查看哪些音符出现次数最多并丢弃其余音符的地方。例如如果你要做一个简单模式过滤器并丢弃任何值小于 20 的东西,那么你将得到 54x G、52x F#、28x D#、33x D#

但是您必须计算要使用的模式值,因为它取决于音符的速度。