Кто знает самый надежный алгоритм для хроматического инструментального тюнера?
Я пытаюсь написать тюнер инструмента. Я пробовал следующие два алгоритма:
-
FFT, чтобы создать периодограмму приветствия, а затем определить пиковую частоту
-
Простая автокорреляция (http://en.wikipedia.org/wiki/Autocorrelation)
Я столкнулся со следующими основными проблемами:
-
Точность 1: в БПФ фиксируется связь между выборкой, длиной записи и размером ячейки. Это означает, что мне нужно записать 1-2 секунды данных, чтобы получить точность в несколько центов. Это не совсем то, что я бы назвал в реальном времени.
-
Точность 2: автокорреляция работает немного лучше. Чтобы получить необходимую точность в несколько центов, мне пришлось ввести линейную интерполяцию образцов.
-
Надежность: в случае гитары я вижу много обертонов. Некоторые обертоны на самом деле сильнее основного тона, создаваемого струной. Я не мог найти надежный способ выбора правильной строки.
Тем не менее, любой дешевый электронный тюнер работает более надежно, чем моя реализация. Как реализованы эти тюнеры?