Спектр, форманты и гармоники

Учимся читать спектр: что в нём за пики и что они говорят о звуке.

Спектр — это распределение энергии звука по частотам; его пики (гармоники и форманты) несут информацию о высоте тона и о том, какой это звук.

Получив спектр, надо научиться его читать. В нём не хаос, а структура: для голоса и музыкальных инструментов пики стоят закономерно. Понимание этой структуры объясняет, почему мел-признаки так хорошо работают для речи.

Основной тон и гармоники

Когда колеблется струна или голосовые связки, возникает не одна частота, а целая серия. Самая низкая — основной тон (F0), он определяет воспринимаемую высоту голоса. Выше идут гармоники — частоты, кратные основному тону (2×F0, 3×F0...). У мужского голоса F0 около 100–120 Гц, у женского — 200–250 Гц.

амплитуда
   |  |
   |  |     |
   |  |     |        |
   |  |     |        |        |
   |__|_____|________|________|____ частота
     F0    2·F0     3·F0     4·F0
   основной  гармоники
   тон

Форманты: «паспорт» гласного

Гармоники задают высоту, но какой именно гласный мы слышим, определяют форманты — широкие области усиления в спектре, созданные резонансами рта и горла. У «а», «и», «у» форманты стоят на разных частотах — это и есть их акустический паспорт. Именно по формантам ASR различает гласные, причём независимо от высоты голоса: F0 у мужчины и женщины разный, а расположение формант для одного гласного похоже.

ГласныйF1 (прибл.)F2 (прибл.)
инизкаявысокая
авысокаясредняя
унизкаянизкая

Находим основной тон по спектру

Смоделируем спектр с пиками на гармониках и найдём основной тон как наименьшую частоту с заметной энергией.

# спектр: (частота Гц, амплитуда)
spectrum = [(100, 0.9), (200, 0.7), (300, 0.5), (400, 0.3), (50, 0.02)]

# порог значимости
threshold = 0.1
significant = [f for f, a in spectrum if a > threshold]
f0 = min(significant)

print("Значимые частоты:", sorted(significant))
print("Основной тон F0:", f0, "Гц")
print("Это похоже на мужской голос:", 80 < f0 < 160)

Вывод:

Значимые частоты: [100, 200, 300, 400]
Основной тон F0: 100 Гц
Это похоже на мужской голос: True

Частоты 100, 200, 300, 400 — это F0 и его гармоники, ровно как у голоса. Так по спектру оценивают высоту голоса и его тип.

Чтобы прочувствовать разницу между основным тоном и формантами, вспомните шёпот. Когда вы шепчете, голосовые связки почти не вибрируют — основного тона F0 фактически нет, гармоник тоже. И всё же собеседник прекрасно различает шёпотом сказанные «а», «и» и «у»! Это прямое доказательство того, что гласный опознаётся по формантам, а не по высоте: резонансы рта и горла работают и без участия связок. Тот же эффект объясняет, почему мы понимаем речь человека с любым голосом — детским, басовитым, охрипшим: меняется источник, а фильтр-форманты остаются «паспортом» звука.

Модель source-filter удобно представлять как орган или духовой инструмент. Источник — это язычок или дрожащие губы музыканта, дающие «сырой» жужжащий звук, богатый гармониками. А труба определённой формы и длины подчёркивает одни частоты и гасит другие — ровно как полость рта формирует форманты. Поменяйте форму трубы (или артикуляцию рта) — и при том же источнике вы получите совсем другой тембр. Эта развязка источника и фильтра не только красива теоретически: на ней строился классический параметрический синтез речи, где F0 и форманты задавали отдельными «ручками».

Стоит предупредить о ловушке зашумлённого спектра. На реальной записи в районе F0 нередко торчит не один чистый пик, а несколько соседних бугорков от шума и неточности окна, и наивный поиск «минимальной значимой частоты» легко ошибётся вдвое — выдаст так называемую octave error, перепутав F0 с его второй гармоникой. Поэтому надёжные алгоритмы определения высоты (например, YIN или автокорреляционные методы) смотрят не на отдельный пик, а на повторяющуюся структуру всей серии гармоник. Это типичный для аудио урок: устойчивость даёт не одна яркая деталь, а закономерность целиком.

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

Голос моделируют как «источник + фильтр»: голосовые связки создают сигнал с основным тоном и гармониками (источник), а полость рта формой подчёркивает определённые частоты — форманты (фильтр). Эта модель source-filter лежит в основе и анализа речи, и старого параметрического синтеза TTS. Мел-спектрограмма и MFCC из следующего раздела как раз стараются захватить форму огибающей спектра (форманты), отбрасывая лишние детали.

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

  • Путать F0 и форманты. F0 — высота голоса, форманты — какой это гласный; они независимы.
  • Считать, что выше F0 — другой человек. Один человек меняет F0 при интонации, не меняя тембр.
  • Искать в спектре «слова». Спектр одного окна — это звук в моменте; слова собираются из последовательности.

Итоги

  • Основной тон F0 задаёт высоту голоса; гармоники — частоты, кратные F0.
  • Форманты — резонансы рта, по ним различают гласные независимо от высоты.
  • Модель source-filter: связки (источник) + рот (фильтр-форманты).
  • Мел-признаки нацелены на огибающую спектра (форманты).
Проверьте себя
1. Что определяет основной тон F0?
AКакой это гласный
BВоспринимаемую высоту голоса
CГромкость
DЯзык речи
2. Что такое форманты?
AКратные F0 частоты
BРезонансные области спектра, по которым различают гласные
CГромкость сигнала
DШум квантования
3. Почему форманты позволяют распознать гласный независимо от высоты голоса?
AОни зависят только от F0
BРасположение формант одного гласного похоже у разных голосов, хотя F0 разный
CФорманты всегда на 1000 Гц
DЭто неверно