Я пытаюсь выяснить, как (если это возможно) извлечь частотные компоненты произвольного аудиосэмпла (обычно музыки), как FFT, но в моем исследовании алгоритма FFT я узнаю, что он страдает некоторыми жесткие ограничения для этой цели.
Есть 3 проблемы, которые представляет БПФ:
Поскольку разрешение бункера FFT эквивалентно размеру вашего окна, для достижения довольно разумной точности (скажем, 1 Гц) вам необходимо неоправданно длинное окно (скажем, 1 секунда). Это означает, что вы не можете быстро обнаружить переходные процессы или новые частоты. Это также означает, что проблема не может быть решена с более быстрым ЦП и более высокой частотой дискретизации - ограничение неразрывно связано со временем.
Люди воспринимают частоту логарифмически, но ячейки БПФ расположены линейно. Например, разница в 20 Гц на низком уровне нашего слуха огромна , тогда как разница в 20 Гц на верхнем уровне незаметна. Таким образом, чтобы получить точность, которая нам нужна на низких частотах, мы должны вычислить гораздо больше, чем нам требуется на высоких частотах.
Некоторые из этих проблем могут быть решены путем интерполяции между бинами FFT. Это может работать для большого количества музыкального звука, потому что частоты часто будут располагаться довольно далеко друг от друга, и поэтому не более 1 частоты попадет в пару бинов. Но это не всегда так, особенно для негармоничных звуков, таких как ударные инструменты. Так что интерполяция - это просто догадки.
Из того, что я понимаю в алгоритме DFT / FFT, выходные данные (амплитуды бина) фактически являются корреляцией синуса / косинуса на частоте каждого бина. Меня поражает, что если бы алгоритм мог быть перепроектирован так, чтобы частоты бина располагались нелинейно (т.е. мы коррелировали другой набор синусов / косинусов), то мы могли бы достичь психоакустически равного разрешения на всех частотах. Возможно ли это, или это несбыточная мечта, основанная на моем неполном понимании математики?
Я думаю, что я мог бы также решить проблему с помощью грубой силы, сопоставляя синусы / косинусы на каждой частоте, которая меня интересует. Я не слишком разбираюсь в математике здесь. Это возможно? Какого рода эффективность? Решит ли это мою проблему?
Есть ли другой способ добиться более точного частотного разложения сигнала в реальном времени? Эффективность процессора - это проблема, но не главная проблема - меня частично интересует, можно ли вообще это сделать теоретически. Однако то, что возможно в реальном времени на современном настольном компьютере, было бы идеальным.
Ответы:
Как я прокомментировал в предыдущем посте, метод частотно-временного анализа, известный как «кратковременное преобразование Фурье» , эквивалентен банке фильтров, анализирующих ваш сигнал x . Для данного окна анализа w n размера N фильтр на частоте k / N имеет вид: h n = w - n e j 2 π n kX x wn N k/N
Здесь и там вы можете найти реализации CQT, недавнюю, сделанную профессором Клапури, с довольно приличным обращением, можно найти здесь . Аудио группа в Telecom ParisTech также имеет реализацию проф. Прадо, но я еще не пробовал.
[Brown91] Дж. Браун, "Расчет константы Q спектрального преобразования", Журнал Акустического общества Америки, 1991, 89, 425-434
РЕДАКТИРОВАТЬ 20121014: некоторые ответы и комментарии на ваши (bryhoyt) вопросы.
Просто общие идеи о ваших собственных комментариях к основному вопросу: вы, кажется, интересуетесь многими приложениями, которые, на мой взгляд, не совсем тривиальные проблемы для решения. «Тембровое моделирование» звучит для меня в большей степени связанным с распознаванием речи или тому подобным, для которого высота или разрешение по частоте или точность не являются большой проблемой (рассмотрим, как обычно вычисляются MFCC).
Рассмотрим также, сколько ведущих исследователей ( Ф. Паше и группа repmus из IRCAM, Франция , чтобы привести несколько) работают над темой автоматической импровизации и сопровождения: задача не является невозможной, но требует опыта во многих областях. Подводя итог, типичная система должна имитировать слуховую систему человека (по крайней мере), реализовывать восприятие звука / музыки / высоты тона / ритма, знать о теории музыки и принимать решения на основе оценок всех предыдущих шагов. Преобразование Фурье или любое представление сигнала - это всего лишь один (крошечный) шаг к конечной цели - и, на мой взгляд, наиболее понятный на сегодняшний день.
Тем не менее, все еще существует вероятность того, что каждый смотрит далеко за пределы того, что на самом деле происходит, и что вы можете разобраться в этом в простом, таким образом, элегантном решении! Не забудьте опубликовать об этом, как только это будет сделано! :-)
Краткий ответ: прочитайте мой тезис об оценке мелодии!
Чтобы уточнить немного: многие алгоритмы оценки высоты тона выходят за пределы ограничений FT благодаря допущениям в отношении обрабатываемых звуков. Мы ожидаем, что ноты из естественных звуков (человеческий голос, гобой, саксофон, фортепиано ...) будут более сложными, чем отдельные синусоиды. Большинство тоновых звуков являются более или менее гармоничными, что означает, что они могут быть смоделированы как суммы синусоид, частота которых кратна основной частоте.
Поэтому полезно учитывать эти гармоники при оценке основного тона, так как существуют методы, использующие функции обнаружения, такие как спектральные суммы, спектральные произведения или функции автокорреляции. Кто-то недавно начал смежную тему .
Как было сказано ранее, с окном 0,005 с, вы можете ожидать что-то вроде 200 Гц "утечки частоты". Это действительно проблема только тогда, когда у вас есть 2 синусоиды с частотами, которые ближе, чем 200 Гц, так что FT не сможет показать, что это 2 разных синусоиды. Что ж, мы далеки от ваших 0,5% (кстати, полутон на 6% частоты!), А 0,005 с - это немного мало для вашей цели. Однако если вы хотите предоставлять оценку каждые 0,005 с, вы все равно можете обрабатывать более длинные перекрывающиеся кадры, как это обычно делается при обработке речи / музыки. Это то, что вы на самом деле хотите?
Наконец, обратите внимание, что существуют другие способы вычисления частотно-временного представления звука, рассмотрим, например, гамма-фильтры. Преимущество CQT, о котором я упоминал ранее, состоит в том, что существует программное обеспечение как для преобразования, так и для его инвертирования. Лично я все еще придерживаюсь STFT, хотя, из-за его простоты и потому, что до сих пор мне никогда не требовалось лучшее разрешение на низких частотах, даже для разделения источников.
[Schoerkhuber2010] Schoerkhuber, C. and Klapuri, A., «Инструменты преобразования Constant-Q для обработки музыки», 7-я Конференция по звуковым и музыкальным вычислениям, Барселона, Испания, 2010.
источник
Во-первых, с классическим подходом краткосрочного преобразования Фурье, есть альтернатива интерполяции - в частности, методы, использующие информацию о фазе для восстановления мгновенной частоты ( см. Этот вопрос ), которая может очень точно дать вам положение спектрального пика без увеличение размера БПФ. Недостаток, как вы правильно сказали, заключается в том, что вы не увеличиваете способность системы различать соседние пики - но это уже значительное улучшение по сравнению с использованием центральной частоты индекса бункера FFT.
Есть еще один метод грубой силы, который работает: «исследуйте» ваши сигналы с помощью оконной комплексной экспоненты (вейвлеты Габора). Они характеризуются центральной частотой, центральным временем и шириной полосы (которая измеряет, как вейвлет распространяется во времени или по частоте). Вам нужно будет оценить много-много-много корреляций между вашим сигналом и этими вейвлетами с таким количеством временных смещений, частот и ширины полосы, которые вы хотите. Результат будет таким же, как очень гибкий «плиточный» STFT, в котором оптимальный размер окна выбирается для каждого временного диапазона и каждого частотного диапазона. Помимо вычислительных затрат, недостатком является то, что не существует ни эффективного алгоритма, ни причинно-следственного алгоритма (вам нужно заранее знать столько образцов, сколько самого длинного вейвлета в вашем словаре). Если вы хотите экспериментировать с этими методами,MPTK .
Это вычислительно дорого, но они могут работать в режиме онлайн, с короткими окнами, если заказы модели и / или шум низкие.
источник
Частота или шаг? Уже есть тонны исследовательских работ и книг по восприятию человеческого тона. Но, IIRC, люди, как правило, плохо умеют «извлекать» частоты, если они не являются фундаментальными. А многочисленные частотные пики в «критической полосе» имеют тенденцию восприниматься как шум. Таким образом, любой метод с «почти человеческой точностью» может также включать некоторые ошибки оценки восприятия человеком.
БПФ - это просто набор фильтров, которые не оптимальны для многих целей, если только не требуются ортогональность и обратимость. Другие банки фильтров возможны, если вам не нужны эти два (а человеческое восприятие явно не требует), такие как банк частотных фильтров MEL. После того, как пик частоты определен банком частотных фильтров MEL, дальнейший анализ с использованием методов БПФ-интерполяции или фазового вокодера может быть полезен для уточнения оценки частоты любого изолированного спектрального пика частоты.
Обратите внимание, что никакая дополнительная информация фактически не собирается ни одним из этих методов фильтрации, используемых в том же диапазоне данных во временной области, по сравнению с БПФ. То, что происходит, может фактически быть потерей информации, чтобы лучше соответствовать "неточности" или аномалиям человеческой слуховой системы.
А оценка высоты тона по набору частот - это совершенно другая проблема, опять же, тема с множеством научных работ и глав в книгах по аудиологии и тому подобному.
Последняя часть вашего вопроса о производительности может быть красная сельдь. В наши дни на процессоре сотового телефона можно делать десятки БПФ и десятки различных банков фильтров в режиме реального времени. Учитывая очень эффективные библиотеки FFT, доступные от поставщиков процессоров, FFT с 1000-ю «избыточными» ячейками может быть более эффективным, чем значительно меньший, но более наивно кодированный банк фильтров.
источник
Есть много альтернатив, но это зависит от того, что вы делаете. Физически я бы сказал, что наши уши больше похожи на параллельный банк фильтров, чем на БПФ, который дает им хорошее разрешение по времени, а процесс, называемый «фокусировкой», дает им хорошее разрешение по частоте. Таким образом, в некоторых случаях вы можете теоретически использовать банк фильтров, но для этого требуется много обработки, что оставляет вам много данных для обработки.
Можно рассматривать вейвлеты как набор особенно эффективных и связанных фильтров. Проблема с вейвлетами для музыкального и аудио анализа состоит в том, что они обычно дают вам разрешение только в одну октаву (хотя вы можете делать с этим разные вещи, я не видел, чтобы вейвлеты были особенно полезны в аудио).
Другой подход заключается в использовании перекрывающихся окон FFT. Вы можете увеличить разрешение по частоте БПФ, просматривая не только информацию о величине, но и информацию о фазе. Это позволяет вам использовать намного более короткие окна, чем вы могли бы использовать в противном случае, что приводит к лучшей производительности и лучшему разрешению по времени. Перекрывающиеся окна трудно правильно повторно синтезировать, и слишком много предположений относительно фазы также может быть опасным. Как бы то ни было, такого рода уловки, вероятно, являются основой решения сложных задач частотно-временного анализа.
Существует также ряд других инструментов для конкретных приложений.
источник