Быстрое измерение частоты
Мне нужно измерить частоту сигнала, пока музыканты играют музыку, и это оказывается слишком быстрым для FFT (быстрого преобразования Фурье).
Музыканты играют музыку в 90-140 ударов в минуту. Это означает, что в каждую минуту имеется 90-140 групп нот, до 8 (чаще до 4) нот в каждой группе (60/140/8 = 0,0536 с, 60/90/4 = 0,167 с), что ноты могут меняться со скоростью 6-19 нот в секунду.
Музыка использует логарифмический масштаб: диапазон, скажем, от 440 Гц до 880 Гц разделен на 12 нот, из которых только 7 используются для мелодии. (По сути, они используют только белые клавиши на пианино; когда они хотят сместить начальную частоту, они используют некоторые черные клавиши и не используют некоторые белые клавиши.) То есть частота каждой следующей ноты умножается на 2^(1/12) = 1,05946.
Чтобы сделать вещи более сложными, частота A (La) может варьироваться от 438 до 446 Гц. Теоретически, струнные инструменты могут быть настроены, в то время как духовые инструменты зависят от температуры и влажности воздуха, поэтому музыканты пересматривают частоту во время проверки звука.
Иногда музыканты и вокалисты делают ошибки по частоте, они называют это "не в ладу". Им нужно устройство, которое сообщало бы им о таких "несоответствующих ошибках". У них есть тюнеры, но тюнеры требуют воспроизведения одного и того же звука в течение примерно 1 секунды, прежде чем они начнут что-либо показывать. Это работает для настройки, но не работает во время воспроизведения музыки.
Скорее всего, тюнер делает FFT, и благодаря формуле
df = 1/T
ждет 1 секунду, чтобы получить разрешение 1 Гц.
Для A=440 Гц разница в частоте между двумя нотами составляет 440*0,05946 = 26,16 Гц, чтобы получить это разрешение по частоте, нужно использовать время захвата 0,038 с, то есть при темпе =196 ударов в минуту БПФ может различать только два отмечает, что на 98 ударов в минуту он может сообщить 50% несоответствующей ошибки при условии, что он начинает сбор данных в тот самый момент, когда изменяется высота тона. Если мы допустим изменение высоты тона в течение периода сбора данных, мы получим 49 ударов в минуту, что слишком медленно. Кроме того, очень желательно быть более точным по отношению к частоте, скажем, выявить 25% несоответствующей ошибки.
Есть ли способ измерить частоту лучше, чем FFT, то есть с лучшим разрешением за меньшее время захвата? (По крайней мере, в 2 раза лучше, в идеале, в 8 раз лучше.) В обмен на это мне не нужно различать ноты разных октав, например, как 440, так и 880 могут быть распознаны как А. (Возможно, возможны дополнительные компромиссы, просто больше ничего не приходит мне в голову прямо сейчас.)
UPD Вот действительно хороший рисунок:
UPD2
Я нашел докторскую диссертацию и программное обеспечение с открытым исходным кодом (TARTINI - инструмент для анализа музыки в реальном времени) по адресу:
http://miracle.otago.ac.nz/tartini/
(Страницы также доступны через веб-сервис архива: http://web.archive.org/ = http://archive.org/ = http://waybackmachine.org/)
1 ответ
Что касается БПФ, при условии, что узкополосное спектральное частотное содержимое является разреженным и хорошо разделенным при достаточно низком фоновом шуме, пики частоты могут быть интерполированы или подвергнуты фазовому вокодированию с гораздо более высоким разрешением, чем разнесение бинов в БПФ (разнесение бинов по отношению к инверсии длина сегмента фактических данных во временной области). Параболическая интерполяция распространена, но есть и другие, более точные интерполяционные ядра. Методы оценки частоты фазового вокодера требуют стационарности по двум перекрывающимся кадрам, однако общий промежуток этих двух кадров может быть относительно коротким.
Но максимальная спектральная частота, сообщаемая БПФ, не совпадает с частотой основного тона, воспринимаемой человеком (поскольку голоса и многие музыкальные инструменты могут излучать больше акустической спектральной энергии в серии обертонов, чем на частоте основного тона, иногда слегка негармонично). являются алгоритмами, более подходящими для оценки основного тона, чем FFT (отдельно). Частичный список в этом ответе: БПФ на iPhone, чтобы игнорировать фоновый шум и найти более низкие тона
Многие научные статьи о методах оценки высоты звука для музыки можно найти на сайте music-ir/MIREX: http://www.music-ir.org/mirex/wiki/MIREX_HOME