Аналізатор спектру звуку у Phyphox

Автор Атамась Артем
Науковий співробітник НЦ "Мала академія наук України", кандидат технічних наук. Сфера наукових інтересів: розвиток технологій наукової освіти.

Завдання роботи:

Створити аналізатор спектру звуку у редакторі Phyphox webeditor.

Обладнання:

ПК, смартфон.

Основні терміни та поняття

Phyphox – Physical Phone Experiments phyphox webeditor

Теоретична частина

Перш ніж виконувати цю роботу рекомендується виконати роботи №1, №2 та №3.

Звуки, з якими ми стикаємося у повсякденному житті далеко не завжди являють собою синусоїдальні акустичні хвилі з певною постійною частотою. Реальні акустичні хвилі – це складні коливання, які можуть бути представлені як спектр, що складається з багатьох гармонічних коливань різних частот. Наступний експеримент, який ми створимо у середовищі Phyphox webeditor дозволить відображати частотний спектр звукового сигналу, отриманого з мікрофону смартфона. Він виконує швидке перетворення Фур’є (ШПФ/FFT), щоб перетворити сигнал із часової області в частотну, дозволяючи побачити, які частоти присутні в звуці та з якою амплітудою. Це важливий інструмент для аналізу акустичних явищ.

Хід роботи

  1. Відкрийте Phyphox webeditor, перейшовши за посиланням: https://phyphox.org/editor/neweditor/.
  2. Придумайте та напишіть у вкладці Main назву (Title), категорію (Category) та опис (Description) експерименту, наприклад, Simple Audio Spectrum, Acoustics, Displays the frequency spectrum of an audio signal from the microphone using Fast Fourier Transform (FFT).
  3. Перейдіть до вкладинки Input, зачепіть пазл audio на лівій бічній панелі лівою кнопкою миші та перетягніть його у пазл input на робочому полі.
  4. Здійсніть налаштування блоку audio у відповідності до рис. 1.

Рис. 1. Налаштування блоку вхідних даних

  1. Змініть назву out на recording (див. рис. 2 попередньої роботи).
  2. До автоматично створених у правому полі контейнерів даних recording та rate за допомогою кнопки Add data container додайте контейнери у відповідності до таблиці 2.
  3. Налаштуйте усі контейнери даних у відповідності до табл. 1 та рис. 2.

Таблиця 1. Налаштування контейнерів даних.

Назва

Розмір (size)

Призначення
recording

32768

Аудіосигнал

rate

1

Частота дискретизації

samples

1

Актуальна кількість відліків у буфері для FFT

half_samples

1

Половина кількості відліків (розмір унікальної частини спектра)

half_samples+1

1

Половина кількості відліків + 1 (для коректної довжини частотної осі)

frequency

1

Частота Найквіста (максимальна частота, яку можна відобразити)

fft_X

32768

Дійсна частина повного результату FFT (комплексне число)

fft_Y

32768

Уявна частина повного результату FFT (комплексне число)

half_fft_X

16384

Дійсна частина першої половини FFT (унікальна частина)

half_fft_Y

16384

Уявна частина першої половини FFT (унікальна частина)

frequency_axis

16384

Вісь частот для графіка спектра (у Гц)

fft

16384

Абсолютна величина (амплітуда) FFT спектра

Рис. 2. Контейнери даних

  1. Перейдіть у вкладку Analysis та здійсніть загальні налаштування у відповідності до рис. 3.

Рис. 3. Загальні налаштування блоку аналізу

  1. Створіть та налаштуйте наступні блоки (рис. 4).

Рис. 4. Загальний вигляд блоку аналізу

9.1. Визначення кількості відліків (count):

– з Buffer Operations перетягніть блок count.

– input: recording (з галочкою keep).

– output: samples.

Цей блок підраховує фактичну кількість відліків, які наразі доступні в буфері recording.

9.2. Розрахунок частоти Найквіста (divide):

– з Basic Math перетягніть блок divide (див. рис. 4 попередньої роботи. Знак додавання у виразі змінити на знак ділення).

– input (ділене): rate (з галочкою keep).

– input (дільник): value зі значенням 2.

– output: frequency.

Частота Найквіста дорівнює половині частоти дискретизації. Це максимальна частота, яку можна достовірно виміряти за даної частоти дискретизації.

9.3. Розрахунок половини кількості відліків (divide):

– з Basic Math перетягніть блок divide (або клацніть правою кнопкою миші на попередній блок та оберіть Duplicate).

– input (ділене): samples (з галочкою keep).

– input (дільник): value зі значенням 2.

– output: half_samples.

Визначає розмір унікальної (першої) частини спектра, яку ми будемо відображати.

9.4. Розрахунок “половини кількості відліків + 1” (add):

– з Basic Math перетягніть блок add (див. рис. 4 попередньої роботи,  або клацніть правою кнопкою миші на попередній блок, оберіть Duplicate, та у отриманому блоці знак ділення замініть на знак додавання).

– input (1-й доданок): half_samples (з галочкою keep).

– input (2-й доданок): value зі значенням 1.

– output: half_samples+1.

Ця дія потрібна для встановлення коректної довжини частотної осі, оскільки для N точок ШПФ видає N/2 + 1 унікальних частотних компонентів (включаючи постійну складову).

9.5. Генерація частотної осі (ramp):

– з Data Generation перетягніть блок ramp.

– input (start): value зі значенням 0.

– input (stop): frequency (з галочкою keep).

– input (length): half_samples+1 (з галочкою keep).

– output: frequency_axis.

Цей блок створює лінійну послідовність значень, що представляють частоти від 0 Гц до частоти Найквіста. Цей масив буде віссю X для нашого графіка спектра.

9.6. Виконання Швидкого Перетворення Фур’є (FFT):

– з Advanced Math перетягніть блок fft.

– input (re): recording (з галочкою keep).

– output (re): fft_X.

– output (im): fft_Y.

Модуль fft виконує Швидке Перетворення Фур’є над вхідними аудіоданими. Він перетворює сигнал з часової області в частотну, розкладаючи його на складові синусоїди. Результат є комплексним числом і зберігається в двох буферах: дійсна (fft_X) та уявна (fft_Y) частини.

9.7. Виділення першої половини результатів FFT (subrange):

– з Buffer Operations перетягніть блок subrange, та за допомогою Duplicate додайте до блоку ще 3 входи (input), та один вихід (output).

– input (as = from): value зі значенням 0.

– input (as = to): half_samples (з галочкою keep).

– input (as = in) (перший): fft_X.

– input (as = in) (другий): fft_Y.

– output (as = out) (перший): half_fft_X.

– output ( as = out) (другий): half_fft_Y.

Рис. 5. Створення та налаштування блоку subrange

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

9.8. Розрахунок абсолютної величини (амплітуди) спектра (formula):

– з Formula перетягніть блок formula.

– встановіть формулу: sqrt([1_]*[1_]+[2_]*[2_]).

– input: half_fft_X.

– input: half_fft_Y.

– output: fft.

Абсолютна величина комплексного числа (амплітуда частотної компоненти) обчислюється як квадратний корінь з суми квадратів дійсної та уявної частин. Це показує «силу» кожної частоти в сигналі.

  1. Перейдіть у вкладинку View, та змініть назву початкового блоку view з New View на Audio Spectrum.
  2. До блоку Audio Spectrum з лівої бокової панелі перетягніть пазл graph, а до нього перетягніть пазли x axis та y axis.
  3. Призначте для x axisfrequency_axis; для y axisfft.
  4. Здійсніть налаштування блоку наступним чином (рис. 6):

label: FFT Spectrum.

labelX: Frequency.

labelY: Amplitude.

unitX: Hz.

unitY: a.u. (arbitrary units – умовні одиниці).

Рис. 6. Налаштування блоку виведення

  1. Перейдіть у вкладку Export, перетягніть у блок export з лівої бокової панелі пазл set, та змініть його назву з New Dataset на FFT Spectrum Data.
  2. Всередину пазлу set додайте та налаштуйте два елементи data (рис. 7):

– Frequency (Hz): frequency_axis.

– Absolute Amplitude (a.u.): fft.

Рис. 7. Блок експорту даних

  1. У верхньому правому куті екрану натисніть GENERATE, а у вікні, що з’явилося – QR Code Online. Нижче має з’явитися QR-код.
  2. Підключіть смартфон до мережі Internet та відкрийте застосунок Phyphox.
  3. У застосунку натисніть кнопку Додати (+), та оберіть Додати експеримент за QR кодом.
  4. Відскануйте QR-код з монітору. На запит збереження експерименту у колекції натисніть Cancel. У застосунку має з’явитися створений вами експеримент під назвою Simple Audio Spectrum.
  5. Запустіть вимірювання на смартфоні. Спробуйте відтворювати різні звуки (голос, музику, тональні сигнали з тонгенератора). Ви повинні побачити, як графік спектра змінюється відповідно до частотного складу звуку.
  6. Зупиніть вимірювання та вийдіть із застосунку, не зберігаючи дані на телефон.
  7. У Phyphox webeditor завантажте на ПК файл створеного експерименту.

Аналіз даних

Зробіть висновки щодо характеру спектрів звуків, які ви проаналізували.