Есть ли алгоритм нахождения частоты без DFT или FFT?

34

Я искал в магазине приложений для Android гитарный тюнер. Я нашел приложение тюнера, которое утверждало, что оно быстрее, чем другие приложения. Он заявил, что может найти частоту без использования DFT (хотелось бы, чтобы у меня все еще был URL к этой спецификации).

Я никогда не слышал об этом. Можете ли вы получить аудиосигнал и вычислить частоту, не используя алгоритм DFT или FFT?

Slamice
источник

Ответы:

29

БПФ на самом деле не отличный способ сделать тюнер. БПФ по своей природе имеет конечное разрешение по частоте, и нелегко обнаружить очень небольшие изменения частоты без чрезмерного увеличения временного окна, что делает его громоздким и вялым.

Лучшие решения могут быть основаны на петлях фазовой автоподстройки , петли задержки автоподстройки , автокорреляции, обнаружение пересечения нуля и слежения, макс или мин обнаружения и слежения и , конечно , разумное сочетание этих методов.

Предварительная обработка всегда помогает.

Hilmar
источник
5
Способность БПФ обнаруживать небольшие изменения частоты не зависит от его длины, а зависит от отношения сигнал / шум. Учитывая достаточно низкий уровень шума и помех, интерполяция результатов БПФ может легко привести к разрешению субчастоты на одной частоте.
hotpaw2
Кто-
12

БПФ сообщает о пике или пиках частоты спектра (квантованных по размеру бина БПФ), который отличается от музыкальной высоты. Вполне возможно, что воспринимаемая частота основного тона будет полностью отсутствовать в спектре БПФ.

Некоторые из самых простых гитарных тюнеров просто использовали низкочастотную или полосовую фильтрацию и измерили время между переходами через ноль. Обратная дает оценку частоты.

Автокорреляция является еще одним распространенным методом оценки основного тона; и скользящая корреляция или другие меры самоподобия имеют множество вариаций, таких как скользящая ASDF (квадратная разность), AMDF (средняя разница), нелинейные сопоставления с образцом, адаптивная проверка только для ограниченного диапазона лагов, интерполяция лагов, оконное отображение и адаптивный выбор окна, различные весовые коэффициенты или использование теории принятия решений для выбора из нескольких возможных последовательностей истории лагов и т. д. Одна из проблем с большинством мер самоподобия - это выбор подходящей октавы, поскольку субоктава может показывать почти одинаковое сходство.

Другие возможности включают использование ФАПЧ, отфильтрованных квадратурных демодуляторов, отфильтрованных преобразований Гильберта и т. Д.

Но обратите внимание, что некоторые методы фильтрации и демодуляции DSP в вычислительном отношении почти эквивалентны выполнению 1-бина оконного ДПФ, что может или не может соответствовать ответу на ваш вопрос.

hotpaw2
источник
8

Обнаружение высоты тона может быть сделано многими универсальными и любопытными способами. Один из способов сделать это - использовать автокорреляцию . Эта статья дает пример того, как ее можно использовать. Автокорреляцию можно сделать смехотворно простой, используя 1-битный коррелятор (по какой-то причине не удалось найти приличных статей по этому вопросу). Теоретически, шаг может быть обнаружен быстрее, чем с помощью FFT, но я сомневаюсь, что он будет гораздо более точным без действительно умной предварительной обработки.

Phonon
источник
Я думаю, что ссылка не работает? ...
Spacey
Нет, все работает. Я только что проверил это.
Фонон
7

Также взгляните на относительно новое алгоритмически определенное преобразование Гильберта-Хуанга (HHT). Он может обрабатывать нестационарные нелинейные сигналы, которые могут иметь отношение к вашему применению.

Nordlöw
источник
Когда я нашел его, это был настоящий драгоценный камень, хотя он не дает вам разложения Фурье, а скорее мгновенного разложения частот.
Spacey
Большинство реальных сигналов несколько нестационарны, то есть они слегка различаются по амплитуде и частоте. HHT менее чувствителен к этим изменениям и поэтому разлагает такие сигналы более естественным образом, где части более тесно связаны с основными физическими явлениями.
Nordlöw
3

Если вы точно знаете, какую частотную ячейку вы ищете в DFT / FFT, то вы можете использовать алгоритм Гертцеля, чтобы получить значение только этой ячейки.

http://en.wikipedia.org/wiki/Goertzel_algorithm

Ashutosh
источник
1
Это не для поиска частоты, хотя.
эндолит
2

Вы можете фактически вычислить частоту сигнала, используя его псевдоспектр, который смотрит на собственные векторы его матрицы автокорреляции. Это в основном разлагает ваш сигнал на шум и сигнальные подпространства. Оттуда вы можете найти его спектр. (Вы также можете ограничить его и указать диапазон частот для проверки). Это также довольно шумоизоляция. Конечно, это параметрический метод, а не непараметрический, как DFT.

ошалевший
источник
Видимо, это использует БПФ, хотя? mathworks.com/help/toolbox/signal/ref/peig.html
эндолиты
1
@endolith Вы можете вычислить его без участия БПФ. Из корреляционной матрицы вы получаете собственные векторы, а затем шумовое подпространство. Затем вы можете создать свой собственный частотный вектор для проецирования, поэтому FFT не используются.
Spacey
1

Все зависит от того, на какой платформе вы хотите его обработать, если вам нужна простая схема, я предлагаю взорвать сигнал с усилением, превратить его в прямоугольную волну и измерить период с помощью микроконтроллера с помощью таймера.

Но если вы хотите заняться обработкой сигналов, попробуйте метод MUSIC:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Надеюсь, это поможет

кость
источник
0

Существует много методов оценки основного тона без использования DFT / FFT, некоторые из них, включая метод MUSIC, перечислены в этом документе: https://ieeexplore.ieee.org/abstract/document/6521410/ Результаты моделирования в этой статье указывают что, когда основная частота очень низкая, точный метод NLS превосходит другие среди перечисленных.

Бижу Ge
источник