Чи існує алгоритм пошуку частоти без DFT або FFT?


34

Я шукав у магазині програм для Android гітарний тюнер. Я знайшов програму тюнера, яка стверджувала, що це швидше, ніж інші додатки. Він стверджував, що може знайти частоту без використання DFT (я б хотів, щоб я все ще мав URL до цієї специфікації).

Я ніколи про це не чув. Чи можете ви отримати аудіосигнал і обчислити частоту, не використовуючи алгоритм DFT або FFT?

Відповіді:


29

FFT насправді не є чудовим способом створення тюнера. FFT по суті має кінцеву роздільну здатність, і нелегко виявити дуже малі зміни частоти, не роблячи часове вікно надзвичайно довгим, що робить його непростим і млявим.

Кращі рішення можуть базуватися на фазових блоках , петлі затримки автопідстроювання , автокорреляции, виявлення перетину нуля і стеження, макс або мін виявлення і стеження і , звичайно , розумне поєднання цих методів.

Попередня обробка завжди допомагає.


5
Чи може FFT виявляти невеликі зміни частоти, не властива його довжині, а залежить від співвідношення сигнал-шум. Враховуючи достатньо низький рівень шуму та перешкод, інтерполяція результатів FFT може легко створити одночастотну роздільну здатність для підрядника.
hotpaw2

може хто - небудь допомогти мені з цим: - stackoverflow.com/questions/42359344 / ...
dreamBegin

12

FFT повідомляє про пік або піки частоти спектру (квантовані за розміром відрізка FFT), що відрізняється від музичного кроку. Можливо, що сприйнята частота тону повністю відсутня в спектрі FFT.

Деякі з найпростіших гітарних тюнерів просто використовували низькочастотну або смугову фільтрацію і вимірювали час між нульовими переправами. Зворотна дає оцінку частоти.

Автокореляція - ще один поширений метод оцінки тону; і кореляція ковзання або інші заходи подібності мають безліч варіацій, таких як ковзаючі ASDF (різниця в квадраті), AMDF (середня різниця), нелінійні відповідники шаблону, адаптивна перевірка лише для обмеженого діапазону відставань, інтерполяція затримок, вікон та адаптивний вибір вікон, різні зважування або використання теорії рішень для вибору серед декількох потенційних послідовностей історії відставання тощо. Однією з проблем більшості заходів самоподібності є вибір відповідної октави, оскільки підоктава може виявити майже однакову схожість.

Інші можливості включають використання PLL, відфільтровані квадратурні демодулятори, відфільтровані перетворення Гільберта тощо.

Але зауважте, що деякі методи фільтрації та демодуляції DSP обчислювально майже еквівалентні виконанню 1-бін віконного DFT, що може або не може відповідати на ваше запитання.


8

Виявлення пітча можна здійснити багатьма різнобічними та цікавими способами. Один із способів зробити це - за допомогою автокореляції . У цьому документі наведено приклад того, як його можна використовувати. Автокореляцію можна зробити смішно простою, використовуючи 1-розрядний корелятор (чомусь не вдалося знайти пристойних паперів). Тож теоретично крок можна виявити швидше, ніж із FFT, але я сумніваюся, що це буде набагато точніше без дійсно розумної попередньої обробки.


Я думаю, посилання розірвана? ...
Spacey

Ні, все працює. Я просто перевірив це.
Фонон

7

Погляньте також на відносно нову алгоритмічно визначену трансформацію Гільберта-Хуана (HHT). Він може обробляти нестаціонарні нелінійні сигнали, які можуть бути актуальними для вашої програми.


Це було досить дорогоцінним каменем, коли я його знайшов, хоча він не дає вам розкладу фур’є, а, швидше, миттєвого розкладання частоти.
Спейси

Більшість сигналів реального життя дещо нестаціонарні, тобто вони незначно різняться за амплітудою та частотою. HHT менш чутливий до цих змін і тим самим розкладає такі сигнали більш природним чином, коли частини більш тісно пов'язані з основними фізичними явищами.
Nordlöw



2

Ви можете фактично обчислити частоту сигналу, використовуючи його псевдоспектр, який дивиться на власні вектори його матриці автокореляції. Він в основному розкладає ваш сигнал на підпростори шуму та сигналу. Звідти ви можете знайти його спектр. (Ви також можете обмежити його і надати діапазон частот для перевірки). Це також досить захищений від шуму. Звичайно, це параметричний метод, а не непараметричний, як DFT.


Мабуть, для цього використовується FFT? mathworks.com/help/toolbox/signal/ref/peig.html
endolith

1
@endolith Ви можете обчислити його без участі FFT. З кореляційної матриці ви отримуєте власні вектори, а потім підпростір шуму. Тоді ви можете сконструювати свій власний вектор частоти для проектування, тому не використовуються FFT.
Космічний

1

Все залежить від того, на якій платформі ви хочете його обробити, якщо вам потрібна проста схема, я пропоную підірвати сигнал з посиленням і перетворити його на квадратну хвилю і виміряти період за допомогою мікроконтролера за допомогою таймера.

Але якщо ви хочете зайнятися обробкою сигналу, перегляньте метод MUSIC:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Сподіваюся, це допомагає


0

Існує багато методів оцінки тону без використання DFT / FFT, деякі з них, включаючи метод MUSIC, перераховані в цьому документі: https://ieeexplore.ieee.org/ab Abstract/document/6521410/ Результати моделювання в цій роботі вказують що коли основна частота дуже низька, точний метод NLS перевершує інших серед перелічених.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.