Спектр, форманты и гармоники
Учимся читать спектр: что в нём за пики и что они говорят о звуке.
Спектр — это распределение энергии звука по частотам; его пики (гармоники и форманты) несут информацию о высоте тона и о том, какой это звук.
Получив спектр, надо научиться его читать. В нём не хаос, а структура: для голоса и музыкальных инструментов пики стоят закономерно. Понимание этой структуры объясняет, почему мел-признаки так хорошо работают для речи.
Основной тон и гармоники
Когда колеблется струна или голосовые связки, возникает не одна частота, а целая серия. Самая низкая — основной тон (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: связки (источник) + рот (фильтр-форманты).
- Мел-признаки нацелены на огибающую спектра (форманты).