Идея Фурье: любой сигнал — сумма синусов

Постигаем центральную идею всего частотного анализа: сложное колебание складывается из простых синусов.

Идея Фурье: любой (достаточно «приличный») сигнал можно представить как сумму синусоид разных частот, амплитуд и фаз. Набор этих синусов — спектр сигнала.

Это одна из красивейших идей в математике и инженерии. Жан-Батист Фурье в 1822 году показал: даже резкий, угловатый сигнал — например, прямоугольный меандр — можно собрать из плавных синусоид. Звучит невероятно, но мы сейчас увидим это своими глазами, складывая синусы и наблюдая, как из них «вырастает» прямоугольник.

Ряд Фурье для периодического сигнала

Для периодического сигнала разложение называется рядом Фурье: сигнал = сумма гармоник, частоты которых кратны основной. Меандр раскладывается в сумму нечётных гармоник синуса с убывающими амплитудами: (4/pi)*(sin(w) + sin(3w)/3 + sin(5w)/5 + ...). Соберём приближение из одной и из трёх гармоник.

import math

def square_approx(t, terms):
    s = 0.0
    for k in range(1, 2 * terms, 2):           # 1, 3, 5, ...
        s += (4 / math.pi) * math.sin(2 * math.pi * k * t) / k
    return s

one = [round(square_approx(i / 8, 1), 3) for i in range(8)]
three = [round(square_approx(i / 8, 3), 3) for i in range(8)]
print("1 гармоника: ", one)
print("3 гармоники: ", three)

Вывод:

1 гармоника:  [0.0, 0.9, 1.273, 0.9, 0.0, -0.9, -1.273, -0.9]
3 гармоники:  [0.0, 1.02, 1.103, 1.02, 0.0, -1.02, -1.103, -1.02]

С одной гармоникой это ещё гладкий синус. С тремя — вершина уже «приплюснулась» и стала ближе к плоской верхушке прямоугольника. Чем больше гармоник складываем, тем точнее воспроизводится резкий меандр.

Почему это работает: ортогональность синусов

Синусы разных частот «не мешают» друг другу: если перемножить два синуса с разными частотами и просуммировать за период, получится ноль. Это свойство называется ортогональностью. Благодаря ему каждую частоту можно «выудить» из сигнала независимо от других — на этом и держится анализ Фурье.

import math

N = 16
def dot(f1, f2):
    return round(sum(math.sin(2 * math.pi * f1 * n / N) *
                     math.sin(2 * math.pi * f2 * n / N) for n in range(N)), 3)

print("sin(1)*sin(2):", dot(1, 2), "(разные частоты -> 0)")
print("sin(3)*sin(3):", dot(3, 3), "(одна частота -> не 0)")

Вывод:

sin(1)*sin(2): 0.0 (разные частоты -> 0)
sin(3)*sin(3): 8.0 (одна частота -> не 0)

Скалярное произведение разных частот — ноль, одинаковых — нет. Значит, умножив сигнал на синус частоты f и просуммировав, мы измерим, «сколько частоты f в нём содержится». Это и есть один коэффициент спектра.

Как работает под капотом

Ряд Фурье годится для периодических сигналов, представляя их дискретным набором гармоник. Для непериодических вводят интеграл Фурье (преобразование Фурье) — там спектр непрерывный. А для конечного набора отсчётов в компьютере используют дискретное преобразование Фурье (ДПФ), которое мы реализуем в следующих уроках. Все три — варианты одной идеи: разложить сигнал по базису синусов (точнее, комплексных экспонент). Резкие фронты, как у меандра, требуют бесконечно много гармоник; обрыв ряда на конечном числе даёт характерные «звоны» у краёв — эффект Гиббса, который виден как небольшие выбросы возле скачков.

Частые ошибки

  • Думать, что сигнал «состоит» из синусов физически. Это математическое представление: синусы — удобный базис, а не «настоящие» компоненты внутри провода.
  • Ждать идеального меандра из конечного числа гармоник. Из-за эффекта Гиббса у краёв всегда остаётся выброс ~9%, сколько гармоник ни бери.
  • Путать ряд и преобразование Фурье. Ряд — для периодических (дискретный спектр), преобразование — для непериодических (непрерывный спектр).

Итог

  • Любой сигнал представим как сумма синусоид разных частот — идея Фурье.
  • Ряд Фурье раскладывает периодический сигнал на кратные гармоники.
  • Синусы разных частот ортогональны — это позволяет измерять каждую частоту отдельно.
  • Резкие фронты требуют много гармоник; обрыв ряда даёт эффект Гиббса.
Проверьте себя
1. В чём состоит главная идея анализа Фурье?
AСигнал можно сжать без потерь
BЛюбой сигнал представим как сумма синусоид разных частот
CЛюбой сигнал периодичен
DСинусы нельзя складывать
2. Что означает ортогональность синусов разных частот?
AОни всегда равны нулю
BИх произведение, просуммированное за период, равно нулю
CОни имеют одинаковую фазу
DОни не складываются
3. Почему конечная сумма гармоник не даёт идеальный меандр?
AИз-за ошибок округления
BИз-за эффекта Гиббса — выброса у резких краёв
CИз-за алиасинга
DМеандр вообще не раскладывается