Звуковая волна: от воздуха к числам
Разбираемся, что такое звук физически, прежде чем оцифровывать его.
Звуковая волна — это колебание давления воздуха во времени; громкость задаёт амплитуду колебаний, а высота тона — их частоту.
Чтобы компьютер «услышал» звук, сначала нужно понять, что он слышит. Звук — это не вещь, а процесс: источник (струна, голосовые связки, динамик) толкает воздух, создавая волны сжатия и разрежения. Эти волны добегают до уха или микрофона и заставляют мембрану колебаться.
Две главные характеристики волны
Любую простую волну описывают два числа. Амплитуда — насколько сильно отклоняется давление; чем больше, тем громче. Частота — сколько колебаний в секунду (герцы, Гц); чем выше, тем выше тон. Нота «ля» первой октавы — это 440 Гц, то есть 440 колебаний в секунду.
амплитуда ^ 1 | .-. .-. .-. | / \ / \ / 0 +--/-----\----/-----\----/-----\---> время | / \ / \ / -1 |' '-' '-' ' |<-- период T -->| частота f = 1 / T
Период T — длительность одного полного колебания. Частота — обратная величина: f = 1/T. Если период 1/440 секунды, то частота 440 Гц.
Микрофон: из воздуха в напряжение
Микрофон — это датчик, который превращает механическое колебание мембраны в электрическое напряжение. Громкий звук — большой размах напряжения, тихий — маленький. На этом этапе сигнал ещё аналоговый: непрерывный, плавный. Компьютер же оперирует числами, поэтому дальше сигнал ждёт оцифровка — о ней следующий урок.
Сложный звук — сумма простых
Реальный звук (голос, музыка) не похож на чистую синусоиду. Но есть фундаментальная идея: любой сложный звук можно представить как сумму простых синусоид разных частот и амплитуд. Это и есть основа преобразования Фурье, к которому мы придём. Покажем суммирование двух волн кодом.
import math
n = 16
# низкая частота (1 период) + высокая (3 периода), послабее
def wave(i):
low = math.sin(2 * math.pi * 1 * i / n)
high = 0.4 * math.sin(2 * math.pi * 3 * i / n)
return round(low + high, 2)
mixed = [wave(i) for i in range(n)]
print("Сложная волна:", mixed)
print("Размах:", round(max(mixed) - min(mixed), 2))Вывод:
Сложная волна: [0.0, 0.75, 0.99, 0.77, 0.6, 0.77, 0.99, 0.75, 0.0, -0.75, -0.99, -0.77, -0.6, -0.77, -0.99, -0.75] Размах: 1.98
Мы сложили две синусоиды и получили волну посложнее. Преобразование Фурье делает обратное — раскладывает такую волну на составляющие частоты.
Полезно представить звук как «волны на воде от брошенного камня». Источник — это камень: голосовые связки или динамик толкают воздух, и от них расходятся кольца уплотнений. Но есть важная оговорка: молекулы воздуха никуда не летят вместе с волной — каждая лишь покачивается туда-сюда вокруг своего места, передавая толчок соседней. Поэтому громкий крик не «гонит» поток воздуха вам в лицо; он передаёт колебание давления. Эта картина объясняет, почему звук слабеет с расстоянием: энергия одного толчка размазывается по всё большей сфере воздуха.
Чтобы прочувствовать амплитуду и частоту как независимые величины, сравните рояль и регулятор громкости. Нажимая клавиши слева направо, вы меняете частоту — звук становится выше, но громкость та же. Крутя ручку усилителя, вы меняете амплитуду — громкость растёт, но нота остаётся той же. В цифрах это значит, что можно умножить весь список отсчётов на 2 (станет громче, частота не тронута) или, наоборот, ускорить проигрывание (поднимется тон). Путаница этих осей — частый источник ошибок в обработке звука.
Почему идея «сложный звук = сумма синусоид» так важна на практике? Именно она объясняет тембр — почему скрипка и флейта, играющие одну и ту же ноту «ля» 440 Гц, звучат по-разному. Основная частота у них одинаковая, но к ней примешаны разные по силе обертоны: 880 Гц, 1320 Гц и так далее. Ухо слышит эту «приправу» из верхних синусоид как характер инструмента или голоса. Разложив звук на частоты (что и делает Фурье), модель получает доступ ровно к той информации, по которой человек узнаёт говорящего.
Как работает под капотом
Внутри компьютера звуковая волна — это просто длинный список вещественных чисел, где индекс означает момент времени, а значение — мгновенную амплитуду. Положительные значения — сжатие воздуха, отрицательные — разрежение. Ноль — тишина (давление в покое). Все операции аудио-AI — это операции над этим списком: масштабирование (громкость), сложение (микширование), сдвиг (задержка), преобразование (спектр).
Частые ошибки
- Путать амплитуду и частоту. Амплитуда — громкость, частота — высота тона; это независимые величины.
- Считать звук «одной частотой». Реальный звук — смесь множества частот.
- Забывать про знак. Отрицательные сэмплы — это не «ошибка», а разрежение воздуха; волна колеблется вокруг нуля.
Итоги
- Звук — колебание давления воздуха; амплитуда = громкость, частота = высота тона.
- Микрофон превращает колебания в аналоговое напряжение.
- Любой сложный звук — сумма простых синусоид (база для Фурье).
- В компьютере волна — список чисел: индекс = время, значение = амплитуда.