Я пытаюсь создать простую приложение для определения высоты тона для телефона Android. Я получил телефон, чтобы отобразить график значений автокорреляции, которые я вычислил, которые хранятся в одномерном массиве удвоений. Теперь мне нужно выяснить, как обнаружить повторяющиеся шаблоны в массиве. Вот скриншот автокорреляционного графа со мной напевая устойчивый шаг:Обнаружение общего шаблона локальных максимумов в массиве 1D Java
Я попытался реализациями рекурсивного пикового ознакомительного алгоритма 1D массивов данных в этом слайде палубе: http://courses.csail.mit.edu/6.006/spring11/lectures/lec02.pdf, но я вышел из памяти ошибок на Android.
Далее я попытался реализовать что-то вроде этого алгоритма для поиска второй производной: https://stackoverflow.com/a/3869172, но значения автокорреляции, поступающие с телефона, настолько нервничают, что он находит слишком много минимумов и максимумов.
Что мне нужно, чтобы выяснить, как это сделать, это применить какой-то фильтр к данным автокорреляции, чтобы сгладить его, но я сосать математику и не знаю, что делать. Я попытался округлить значения автокорреляции до нескольких десятичных знаков, но я не получил результаты, которые я искал.
В принципе, мне нужна помощь в выяснении того, как я могу найти общие максимумы (на самом деле только первый, вероятно, будет в порядке) повторяющегося шаблона. На скриншоте выше шаблон представляет собой высокий пик, за которым следуют два более коротких пика. Мне нужно знать, когда произойдет второй высокий пик, чтобы я мог рассчитать высоту.
Средние или медные фильтры могут сгладить ваш сигнал. определите длину окна, которая соответствует вашим потребностям. – dervish