БПФ в реальном времени с высоким разрешением и низкой задержкой

Я прочитал все статьи в Википедии и статьи stackoverflow о fft и разрешении. Однако ничто не помогло научиться получать частоту с высоким разрешением без огромных проблем с задержкой.

Если я правильно понимаю обработку сигнала:

У меня частота дискретизации 44 100, и я беру 256 блоков. Тогда разрешение по частоте будет 44 100/2/256 = 86,1 Гц на элемент разрешения по частоте с БПФ.

Постоянно вижу примеры вроде http://www.tunelab-world.com/ и http://www.spectraplus.com/, которые способны определять частоту до 0,01 Гц.

Если бы я сделал это с помощью описанного выше метода, мне бы потребовалось 4410 000 бинов, чтобы получить такое разрешение. При частоте дискретизации 44 100 потребуется 100 секунд для заполнения входных данных.

Я знаю, что мне чего-то не хватает, но я не могу понять, что.

Как я могу получить сигнал, а затем нарисовать график или отобразить частоту пика с такой точностью, не беря миллиарды ячеек и не ожидая бесконечно?

Заранее спасибо за вашу помощь!


person Ryan    schedule 24.07.2011    source источник
comment
Что такое реальное время? Вы понимаете, что существует такая вещь, как принцип неопределенности Гейзенберга? А зачем 100 секунд?   -  person koan    schedule 25.07.2011
comment
На самом деле, когда вы берете 256 выборок реального сигнала (без мнимой части), после БПФ «полезные» ячейки идут от индексов от 0 до 128 (то есть N/2 + 1), всего 129 ячеек. Те, что остались, являются просто зеркалом первых, будучи средней (индекс 128) корзиной «зеркала».   -  person villoren    schedule 23.06.2014


Ответы (3)


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

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

Это позволяет вам показывать регулярные (разные) обновления с хорошим частотным разрешением. Он не годится для захвата переходных сигналов, но хорошо смотрится на активном дисплее.

person Adrian Taylor    schedule 24.07.2011
comment
Будет ли продолжительная нота на фортепиано считаться переходной? Насколько я понимаю, это не потому, что частота будет несколько постоянной. - person Ryan; 25.07.2011
comment
Я бы так не подумал: переходный сигнал в этом случае настолько короче, чем длина выборки БПФ, что его амплитуда уменьшается за все время его отсутствия. Но если у вас есть 100-секундное время выборки, а нота длится всего секунду, тогда да, это будет временным: вы все равно увидите пик в правом бине, но не сильный. Если все остальное так же преходяще, вы можете быть в порядке (все относительно). - person Adrian Taylor; 25.07.2011
comment
@Ryan, хотя основная частота одной фортепианной ноты постоянна, ее гармоническое содержание с течением времени не меняется. - person heltonbiker; 12.05.2014

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

Нижняя граница Крамера-Рао (CRLB) точности: >предоставлено:

введите здесь описание изображения

это означает, что дисперсия оценки частоты (мера ожидаемой ошибки) уменьшается пропорционально кубу T, продолжительности измерений. В «нормальных» задачах оценивания эта мера, как правило, уменьшается как квадрат T.

Использование максимизатора БПФ (бина с наибольшим пиком) даст вам только квадрат T.

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

Для интереса здесь есть некоторые алгоритмы оценки частоты, которые могут представлять интерес. Они быстрее, чем БПФ, и более точны.

person Peter K.    schedule 25.07.2011
comment
Спасибо за ссылку на статью и объяснение. Я предполагаю, что с этими алгоритмами оценки частоты они работают с данными во временной области, а не с данными в частотной области, которые получены из данных БПФ. - person Ryan; 25.07.2011
comment
@Ryan, да, большинство полезных алгоритмов работают с данными во временной области, хотя есть несколько, которые используют точки БПФ и интерполируют вокруг пика, чтобы получить более точную оценку. Если вы уже выполняете БПФ по другим причинам, на них стоит обратить внимание. Если вам нужно больше указателей, дайте мне знать, и я посмотрю, что я могу сделать. - person Peter K.; 25.07.2011

SpectraPlus говорит: «Анализ БПФ с высоким разрешением до 1 048 576 точек»; это не даст вам разрешения 0,01 Гц на частоте 44,1 кГц.

TuneLab, кажется, снизился до 0,01 цента, но «отображение спектра», по-видимому, имеет разрешение около 2,5 Гц при 440 Гц. В «фазовом отображении» нет ничего особенного.

Что ты пытаешься сделать? Если вы просто хотите реализовать гитарный тюнер, вам не нужен (и, вероятно, не нужен) БПФ. Не зная ничего лучше, я бы пошел на PLL.

person tc.    schedule 25.07.2011
comment
Фазовый дисплей TuneLab показывает разрешение около 2,5 Гц. Я вижу это сейчас. Я провел в Tunelab несколько тестов с тональным генератором в Audacity и смог определить, что он может различать 440,00 Гц и примерно 440,010. Итак, если отображение спектра имеет разрешение только 2,5 Гц, могут ли они определить частоту, независимую от частотного разрешения спектра БПФ, каким-либо другим способом? (Я надеюсь сделать программу для настройки фортепиано.) - person Ryan; 25.07.2011
comment
Как я уже сказал, я бы выбрал PLL, если вы уже знаете, к какой ноте стремитесь. Вы также можете интерполировать между бинами БПФ, чтобы угадать пики; Я понятия не имею, насколько это точно. Вы даже можете попытаться обнаружить присутствующие гармоники, чтобы определить, что такое основная гармоника, но это начинает становиться трудным. - person tc.; 09.09.2011