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


14

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

Існує 3 проблеми, які представляє FFT:

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

  2. Люди сприймають частоту логарифмічно, але відриви FFT розташовані лінійно. Наприклад, різниця в 20 Гц на нижньому кінці нашого слуху величезна , тоді як різниця в 20 Гц на високому кінці непомітна. Отже, щоб отримати потрібну точність на низьких частотах, нам доведеться обчислити набагато більше, ніж потрібно на високих частотах.

  3. Деякі з цих проблем можна вирішити за допомогою інтерполяції між бункерами FFT. Це може спрацювати з великим музичним звуком, оскільки частоти часто будуть розташовані досить далеко один від одного, і тому не більше 1 частоти просочиться в пару відрізків. Але це не завжди так, особливо для негармонічних звуків, як ударних інструментів. Тож інтерполяція - це справді лише здогадки.

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

Я думаю, що я міг би також вирішити проблему з грубою силою, співставляючи синуси / косинуси на кожній цікавій мені частоті. Я не надто чіпляюся за математику тут. Чи можливо це? Яка ефективність? Чи вирішить це мою проблему?

Чи є інший спосіб досягти більш точного розкладання сигналу в режимі реального часу? Ефективність процесора викликає занепокоєння, але не є основною проблемою - мене частково цікавить, чи теоретично це взагалі можна зробити. Однак щось ідеальне в режимі реального часу на сучасній настільній машині було б ідеально.


3
Яку проблему ви намагаєтеся вирішити? виявлення f0, виявлення множинних f0 (для транскрипції), розпізнавання акордів, моделювання тембру ...? Для деяких із цих проблем існують спеціальні рішення. Чи хвилює вас інвертивність (для використання в аналізі-> трансформації-> рамці ресинтезу)?
пішенети

Проблема, яку я намагаюся вирішити, є, безумовно, досить відкритою. У мене загальний інтерес до цифрової музики, який охоплює більшу частину вашого списку. Але моя розпливчастість почасти - за моєї відсутності знань про те , що може бути зроблено і які конкретні галузі стандарт або кращі способи вирішення кожної проблеми ви згадуєте (до Я поставив це питання, я завжди передбачається FFT був його ). Але предмет у вашому списку, який мене найбільше цікавить, - це моделювання тембру. Я також хотів би знайти способи вилучення складних тембрів, що звучать одночасно під час запису. Ресинтез є захоплюючим. Цікаві алгоритми AI.
брихойт

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

"алгоритм можна переробити таким чином, щоб частоти біна були розташовані нелінійно, тоді ми могли б досягти рівності психоакустичного рівняння на всіх частотах." Звучить як безперервна вейвлет-трансформація
Морлета

Відповіді:


5

Як я коментував попередній пост, метод частотно-частотного аналізу, відомий як "короткострокове перетворення Фур'є" , еквівалентний банку фільтрів, аналізуючи ваш сигнал x . Для даного вікна аналізу w n , розміром N , фільтр на частоті k / N дорівнює: h n = w - n e j 2 π n kXxwnNk/N

hn=wnej2πnkN

Для звичайних вікон для аналізу (Ханн, Хеммінг або навіть прямокутник) це відповідає фільтру низьких частот, з частотою відсікання близько 1/Nк

fkfk+1=21/12fk21/1212fk

Ви можете знайти реалізацію CQT тут і там, останнім часом професора Клапурі, який має досить пристойну зворотну інформацію, можна знайти тут . Аудіогрупа Telecom ParisTech також має реалізацію професора Прадо, але я її ще не пробувала.

[Браун91] Дж. Браун, "Розрахунок постійної Q спектральної трансформації", Журнал Акустичного товариства Америки, 1991, 89, 425-434

EDIT 20121014: кілька відповідей та коментарів до ваших (брихойт) питань.

  1. Просто загальні ідеї щодо ваших власних коментарів до головного питання: Ви, мабуть, зацікавлені у багатьох програмах, які, на мене, не зовсім тривіальні проблеми. "Моделювання тембру" звучить для мене більше пов'язаним із розпізнаванням мови чи подібним, для якого крок чи дозвіл частоти чи точність не є великою проблемою (розглянемо, як зазвичай обчислюються MFCC).

    Розглянемо також , як багато провідні дослідники ( Ф. Pachet і команда repmus в IRCAM, Франція , процитувати кілька) працюють на тему автоматичної імпровізації і акомпанементу: завдання не є неможливим, але вимагає спеціальних знань у багатьох областях. Підводячи підсумок, типова система повинна наслідувати слухову систему людини (принаймні), впроваджувати сприйняття звуку / музики / тону / ритму, знати теорію музики та приймати рішення, засновані на оцінках усіх попередніх кроків. Перетворення Фур'є, або будь-яке подання сигналу, є лише одним (крихітним) кроком до досягнення кінцевої мети - і, на мій погляд, це, на мою думку, найкраще зрозуміло дотепер.

    Однак, існує ймовірність, що кожен дивиться далеко за рамки того, що відбувається насправді, і ви можете розбити це в простому, таким чином елегантному рішенні! Не забудьте опублікувати про це, як тільки це буде зроблено! :-)

  2. вибірки 0,1 с на 44 кГц достатньо, щоб містити широкий діапазон частот

    Fs/N=44100/4410=10Hz

  3. FFT не може виявити це для низьких і високих частот, але ви кажете, що інші алгоритми можуть: що таке компроміс?

    Коротка відповідь: прочитайте мою тезу щодо оцінки мелодії!

    Щоб детальніше розібратися: багато алгоритму оцінки висоти тону виходять за рамки обмежень FT, завдяки припущенням звуків, які обробляються. Ми очікуємо, що ноти від природних звуків (людський голос, гобой, сакс, фортепіано ...) будуть складнішими, ніж окремі синусоїди. Більшість звукових звуків більш-менш гармонічні, це означає, що їх можна моделювати як суми синусоїд, частота яких кратна основній частоті.

    Тому корисно враховувати ці гармоніки при оцінці висоти, використовуючи методи, що використовують функції виявлення, такі як спектральні суми, спектральні продукти або функції автокореляції. Нещодавно хтось розпочав пов’язану тему .

  4. Що таке компроміси? Більш конкретно, який рівень точності частоти можна очікувати за досить коротке вікно? (Я розумію, розмір вікна в CQT мінливий - наскільки це так?) Навіть точніше, наскільки близько я зможу дістатись до моєї прибл. мета 0,5% різниці частот з вікном 0,005s?

    Як було сказано раніше, з вікном 0,005s ви можете очікувати щось на кшталт 200 Гц "витоку частоти". Це справді проблема лише тоді, коли у вас є 2 синусоїди з частотою, ближчою до 200 ГГц, так що FT не зможе показати, що це 2 різні синусоїди. Ну, ми далекі від ваших 0,5% (до речі, півтон на 6% частоти!), А 0,005s - це справді трохи для ваших цілей. Однак, якщо ви хочете надавати оцінку кожні 0,005 секунди, ви все одно можете обробляти більш довгі кадри, що перекриваються, як це зазвичай робиться при обробці мови / музики. Це те, чого ти насправді хочеш?

    Nk=Fsfk(21/B1)
    BB=48fk=100Hzвимагають близько 0,7s довгих вікон. Це нічого не означає, що ми потім втрачаємо трохи часової роздільної здатності ... Але, як згадувалося раніше, це проблема лише в тому випадку, якщо ми забудемо структуру звуку. Крім того, психоакустика вважає, що нижче 500 Гц людина насправді не так добре розрізняє синусоїди: навіть люди там кидають виклик. Звичайно, ми можемо сподіватися, що наші комп’ютери можуть зробити краще за нас, але тут ми стикаємося з важкою проблемою!

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

    [Schoerkhuber2010] Schoerkhuber, C. and Klapuri, A., "Панель інструментів перетворення постійної Q для обробки музики", 7-а конференція звуко-музичних обчислень, Барселона, Іспанія, 2010.


Невелике зауваження: CQT може допомогти вирішити точки 1 і 2, що стосуються вас, але не пункт 3. Що стосується пункту 3, завжди існує компроміс між роздільною здатністю часу та частоти, і якщо ви хочете, щоб гарне дозвіл частоти було низьким частотні компоненти, вам, швидше за все, потрібно прийняти, щоб втратити час. Тепер, для оцінки тону, можливо, будуть ще деякі рішення, ви можете прочитати мою в моїй кандидатській дисертації, якщо вас цікавить: D
Жан-Луї Дюрріє

Я не зовсім розумію. Я знаю, що ви нічого не отримуєте безкоштовно - я не можу очікувати, що алгоритм точно визначить частоти, які не були відібрані з хорошим дозволом принаймні пару періодів найнижчої частоти. Але вибірки 0,1 с на 44 кГц достатньо, щоб містити широкий діапазон частот, які людина може точно розрізнити (відносно - "ось п'ятий", "там плоска зменшена четверта" тощо), доводячи інформацію там десь. FFT не може виявити це для низьких і високих частот, але ви кажете, що інші алгоритми можуть: що таке компроміс?
брихойт

З усіх відмінних відповідей, поданих вище, CQT виглядає як найточніша відповідь на запитання, яке я задавав. Що таке компроміси? Більш конкретно, який рівень точності частоти можна очікувати за досить коротке вікно? (Я розумію, розмір вікна в CQT мінливий - наскільки це так?) Навіть точніше, наскільки близько я зможу дістатись до моєї прибл. мета 0,5% різниці частот з вікном 0,005s? (Ось моя груба здогадка про те, коли людина може почати чути щось не в настрій або переможене)
bryhoyt

5

По-перше, при класичному підході короткострокової трансформації Фур'є є альтернатива інтерполяції - зокрема, прийоми, що використовують фазову інформацію для відновлення миттєвої частоти ( див. Це питання ), яка може дуже точно визначити положення спектрального піку без збільшення розміру FFT. Недолік, як ви правильно сказали, полягає в тому, що ви не збільшуєте здатність системи розмежовувати суміжні вершини - але це вже велике поліпшення порівняно з використанням центральної частоти індексу FFT bin.

srFFT_size

Є ще один підхід грубої сили, який працює: "досліджуйте" ваші сигнали віконним складним експоненціалом (вейвлетами Габора). Вони характеризуються центральною частотою, центральним часом та пропускною здатністю (яка вимірює, як вейвлет поширюється на час чи над частотою). Вам доведеться оцінити багато, багато, багато кореляцій між вашим сигналом і цими вейвлетами за стільки ж часових зміщень, частот і пропускної здатності. Результат буде таким самим, як дуже гнучка "плитка" STFT, в якій для кожного діапазону часу та кожного частотного діапазону вибирається оптимальний розмір вікна. Окрім обчислювальної вартості, недоліком є ​​те, що не існує ефективного алгоритму та жодного причинного алгоритму (вам потрібно знати стільки зразків заздалегідь, скільки найдовший вейвлет у вашому словнику). Якщо ви хочете експериментувати з цими методами,MPTK .

k

  • k
  • Вони добре спрацьовують при наявності білого шуму - це вимагає, щоб сигнал був побілений перед аналізом; також допомагає проведення аналізу в окремих каналах банку фільтрів.

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


4

Частота чи крок? Вже є тонни науково-дослідних робіт і книг про сприйняття людьми. Але, IIRC, люди, як правило, погані в точному "витягуванні" частот, якщо вони не є основним кроком. І множинні піки частоти в "критичній смузі", як правило, сприймаються як шум. Таким чином, будь-який метод з "близькою точністю до людини" також може включати деякі невдачі в оцінці людини.

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

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

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

Остання частина вашого питання щодо продуктивності може бути червоною оселедцем. На сьогоднішній день на процесорі стільникового телефону в режимі реального часу можна зробити десятки FFT та десятки різних банків фільтрів. Враховуючи дуже ефективні бібліотеки FFT, доступні у постачальників процесорів, FFT з 1000 "зайвими" бункерами може бути ефективнішим, ніж значно менший, але більш наївний банк фільтрів.


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

2

Є багато альтернатив, але це залежить від того, що ти робиш. Фізично я б стверджував, що наші вуха більше схожі на паралельний банк фільтрів, ніж на FFT, що дає їм хороший дозвіл на час, а процес під назвою "фокусування" дає їм хорошу частотну роздільну здатність. Так, у деяких випадках теоретично можна було б використовувати фільтр-банк, але для цього потрібна велика обробка, і ви обробляєте багато даних.

Можна побачити вейвлети як набір особливо ефективних і пов'язаних з цим фільтрів. Проблема з вейвлетами для музичного та аудіо-аналізу полягає в тому, що вони, як правило, дають вам лише 1 октавну роздільну здатність (хоча ви можете робити різні речі з цього приводу, я насправді не бачив вейвлетів особливо корисними в аудіо).

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

Також існує ряд інших інструментів для конкретних застосувань.


1
хнХкмшн
Хfм=нхн+мшне-j2πнкN
Nхнм
Хfм=pхpшp-ме-j2π(p-м)кN=pхpгодм-p
годн=ш-неj2πнкN

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