FFT в реално време с висока разделителна способност, като същевременно поддържа ниска латентност

Прочетох всички статии в wikipedia и статии за stackoverflow за fft и резолюция. Нищо обаче не помогна да научите как да получите честота с висока разделителна способност, без да имате огромни проблеми със закъснението.

Ако разбирам правилно обработката на сигнала:

Имам честота на семплиране от 44 100 и вземам 256 блока. Тогава честотната разделителна способност ще бъде 44 100/2/256 = 86,1 Hz на честотен бин с FFT.

Постоянно виждам примери като http://www.tunelab-world.com/ и http://www.spectraplus.com/, които могат да определят честотата до 0,01 Hz.

Ако направих това с моя горен метод, ще ми трябват 4410 000 контейнера, за да получа такъв вид резолюция. При честота на дискретизация 44 100 ще отнеме 100 секунди за попълване на данните от входа.

Знам, че пропускам нещо, но не мога да разбера какво.

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

Благодаря ви предварително за помощта!


person Ryan    schedule 24.07.2011    source източник
comment
Какво е реално време? Разбирате ли, че има такова нещо като принципа на неопределеността на Хайзенберг? И защо ще отнеме 100 секунди?   -  person koan    schedule 25.07.2011
comment
Всъщност, когато вземете 256 проби от реален сигнал (без въображаема част), след fft „полезните“ контейнери преминават от индекси 0 до 128 (това е N /2 + 1) за общо 129 контейнера. Останалите са просто огледало на първите, като средният (индекс 128) контейнер е „огледалото“.   -  person villoren    schedule 23.06.2014


Отговори (3)


Ако искате FFT изход с висока честотна разделителна способност, трябва да извършите FFT върху много проби: просто няма начин да заобиколите това.

Това, което вероятно виждате в други приложения, е припокриване: те могат да направят 4096 pt FFT на първия набор от данни, след това да преминат през 256 проби и да направят още 4096 pt FFT (на 3840 от пробите, които вече са използвали, плюс нов 256 проби).

Това ви позволява да показвате редовни (различни) актуализации с фина разделителна способност на честотата. Няма да е добър за улавяне на преходни сигнали, но изглежда добре на активен дисплей.

person Adrian Taylor    schedule 24.07.2011
comment
Ще се счита ли продължителна нота на пиано за преходна? Разбирам, че това не е така, защото честотата би била донякъде постоянна. - person Ryan; 25.07.2011
comment
Не бих го помислил: преходният сигнал в този случай е нещо толкова по-късо от дължината на FFT пробата, че амплитудата му намалява през цялото време, когато не е там. Но ако имате време за извадка от 100 секунди и бележката трае само секунда, тогава да, това би било преходно: пак ще видите пик в дясната кошница, но не силен. Ако всичко останало е също толкова преходно, може и да си ОК (всичко е относително). - person Adrian Taylor; 25.07.2011
comment
@Ryan, въпреки че основната честота на една нота на пиано е постоянна, нейното хармонично съдържание във времето не е. - person heltonbiker; 12.05.2014

Причината, поради която можете да получите по-добра точност, е, че проблемът с оценката на честотата се поддава на решаване с по-висока точност от много други проблеми с оценката.

Долната граница на Cramer-Rao (CRLB) за точността е дадено от:

въведете описание на изображението тук

което означава, че дисперсията на оценката на честотата (мярка за очакваната грешка) намалява като куб на T, продължителността на измерванията. „Нормалните“ проблеми с оценката са склонни тази мярка да се спуска като квадрат на T.

Използването на максимизатора на FFT (кошчето с най-големия пик) ще ви даде само квадрат на T.

Както казва Адриан Тейлър, примерите, които давате, вероятно започват с по-голям брой проби и след това се актуализират с по-кратка продължителност.

За удоволствие, тук има някои алгоритми за оценка на честотата, които може да представляват интерес. Те са по-бързи от FFT и по-точни.

person Peter K.    schedule 25.07.2011
comment
Благодаря ви за връзката към статията и обяснението. Предполагам, че с тези алгоритми за оценка на честотата те работят върху данни във времева област, а не върху данни в честотна област, които се получават от FFT на данните. - person Ryan; 25.07.2011
comment
@Ryan, да, повечето от полезните алгоритми работят върху данни във времева област --- въпреки че има няколко, които използват FFT точки и интерполират около пика, за да получат по-точна оценка. Ако вече правите FFT по други причини, може да си струва да ги разгледате. Ако имате нужда от още насоки, уведомете ме и ще видя какво мога да направя. - person Peter K.; 25.07.2011

SpectraPlus казва „FFT анализ с висока разделителна способност до 1 048 576 точки“; това няма да ви доведе до разделителна способност от 0,01 Hz при 44,1 kHz.

TuneLab изглежда пада до 0,01 цента, но "спектърният дисплей" изглежда има разделителна способност от около 2,5 Hz при 440 Hz. "Фазовият дисплей" не е нищо особено.

Какво се опитваш да направиш? Ако просто искате да приложите тунер за китара, нямате нужда (и вероятно не искате) FFT. Без да знам нищо по-добре, бих избрал PLL.

person tc.    schedule 25.07.2011
comment
Фазовият дисплей на TuneLab наистина показва резолюция от около 2,5 Hz. Сега виждам това. Проведох tunelab през някои тестове с генератор на тонове в Audacity и успях да определя, че може да различи между 440,00 Hz и около 440,010. Така че, ако дисплеят на спектъра е само с разделителна способност от 2,5 Hz, могат ли да определят честотата, независимо от честотната разделителна способност на FFT спектъра, по някакъв друг начин? (Надявам се да направя програма за настройка на пиано.) - person Ryan; 25.07.2011
comment
Както казах, бих избрал PLL, ако вече знаете към каква нота се стремите. Можете също така да интерполирате между FFT контейнери, за да познаете пиковете; Нямам представа колко точно е това. Можете дори да се опитате да откриете присъстващите хармоници, за да определите какво е основното, но това започва да става трудно. - person tc.; 09.09.2011