AurioTouch & FFT для инструментального тюнера

Я пытаюсь написать простой тюнер (нет, не для того, чтобы сделать еще одно приложение тюнера), и смотрю на пример исходного кода AurioTouch (кто-нибудь пытался прокомментировать этот код??).

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

Кто-нибудь использовал aurioTouch достаточно, чтобы знать, функциональный ли базовый код или это просто грубый пример?

Другие варианты у меня есть использовать FFTW или KISS FFT. У кого-нибудь есть опыт работы с ними?

Благодарю.

4 ответа

Решение

БПФ используют частотные бины, а ширина частоты бина основана на параметрах БПФ. Чтобы найти частоту, вам нужно будет записать ее с частотой, по крайней мере, вдвое превышающей самую высокую частоту, присутствующую в выборке. Затем найдите время между циклами. Если это не чистая частота, это, конечно, будет сложнее.

Вы ожидаете не то, что нужно!!

Не вина библиотеки

Независимо от того, производит ли библиотека это правильно или нет, вы ищете образец, который редко существует в реальных звуках. Только совершенная синусоидальная волна, генерируемая электронным способом, вызовет даже частичное дискретное появление "всплеска" частоты. граф. Если вы не верите этому, попробуйте запустить визуализацию "анализатора спектра" в Winamp или медиаплеере. Это не столько вина ПК.

Настоящие звуковые волны - сложные животные

Представьте себе пилообразную или квадратную волну в своем воображении. эти резкие повороты - углы или точки на волне, выглядят как тонны высших гармоник для БПФ или даже реального фурье. И если вы когда-либо видели настоящую "квадратную волну / пилообразную волну" на прицеле или даже "синусоидальную волну", создаваемую инструментом, который должен производить синусоидальную волну, взгляните на все острые закоулки и трещины всего за несколько минут. ОДНА заметка (если у вас нет прицела, просто увеличьте масштаб волны наглости - чем больше вы увеличиваете, тем выше ноты, на которые вы смотрите). Да, все эти отклонения считаются частотами.

Трудно сказать разницу между одной нотой и целым оркестром иногда в спектральном анализе.

Но я слышу отдельные заметки!

Так как ухо это делает? Он рассматривает всю форму волны. Тогда ваш нижний мозг лжет вашему верхнему мозгу о том, что вводит: одна нота, а не беспорядок обертонов.

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

Приближение: построение некоторых умов

ИГРАТЬ ноту на инструменте и "сохранить" график частоты. Сделайте это для заметок в нескольких частотных диапазонах или, что еще лучше, для всех заметок.

Затем интерполируйте ноты, чтобы заполнить пробелы (на 1/2 или 1/4 шага), умножив сохраненные графики для этого инструмента на 2^(1/12) (или 1/24 для 1/4 шага и т. Д.).

Узнайте, как хранить их в быстро доступной структуре данных, такой как BST или Trie. Только это должно было бы вернуть оценку "насколько близко это". Это должно было бы идентифицировать совпадение также через пропорции частот, в случае, если это прибыло в различные объемы.

Использование смартов

В следующий раз, когда вы ищете ноту от этого инструмента, просто возьмите "услышанный" график частот и найдите его в этой структуре данных. Вы можете записать несколько инструментов, которые создают различные формы волны, и искать их тоже. Если есть фоновые звуки или несколько нот, возьмите ближайшее совпадение. Затем, если вы хотите идентифицировать другие ноты, "вычтите" найденную частотную комбинацию из выборочной и промойте, а затем повторите.

Это не сработает твоим голосом...

Если вы когда-нибудь пытались настроиться на пение под гитарный тюнер, вы поймете, что тюнеры не такие умные. Конечно, некоторые инструменты (Voice ESP) действительно плавают вокруг поля и генерируют постоянно развивающуюся форму волны (даже без пения).

Что вы пытаетесь достичь?

Вам не нужно было бы полностью придумывать это для "простого" приложения тюнера, но если вы не делаете их просто для другого приложения тюнера, я предполагаю, что вы действительно хотите идентифицировать ноты (например, возможно, вы хотите автоматически генерировать миди-файлы из песни на радио;-)

Удачи. Я надеюсь, что вы найдете библиотеку, которая делает весь этот мусор вместо того, чтобы катиться самостоятельно.

Редактировать 2017

Обратите внимание на эту веб-страницу: http://www.feilding.net/sfuad/musi3012-01/html/lectures/015_instruments_II.htm Хорошо вниз по странице, есть анализ спектра различных органов органа. Есть много, много обертонов. Их можно обнаружить - при достаточной работе - если вы сначала "обучаете" свое приложение с ними (как если бы вы рассказывали ребенку: "Вот как звучит кларнет"...)

aurioTouch выглядит странно, потому что ось частоты находится в линейном масштабе. Очень сложно интерпретировать вывод БПФ, когда ось x представляет собой что-то отличное от логарифмического масштаба (традиционно log2).

Если вы не можете использовать целочисленное FFT для aurioTouch, посмотрите мою библиотеку: http://github.com/alexbw/iPhoneFFT

Он использует двойную точность, поддерживает несколько типов окон и реализует метод Уэлча (который должен давать более стабильные спектры при просмотре во времени).

@zaph, БПФ вычисляет истинное дискретное преобразование Фурье. Это просто эффективный алгоритм, который использует побитовое представление цифровых сигналов.

Я использую БПФ Ooura для вычисления БПФ данных акселерометра. Я не всегда получаю правильный спектр. По какой-то причине Ooura FFT дает совершенно неправильные результаты со спектральными величинами порядка 10^200 на всех частотах.

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