Я стараюсь анализировать музыку как можно точнее. Конечно, я пробовал FFT, но у меня возникли проблемы.
Я обнаружил, что низкие частоты имеют очень низкое разрешение, чем слух человека. Я пытался очень долго использовать FFT для решения этой проблемы, но даже анализируя 8192 выборки / с с частотой дискретизации 44100 Гц (что означает отсутствие временного разрешения), я получал недостаточно разрешения на низких частотах.
Я обнаружил, что есть несколько решений.
Во-первых, квадратичная интерполяция на бинах БПФ.
Но это кажется не идеальным способом. Проблемы этого метода:
1. «Если я хочу определить частоты между бинами частоты, какие три бина я должен выбрать для интерполяции?»
2. «Даже я делаю это, нет никакой дополнительной информации о результате. Я знаю, что интерполяция - хитрый метод.
Во-вторых, извлечение каждой корзины с нужной частотой, чтобы я мог извлечь ее логарифмически.
Но есть критическая проблема вычислительных затрат: (возможно, более) N ^ 2.
В-третьих, LFT (логарифмическое преобразование Фурье).
Это требует логарифмически разнесенных выборок и дает мне результат именно того, что я искал с невероятно быстрой скоростью; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency
Но я понятия не имею с этим алгоритмом. Я пытался понять документ и реализовать его, но это было невозможно из-за отсутствия моих знаний английского и математики.
Итак, мне нужна помощь по внедрению LFT.
Если анализ, который вы намереваетесь выполнить, требует частоты сигналов в каждом бине, вы можете использовать для этого кратковременное преобразование Фурье .
Каждая ячейка БПФ выдает комплексное число, представляющее действительный и мнимый компоненты - или после некоторой фазы манипуляции и величины.
Поскольку частота = dPhi / dt, (фаза == фаза), взяв соответствующие элементы из пар последовательных спектров STFT, вы можете рассчитать частоту.
У DSP Dimension есть хорошая статья о процессе.
источник