Дискретизация и теорема Котельникова

Главный шаг оцифровки: как из плавной волны получить список чисел и не потерять звук.

Дискретизация (sampling) — замер амплитуды сигнала через равные промежутки времени; частота этих замеров называется частотой сэмплирования.

Аналоговый сигнал непрерывен, а память компьютера хранит отдельные числа. Чтобы перейти от одного к другому, сигнал сэмплируют: много раз в секунду измеряют его текущую амплитуду и записывают как число. Сколько раз в секунду — это частота сэмплирования (sample rate), измеряется в герцах.

Что значат 16 кГц и 44.1 кГц

Частота 16000 Гц означает 16000 замеров в секунду. Это стандарт для речи. Музыка на CD пишется с 44100 Гц. Чем выше частота сэмплирования, тем точнее воспроизведена волна, но тем больше данных.

ЧастотаГде применяется
8 кГцтелефония (узкая полоса)
16 кГцречь, ASR (Whisper)
44.1 кГцмузыка, CD
48 кГцвидео, профзвук

Теорема Котельникова-Найквиста

Возникает вопрос: какая частота сэмплирования «достаточна»? Ответ дала теорема, известная как теорема Котельникова (в западной традиции — Найквиста-Шеннона).

Чтобы без потерь восстановить сигнал, частота сэмплирования должна быть как минимум вдвое выше самой высокой частоты в сигнале.

Человек слышит примерно до 20 кГц, поэтому 44.1 кГц (чуть больше 2×20) хватает для музыки. Речь почти вся укладывается в 8 кГц по частоте, поэтому 16 кГц сэмплирования достаточно: 16/2 = 8 кГц граничная частота.

Что будет, если сэмплировать слишком редко

Если частота сэмплирования меньше удвоенной частоты сигнала, возникает алиасинг (aliasing): высокая частота «маскируется» под низкую, и восстановить исходный звук невозможно. Это слышно как искажения. Поэтому перед оцифровкой ставят антиалиасинговый фильтр, срезающий слишком высокие частоты.

Достаточно частые замеры:        Слишком редкие (алиасинг):
.-.   .-.   .-.                  .           .
   \ /   \ /                      \         /
    x     x   (ловим форму)        x-------x   (видим мнимую низкую волну)

Считаем число отсчётов

Простая, но важная арифметика: сколько чисел занимает запись. Это объясняет, почему аудио «тяжёлое».

sample_rate = 16000   # Гц, речь
duration = 10         # секунд
channels = 1          # моно

total_samples = sample_rate * duration * channels
print("Отсчётов всего:", total_samples)
print("При 16 бит на отсчёт байт:", total_samples * 2)
print("Это примерно КБ:", round(total_samples * 2 / 1024, 1))

Вывод:

Отсчётов всего: 160000
При 16 бит на отсчёт байт: 320000
Это примерно КБ: 312.5

Десять секунд речи — это 160 тысяч чисел. Теперь понятно, почему модели для звука работают с длинными последовательностями.

Хорошая аналогия дискретизации — съёмка видео кадрами. Камера не видит непрерывное движение: она делает 24 или 60 снимков в секунду, а мозг достраивает плавность. Частота сэмплирования звука — это ровно «сколько кадров в секунду» снимает АЦП с волны давления. И у видео есть свой алиасинг: вспомните, как в кино колёса машины иногда крутятся «назад». Колесо вращается быстрее, чем камера успевает снимать, и из-за редких кадров глаз видит мнимое медленное обратное движение — точно так же слишком редкое сэмплирование звука рождает мнимую низкую частоту.

Откуда вообще берётся «вдвое» в теореме Котельникова? Интуитивно: чтобы распознать одно полное колебание волны, нужно поймать хотя бы две точки — где она вверху и где внизу. Если замерять реже, эти две фазы сливаются, и горб с впадиной не отличить от прямой линии. Поэтому граница ровно на половине частоты сэмплирования называется частотой Найквиста: при 16 кГц это 8 кГц, и всё, что выше, либо отрезается фильтром заранее, либо необратимо «сложится» в слышимый диапазон как искажение.

Эта арифметика напрямую бьёт по кошельку и качеству в реальных проектах. Телефонные сети десятилетиями работали на 8 кГц, и именно поэтому по телефону трудно различить «с» и «ф»: их различия живут выше 4 кГц и просто отрезаны. Когда вы готовите данные для Whisper, важно не только взять 16 кГц, но и грамотно ресэмплировать исходник: тупое выбрасывание каждого второго отсчёта без антиалиасингового фильтра внесёт ложные частоты и ухудшит распознавание. Правильный ресэмплинг всегда сначала фильтрует, а потом прореживает.

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

Дискретизацию выполняет АЦП (аналого-цифровой преобразователь) в звуковой карте или микрофоне. Он с тактовой частотой (sample rate) «защёлкивает» текущее напряжение и передаёт его дальше как число. Точность каждого числа задаёт разрядность (об этом следующий урок). Так непрерывная волна превращается в массив, который уже можно сохранить, передать и подать в нейросеть.

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

  • Брать слишком низкую частоту сэмплирования. Ниже 2×fmax — алиасинг и потеря звука.
  • Подавать модели не ту частоту. Whisper ждёт 16 кГц; подача 44.1 кГц без ресэмплинга ломает результат.
  • Думать, что выше всегда лучше. Для речи 96 кГц — пустая трата места: полезной информации выше 8 кГц почти нет.

Итоги

  • Дискретизация — замеры амплитуды N раз в секунду (частота сэмплирования).
  • Теорема Котельникова: частота сэмплирования >= 2× максимальной частоты сигнала.
  • 16 кГц для речи, 44.1 кГц для музыки; нарушение порога даёт алиасинг.
  • Секунды звука превращаются в десятки тысяч чисел — отсюда «тяжесть» аудио.
Проверьте себя
1. Что утверждает теорема Котельникова-Найквиста?
AЧастота сэмплирования должна быть равна частоте сигнала
BЧастота сэмплирования должна быть минимум вдвое выше максимальной частоты сигнала
CЗвук нельзя оцифровать без потерь
DЧастота сэмплирования должна быть 44.1 кГц всегда
2. Почему для речи обычно достаточно 16 кГц?
AПотому что речь громкая
BПотому что основные частоты речи укладываются примерно в 8 кГц, а 16/2 = 8
CПотому что так быстрее
DЭто произвольный выбор
3. Что произойдёт при слишком низкой частоте сэмплирования?
AЗвук станет громче
BВозникнет алиасинг: высокие частоты замаскируются под низкие
CНичего не изменится
DФайл станет больше