Амплитуда, частота и фаза
Разбираем три ручки, которыми задают любое гармоническое колебание.
Гармонический сигнал полностью описывается тремя числами: амплитудой A (размах), частотой f (как часто колеблется) и фазой phi (с какого места начинается).
Формула x[n] = A*sin(2*pi*f*n/fs + phi) — это вся ДНК синусоиды. Три параметра, и каждый отвечает за своё ощущение: амплитуда — за громкость, частота — за высоту тона, фаза — за сдвиг во времени. Понять их по отдельности — значит понять язык спектра.
Амплитуда — размах и громкость
Амплитуда A — максимальное отклонение от нуля. Удвоить A — удвоить размах сигнала; для звука это примерно +6 дБ громкости. Амплитуда не влияет на то, какая это нота, только на то, насколько громко она звучит.
Частота — высота тона
Частота f — число полных колебаний в секунду, в герцах. 440 Гц — это нота «ля» первой октавы. Удвоение частоты — на октаву выше. Частота определяет положение пика в спектре.
Фаза — сдвиг старта
Фаза phi (в радианах) говорит, с какого места цикла начинается волна. Сдвиг на pi/2 превращает синус в косинус. На слух фазу одиночного тона мы не различаем, но при сложении нескольких волн фаза решает всё: совпадающие по фазе складываются, противофазные гасят друг друга.
import math
fs = 16
A, f, phi = 2.0, 1.0, math.pi / 2 # амплитуда 2, фаза pi/2 -> косинус*2
x = [round(A * math.sin(2 * math.pi * f * n / fs + phi), 3) for n in range(8)]
print("A=2, phi=pi/2:", x)
print("Максимум:", max(x), "(= амплитуде A)")
Вывод:
A=2, phi=pi/2: [2.0, 1.848, 1.414, 0.765, 0.0, -0.765, -1.414, -1.848] Максимум: 2.0 (= амплитуде A)
Фаза в деле: сложение и гашение
Сложим два одинаковых синуса. В фазе — амплитуда удваивается. В противофазе (сдвиг на pi) — они полностью гасят друг друга. На этом эффекте работает активное шумоподавление в наушниках.
import math
fs = 16
a = [math.sin(2 * math.pi * n / fs) for n in range(8)]
in_phase = [round(2 * v, 3) for v in a] # сумма с собой
anti = [round(v + math.sin(2 * math.pi * n / fs + math.pi), 3) for n, v in enumerate(a)]
print("В фазе (сумма): ", in_phase)
print("В противофазе: ", anti)
Вывод:
В фазе (сумма): [0.0, 0.765, 1.414, 1.848, 2.0, 1.848, 1.414, 0.765] В противофазе: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, -0.0]
Два сигнала с одинаковой амплитудой и частотой, но фазой, отличающейся на pi, дают чистый ноль. Фаза — не «мелочь», а полноправный параметр.
Как работает под капотом
Удобно объединить амплитуду и фазу в одно комплексное число. Колебание A*cos(2*pi*f*n/fs + phi) — это вещественная часть от A*e^(i*phi) * e^(i*2*pi*f*n/fs). Множитель A*e^(i*phi) называют комплексной амплитудой: его модуль — это A, а аргумент — это phi. Именно поэтому преобразование Фурье выдаёт комплексные числа: каждое несёт сразу амплитуду (модуль) и фазу (аргумент) соответствующей частоты. Так два параметра из трёх упаковываются в одно число, а третий — частота — задаётся индексом в спектре.
Частые ошибки
- Считать, что фаза не важна. Для одиночного тона на слух — да, но при сложении и фильтрации фаза определяет результат.
- Путать частоту и угловую частоту.
fв герцах,w = 2*pi*fв радианах/с; в формулах легко перепутать множитель2*pi. - Менять амплитуду, ожидая смены ноты. Высоту тона задаёт только частота; амплитуда — это громкость.
Итог
- Синус задаётся тремя числами: амплитуда A, частота f, фаза phi.
- Амплитуда — громкость, частота — высота тона, фаза — сдвиг старта.
- Противофазные волны гасят друг друга — основа активного шумоподавления.
- Амплитуду и фазу удобно объединить в комплексную амплитуду — это язык Фурье.