Логарифмическое преобразование Фурье (LFT) на аудиосигнале

9

Я стараюсь анализировать музыку как можно точнее. Конечно, я пробовал FFT, но у меня возникли проблемы.

Я обнаружил, что низкие частоты имеют очень низкое разрешение, чем слух человека. Я пытался очень долго использовать FFT для решения этой проблемы, но даже анализируя 8192 выборки / с с частотой дискретизации 44100 Гц (что означает отсутствие временного разрешения), я получал недостаточно разрешения на низких частотах.

Я обнаружил, что есть несколько решений.

Во-первых, квадратичная интерполяция на бинах БПФ.
Но это кажется не идеальным способом. Проблемы этого метода:

1. «Если я хочу определить частоты между бинами частоты, какие три бина я должен выбрать для интерполяции?»
2. «Даже я делаю это, нет никакой дополнительной информации о результате. Я знаю, что интерполяция - хитрый метод.

Во-вторых, извлечение каждой корзины с нужной частотой, чтобы я мог извлечь ее логарифмически.
Но есть критическая проблема вычислительных затрат: (возможно, более) N ^ 2.

В-третьих, LFT (логарифмическое преобразование Фурье).
Это требует логарифмически разнесенных выборок и дает мне результат именно того, что я искал с невероятно быстрой скоростью; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency

Но я понятия не имею с этим алгоритмом. Я пытался понять документ и реализовать его, но это было невозможно из-за отсутствия моих знаний английского и математики.

Итак, мне нужна помощь по внедрению LFT.

Laie
источник

Ответы:

8

Самое простое и наиболее прагматичное решение - использовать обычное БПФ достаточно большого размера, чтобы получить требуемое разрешение при самой низкой частоте, представляющей интерес. Например, если вы хотите разрешение 1 Гц на самой низкой интересующей частоте, вам понадобится 1-секундное окно FFT, т.е. размер FFT должен быть равен частоте дискретизации, например, 44100.

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

Пол Р
источник
Это странно. Я знаю, что теоретически больше нет данных. Если я использую БПФ большого размера, это правда, что он не способен анализировать очень быстрое начало музыкального инструмента. И это также правда, что я не могу получить более высокое разрешение на низкой частоте. Но как насчет человеческой слуховой системы? Как эта система получает более высокое разрешение как по времени, так и по частоте?
3
Возможно, вам следует рассмотреть иерархический подход, при котором вы определяете каждую последующую октаву с коэффициентом 2, чтобы вы могли использовать короткие временные окна на более высоких частотах и ​​более длинные временные окна на более низких частотах? Это было бы несколько аналогично банке слуховых фильтров, где полоса пропускания увеличивается с частотой.
Пол Р
Отличный подход. Долгое время goertzel на низких частотах, короткое время goertzel на высоких частотах? Имеет смысл. Но потребует больших вычислительных затрат.
Это, вероятно, более эффективно, чем делать одно большое БПФ, хотя и более сложное. Например, для 4-октавной иерархии вам может понадобиться 4 x 2048 точечных БПФ и 3 фильтра нижних частот для x2 понижающей дискретизации. Разрешение самого низкого FFT будет таким же хорошим, как и у одного FFT с 16384 точками при полной частоте дискретизации, но, поскольку FFT равен O (n log n), общая вычислительная стоимость будет намного ниже.
Пол Р
ага, БПФ 2048, с понижением частоты x2, БПФ 2048, с понижением частоты x2 .... чем у меня есть разрешение по времени и частоте, с гораздо меньшими затратами, чем 16384 БПФ. Отлично. И только сейчас у меня есть другое решение: на выборке 16384, каждый раз по Гертцелю на 32. Таким образом, с накоплением я могу извлекать как низкие, так и высокие частоты с меньшими затратами. Большое спасибо. :)
0

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

Каждая ячейка БПФ выдает комплексное число, представляющее действительный и мнимый компоненты - или после некоторой фазы манипуляции и величины.

Поскольку частота = dPhi / dt, (фаза == фаза), взяв соответствующие элементы из пар последовательных спектров STFT, вы можете рассчитать частоту.

У DSP Dimension есть хорошая статья о процессе.

Marko
источник
Похоже, я обдумываю еще более сложную проблему. Я могу использовать БПФ, но при анализе аудиосигнала это не подходит.
3
Посмотрите на «постоянную Q» версию кратковременного преобразования Фурье. Такое расположение STFT обеспечивает разрешение по частоте, которое логарифмически регулируется в соответствии с требованиями для различных частотных диапазонов.
user2718
Я посмотрю. Я думал, что это была простая операция преобразования банка фильтров, примененная к результату fft.
Laie