🎵 Обробка сигналів · Математика
📅 Березень 2026 ⏱ ≈ 9 хв читання 🔵 Середній рівень

Перетворення Фур'є

Щоразу, коли ви чуєте стиснене аудіо, завантажуєте зображення JPEG чи користуєтеся МРТ- сканером, ви користуєтеся 200-річною ідеєю Жозефа Фур'є: будь-який періодичний сигнал можна побудувати із синусоїд. Перетворення Фур'є — це, мабуть, найкорисніше рівняння в усій прикладній математиці.

1. Основна інтуїція

Уявіть, що ви обертаєте сигнал навколо кола з різними швидкостями. За більшості швидкостей додатні та від'ємні частини сигналу взаємно знищуються, і центр мас залишається біля початку координат. Але коли ви обертаєте точно з частотою компонента в сигналі, піки завжди потрапляють на той самий бік — центр мас зміщується від початку координат. Перетворення Фур'є вимірює, наскільки далеко зміщується центр мас на кожній частоті.

Цю прекрасну геометричну інтерпретацію популяризував Грант Сандерсон (3Blue1Brown), і вона прямо відповідає інтегральному означенню: ми множимо сигнал на обертову комплексну експоненту та інтегруємо за часом.

Аналогія: Подумайте про смузі. Ви не можете розрізнити окремі фрукти на смак, але «зворотний блендер» (перетворення Фур'є) міг би їх розділити. Аудіо — це смузі частот; перетворення Фур'є розділяє їх.

2. Ряди Фур'є

Для періодичних функцій Жозеф Фур'є (1822) показав, що будь-яку достатньо «добру» функцію f(t) з періодом T можна записати як нескінченну суму синусоїд:

Ряд Фур'є (комплексна форма) f(t) = Σn=−∞+∞ cₙ · ei·2π·n·t/T

cₙ = (1/T) · ∫₀ᵀ f(t) · e−i·2π·n·t/T dt

Кожен коефіцієнт cₙ — комплексне число, модуль якого є амплітудою n-ї гармоніки, а аргумент — її фазою. Цей ряд збігається до f(t) майже всюди.

Приклад — прямокутна хвиля: Прямокутна хвиля, що коливається між ±1, є сумою непарних гармонік: f(t) = (4/π)(sin t + sin(3t)/3 + sin(5t)/5 + …). Додавання більшої кількості членів робить кути різкішими.

3. Перетворення Фур'є

Для неперіодичних сигналів скінченної енергії ряд стає інтегралом — перетворенням Фур'є:

Пара неперервного перетворення Фур'є F(ξ) = ∫−∞+∞ f(t) · e−i·2π·ξ·t dt

f(t) = ∫−∞+∞ F(ξ) · e+i·2π·ξ·t

F(ξ) — це представлення f(t) в частотній області. Модуль |F(ξ)| показує, скільки частоти ξ присутньо; аргумент F(ξ) дає фазу цього компонента.

Ключові властивості

4. Дискретне перетворення Фур'є (DFT)

Комп'ютери працюють із дискретизованими даними — N відліків зі швидкістю f_s (Гц). Дискретне перетворення Фур'є бере N відліків у часовій області та повертає N коефіцієнтів частотної області:

Означення DFT X[k] = Σn=0N−1 x[n] · e−i·2πkn/N

k = 0, 1, …, N−1  (частотні біни)
x[n] — дискретизований сигнал, n = 0 … N−1

Частотна роздільна здатність становить Δf = f_s / N Гц на бін. За теоремою Найквіста найвища представна частота становить f_s / 2 — потрібно дискретизувати з подвоєною найвищою частотою, що цікавить.

Приклад Найквіста: Аудіо-CD дискретизує з частотою 44 100 Гц, охоплюючи частоти до 22 050 Гц — значно вище за межу людського слуху ~20 000 Гц.

5. Швидке перетворення Фур'є (FFT)

Наївне DFT потребує O(N²) операцій — для N = 1 000 000 це 10¹² операцій. Непридатно. Алгоритм FFT Кулі–Тьюкі (1965) використовує рекурсивну структуру DFT, щоб звести це до O(N log N):

Ключова ідея: якщо N парне, DFT розміру N можна розбити на два DFT розміру N/2 — одне для відліків з парними індексами, одне для непарних. Цей підхід «розділяй і володарюй» застосовується рекурсивно до досягнення перетворень розміру 1.

«Розділяй і володарюй» Кулі–Тьюкі X[k] = X_even[k] + W_N^k · X_odd[k]
X[k + N/2] = X_even[k] − W_N^k · X_odd[k]

W_N^k = e^(−i·2πk/N) (поворотний множник)

Для N = 1 000 000 FFT потребує ~20 мільйонів операцій замість 10¹². FFT — один із найважливіших алгоритмів, які будь-коли було відкрито. Джеймс Кулі та Джон Тьюкі опублікували його в 1965 році, хоча Гаусс використовував еквівалентний метод ще в 1805 році.

6. Де воно трапляється

🎵
Аудіо / MP3

Перцептивні кодеки перетворюють аудіо в частотну область, потім відкидають нечутні компоненти.

🖼️
JPEG / зображення

DCT (різновид Фур'є) застосовується до блоків 8×8. Високочастотні коефіцієнти квантуються геть.

🏥
МРТ-сканер

Збираються дані K-простору (частотна область); 2D обернене перетворення Фур'є відновлює зображення.

📡
Радіо / 5G

Модуляція OFDM (4G/5G/WiFi) розподіляє дані по тисячах піднесучих за допомогою IFFT/FFT.

⚛️
Квантова механіка

Хвильові функції координати та імпульсу є парами Фур'є — джерело невизначеності Гейзенберга.

🌊
Симуляція рідин

Псевдоспектральні методи розв'язують Нав'є–Стокса в частотній області (O(N log N) на крок).

🌍
Сейсмологія

Сигнали землетрусів аналізуються за частотою для визначення P-, S- та поверхневих хвиль.

🔭
Спектроскопія

FTIR-спектрометри вимірюють інтерференційні картини, потім роблять перетворення Фур'є, щоб отримати спектри поглинання.

7. Реалізація DFT на JavaScript

Ось наївне O(N²) DFT на JavaScript — правильне, але повільне. Корисне для розуміння, не для продакшну.

// Наївне DFT — O(N²). Для N ≤ 1024 цього достатньо швидко для демо.
function dft(signal) {
  const N = signal.length;
  const result = [];

  for (let k = 0; k < N; k++) {
    let re = 0, im = 0;
    for (let n = 0; n < N; n++) {
      const angle = (2 * Math.PI * k * n) / N;
      re += signal[n] * Math.cos(angle);
      im -= signal[n] * Math.sin(angle);
    }
    result.push({ re, im,
      freq: k,
      amp: Math.sqrt(re*re + im*im) / N,
      phase: Math.atan2(im, re)
    });
  }
  return result;
}

// Відновити сигнал з перших `nTerms` компонентів DFT
function idft(freq, nTerms, N) {
  const out = new Float64Array(N);
  for (let i = 0; i < N; i++) {
    for (let k = 0; k < nTerms; k++) {
      const angle = (2 * Math.PI * freq[k].freq * i) / N;
      out[i] += freq[k].amp * Math.cos(angle - freq[k].phase) * N;
    }
  }
  return out;
}

AnalyserNode з Web Audio API використовує вбудоване FFT (розміри — степені двійки до 32 768) і повертає дані амплітуди в реальному часі.

Використання у продакшні: Для великих N використовуйте FFT Кулі–Тьюкі або бібліотеку на кшталт fft.js (чистий JS, O(N log N)). Web Audio API обробляє аудіо-FFT внутрішньо зі швидкістю апаратного забезпечення.

8. Спробуйте симуляцію

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

🎵 Відкрити симуляцію Фур'є →