Як створити графік частоти проти часу?


9

Я інженер-хімік, а не ЕЕ, тому це трохи складно.

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

Ось такий вид трансформації, який я шукаю, проілюстрований звуковою хвилею (фортепіанна нота G). Як бачимо, цей графік у вигляді трьох осей, третя зображена кольором.

Дякую!

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

Відповіді:


5

Розв’язання часу та частоти - це добре відома проблема, і дійсно існують підходи до її подолання. Для аудіосигналів деякі поширені методи включають: параметричні методи; адаптивна роздільна здатність (проаналізуйте за допомогою різних часових / частотних конфігурацій та закріпіть результати разом - Вень X. та М. Сендлер, "Композиційна спектрограма з використанням декількох перетворень Фур'є"); вейвлет / розклад на неповних базах; та використання фазової інформації для отримання точного розташування піків частоти (IFgram).

Однак виявляється, що графік, який ви показали, не використовує деяких із цих прийомів; тому я підозрюю, що це не те, що ви можете шукати. Здається, що на горизонтальній осі спостерігається деяке «розмазування» (наприклад, при t = 1,2s), і це є вірною ознакою того, що аналіз робився з великим перекриттям між шматками.

Дійсно, тривалість фрагмента та кількість кадрів аналізу за секунду не повинні бути пов’язані між собою, якщо ви дозволяєте кадрам перетинатися. Отже, якщо ви хочете використовувати кадр для аналізу довжиною 40 мс, ваша сітка не повинна бути:

кадр 1: t = 0..t = 40 мс; кадр 2: t = 40ms..t = 80ms

Це може бути:

кадр 1: t = 0..t = 40 мс; кадр 2: t = 10ms..t = 50ms

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


Як би ви пішли іншим шляхом (перетворення з спектрограми на звуковий сигнал)
Піт

4

Так, багато людей працювали над часовим частотним аналізом.

Підхід "нарізати мої дані на шматки, виконувати FFT на кожному фрагменті" - хороша ідея. Застосування "віконної функції" на кожному фрагменті, безпосередньо перед виконанням FFT, допомагає уникнути багатьох артефактів. Дозволяє також шматки перекриватися. Після цих налаштувань, ви закінчите перетворення Габора , яке, здається, є найпопулярнішим короткочасним перетворенням Фур'є (STFT).

Як ви вже зазначали, і як вказує стаття у Вікіпедії, всі короткочасні методи перетворення Фур'є мають компроміс:

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

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

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

Якщо це не працює для цього додатка, я б перейшов до інших підходів до часо -частотного представлення та часово -частотного аналізу - вейвлет-перетворення, чирлетні перетворення , дробове перетворення Фур'є (FRFT) тощо.

EDIT: Деякі вихідні коди для створення спектрограм / ділянок водоспаду з аудіоданих:

Зображення у Спектрограмі йде у зворотному напрямку від вищевказаних утиліт.


Трансформація Габора проводиться лише з вікон Гаусса. Якщо ви використовуєте інше вікно, це просто STFT. (І справжніх гауссових вікон у цифрових не існує, оскільки вони звужуються до нескінченності.)
endolith

@endolith: Ви маєте рацію. Перетворення Габора використовує "Гауссова віконна функція", яка є усіченою до кінцевої довжини - вона досить близька, але не математично ідентична ідеальній Гауссі.
Девід Кері

Я думаю, що перетворення Габора - це безперервне перетворення, використовуючи інтеграл, тож воно може мати не усічений гаусс як вікно?
ендоліт

@endolith: Так, в принципі, людина може використовувати неврізаного гаусса як вікно. На практиці, оскільки практично вся енергія Гаусса знаходиться в межах декількох сигм від центрального горба, використання усіченого вікна практично завжди не помітно відрізняється у вихідній графіку. Оскільки програмне забезпечення, яке виробляє ділянки водоспадів спектрограми, неодноразово застосовує вікно Гаусса, а потім робить FFT для кожного стовпця діаграми, "не обрізання" зробить це програмне забезпечення нестерпно повільним.
Девід Кері
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.