Створення спектрограми


10

Я намагався розробити логіку цього завдання і планую використовувати вихідний пакет KissFFT для виконання швидкої трансформації фур'є. Будь ласка, повідомте мені, якщо це виглядає правильно:

  1. Виділяють структуру FFT, тобто. kiss_fft_alloc(N,0,NULL,NULL) Де Nрозмір вікна, який я використовую. Буфер введення буде масивом Nелементів типу kiss_fft_scalar. Вихідний буфер буде масивом N/2 + 1елементів типу kiss_fft_cpx.
  2. Розшифруйте N(розмір вікна) кількість зразків ПКМ.
  3. Для кожного зразка PCM середнє значення амплітуди кожного каналу (непідписані зразки) та масштабу від 0 до 2 (ділиться на 65536,0), зберігаючи результат у вхідному буфері.
  4. Виконайте віконце (тобто підвішування) на вхідному буфері.
  5. Виконайте швидке перетворення фур'є на вхідний буфер, зберігаючи у вихідний буфер. Оскільки я використовую реальні значення як вхідні дані, я можу використовувати kiss_fftr().
  6. Для N/2вихідних значень отримайте величину перетворених даних у квадраті та перетворіть значення у шкалу dB за такою формулою: 10 * log10 (re * re + im * im)
  7. Накресліть N/2значення з кроку 6.
  8. Відкиньте першу половину вхідного буфера, декодуючи наступні (розмір вікна / 2) зразки PCM та виконуючи масштабування та вікно даних. Це повинно ефективно ковзати вікно введення та уникати необхідності повторювати математику на оброблених зразках PCM.
  9. Переведіть цикл на етап 5, повторюючи ці кроки, поки всі зразки не будуть оброблені.
  10. Звільніть використану пам'ять від kiss_fft_alloc().

Було запропоновано я відняти значення з вікна введення, перш ніж виконувати FFT, так що отримане значення постійного струму має величину нуля. Чи слід відняти середнє чи середнє значення від вхідних даних?

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

Нарешті, коли я доходжу до того, що дані готові до побудови, як я можу зробити це? Коли в минулому я працював над деякою логікою графіка сигналу, я просто побудував 3 значення для кожного пікселя вздовж осі (мінімальна амплітуда, максимальна амплітуда, амплітуда RMS), але я не знаю, що я повинен робити дані спектрограми.х

Заздалегідь дякую за будь-які рекомендації, які ви можете надати.

Відповіді:


8

На мене це гарно виглядає. На етапі 3, проте, ви дійсно хочете масштабувати сигнал від -1 до 1, інакше ви додаєте постійний струм. Ви згадали про віднімання середнього значення - я б не рекомендував робити це для спектрограми, оскільки це ефективно фільтрує постійний струм, який спектрограма повинна показати, якщо він є.

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

Ви можете задатись питанням, чи можна краще вирішити цей компроміс, і для цього є методи: вони, як правило, включають обчислювальні спектрограми з декількома різними розмірами FFT та поєднуючи їх. На цій веб-сторінці є хороша візуальна інформація: http://www.izotope.com/tech/aes_adapt/

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

Більший розмір вікна не обов'язково зменшує кількість FFT. Ви вирішили обчислити спектрограму, використовуючи короткочасне перетворення Фур'є, де перекриття наполовину перевищує розмір FFT. Ви можете використовувати більш високий коефіцієнт накладання, якщо хочете. Вибір розміру вікна - це набагато більше значення компромісу часу / частоти, а не скільки FFT, які потрібно обчислити. Розробляючи спектрограму (або будь-яку STFT), ви можете подумати про вибір розміру вікна та розміру хопу , відстані між блоками, як незалежних параметрів.

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


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