Обнаружение высоты тона - подсчет нот

Я использую алгоритм автокорреляции для определения высоты звука монофонических звуков (гудение, свист) и получаю достаточно хорошие результаты для того, что я пытаюсь сделать. Но если я свистю мелодию с нотами 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 #

Мы видим, что правильные заметки распознаются, и они с большим количеством повторений, как я могу узнать, когда это настоящая заметка или просто переход? Есть ли какой-либо фильтр, который я могу применить к этому массиву и получать только реальные заметки GF# и D#?

Я использую этот код JavaScript: https://github.com/cwilso/pitchdetect чтобы выполнить обнаружение основного тона, и мне интересно, есть ли какой-нибудь алгоритм постобработки, который я могу применить к своим результатам, чтобы отфильтровать заметки, или если у меня есть увеличить окно по алгоритму автокорреляции.

В этой теме об обработке сигналов ( https://dsp.stackexchange.com/questions/16753/how-to-get-the-melody-from-a-signal) в принятом ответе упоминается что-то вроде простой постобработки с применением режима. фильтр на моем результате последовательности шагов. Каким будет этот режим фильтра?

1 ответ

Решение

Фильтр режима - это место, где вы видите, какие ноты встречаются чаще всего, а остальные отбрасываются. Например, если бы вы сделали простой фильтр режима и отбросили что-либо со значением меньше 20, вы бы получили 54x G, 52x F#, 28x D#, 33x D#

Однако вам придется рассчитать значение режима для использования, поскольку оно будет зависеть от темпа нот.

Другие вопросы по тегам