Рассказываю про перегрузы. Часть 1.
К прошлому посту я прикрепил фотографию великого русского математика Пафнутия Чебышева.
Среди его работ были так называемые полиномы Чебышева. Их ортогональность — то есть, грубо говоря, «перпендикулярность» в математическом смысле — нас сейчас не особо интересует.
Гораздо интереснее другое: полиномы Чебышева умеют умножать частоту.
Возьмём, например:
T₂(x) = 2x² − 1
Это обычная парабола, смещённая вниз по оси Y.
А теперь подставим вместо x косинус:
T₂(cos φ) = 2cos²φ − 1
Но из школьной тригонометрии мы знаем, что
2cos²φ − 1 = cos(2φ)
То есть на выходе мы получили косинус с вдвое большей частотой.
Как говорится, ещё один день, когда математика пригодилась в жизни.
С точки зрения звука происходит очень интересная вещь: мы подаём на вход этого полинома одну гармонику, а получаем гармонику на октаву выше.
И вообще:
Tₙ(cos φ) = cos(nφ)
То есть каждый полином Чебышева Tₙ превращает синусоиду в гармонику с частотой, умноженной на n.
Это очень важный факт. Запомним его.
⸻
А теперь про перегрузы
У любого перегруза есть передаточная характеристика.
Она показывает: если на вход подать значение X, на выходе получим Y.
То есть:
Y = f(X)
Например, одна функция может мягко округлять сигнал, другая — жёстко его обрезать. Формы могут быть совершенно разными.
Теперь представим, что мы подаём на такой перегруз чистый синус.
Что произойдёт?
На выходе уже не обязательно будет чистый синус. Нелинейность добавит к нему новые гармоники.
И вот здесь появляется очень удобный математический трюк.
Мы привыкли раскладывать периодический сигнал в ряд Фурье — на синусы и косинусы разных частот. Это позволяет буквально посмотреть, из каких гармоник состоит звук.
Но функцию самого перегруза тоже можно разложить. Например, в виде полиномов:
f(x) = a₀ + a₁x + a₂x² + a₃x³ + …
А затем вместо обычных степеней x², x³ и так далее перейти к полиномам Чебышева.
И вот тут начинается самое интересное.
Мы уже знаем, что:
T₁(cos φ) = cos φ
T₂(cos φ) = cos 2φ
T₃(cos φ) = cos 3φ
T₄(cos φ) = cos 4φ
и так далее.
Поэтому если представить характеристику перегруза как сумму полиномов Чебышева:
f(x) = a₀T₀(x) + a₁T₁(x) + a₂T₂(x) + a₃T₃(x) + …
то коэффициенты a₁, a₂, a₃... буквально говорят нам, сколько какой гармоники появится на выходе, если на вход подать синус.
То есть вместо того, чтобы прогонять синус через перегруз и потом делать FFT, мы можем посмотреть на его характеристику и сразу увидеть спектр, который он создаст.
Это очень удобно.
Более того, работает и обратная идея.
Если мы возьмём нужный набор полиномов Чебышева в нужной пропорции, то получим такую характеристику перегруза, которая при подаче синуса создаст заданный набор гармоник.
То есть, по сути, у нас появляется способ проектировать нелинейность от желаемого спектра.
И вот здесь, я думаю, становится понятно, почему это может быть интересно именно для синтеза.
Можно не спрашивать:
«Какую форму перегруза мне нарисовать, чтобы получить интересный звук?»
А спросить наоборот:
«Какие гармоники я хочу получить — и какая нелинейная характеристика мне для этого нужна?»
Думаю, для начала этой информации достаточно.
Если кто-нибудь сейчас побежит делать с помощью нейронки аддитивный синтезатор, который строит нелинейные характеристики из полиномов Чебышева — это абсолютно нормальная реакция на полученные знания.
Если что-нибудь интересное получится — пишите в комментариях. Посмотрим вместе, что из этого можно сделать.
Post #181
131

- 🔥 6
- ⚡ 1
- 🤯 1
- 👀 1