Алгоритм Карплуса — Стронга

Алгоритм Карплуса-Стронга для синтеза струны — способ синтеза звука, заключающийся в пропускании короткого сигнала через линию задержки с фильтром. В зависимости от параметров, полученный звук может быть похож на звук струны, извлекаемый медиатором или тэппингом, либо на звуки некоторых ударных инструментов.

Эту технику можно рассматривать как субтрактивно-гранулярный синтез с применением линии обратной связи, аналогично гребенчатому фильтру для анализа методом z-преобразования. Её также можно рассматривать в качестве простейшего случая волнового синтеза, поскольку линия задержки выступает как хранилище одного периода сигнала.

Александр Стронг изобрёл алгоритм, а Кевин Карплус первым произвёл анализ его работы. Вместе они разработали программную и аппаратную реализации алгоритма, в том числе и реализацию на СБИС. Они назвали алгоритм «Digitar» (игра слов от  — цифровая гитара).

Принцип работы 

 Генерируется короткий сигнал (длиной L отсчетов). В оригинальном алгоритме использовался короткий сигнал белого шума, однако может использоваться любой широкополосный сигнал, например ЛЧМ, период пилообразной или прямоугольной волны.
 Сигнал одновременно подается на выход и на вход линии задержки длиной L отсчетов.
 Выход линии задержки пропускается через звуковой фильтр. Для поддержания стабильной положительной обратной связи коэффициент передачи фильтра должен быть строго меньше 1 для всех частот. В качестве фильтра может использоваться однополюсной фильтр низких частот (как на картинке). В оригинальном алгоритме фильтр состоял из усреднителя двух смежных отсчетов, поскольку такой фильтр позволяет обойтись без умножителя и использовать только операции сложения и битового сдвига. Характеристики фильтра являются определяющими для гармонической структуры затухающего сигнала.
 Выход фильтра одновременно микшируется с выходом и подается на вход линии задержки.

Настройка струны 
Основная частота (точнее, самая низкая ненулевая гармоника) полученного сигнала — самая низкая частота, при которой развернутый отклик фазы запаздывания и фильтра в каскаде равен . Требуемое запаздывание по фазе D для данного основного тона F0 вычисляется по формуле D = Fs/F0, где Fs — частота семплирования.

Длина любой цифровой линии задержки является целым множителем периода семплирования. Для получения дробного запаздывания используются интерполирующие фильтры с параметрами, соответствующими запаздыванию фазы при выбранной основной частоте. Могут быть использованы БИХ- или КИХ-фильтры, однако КИХ-фильтр обладает тем преимуществом, что импульсные помехи подавляются, если дробное запаздывание изменяется с течением времени. Простейшим дробным способом вычисления дробного запаздывания является линейная интерполяция двух отсчётов (например, s(4.2) = 0.8s(4) + 0.2s(5)). Если фазовая задержка изменяется с частотой, гармоники могут быть усилены или ослаблены по сравнению с основной частотой. Оригинальный алгоритм использовал среднее значение двух последовательных отсчётов, что позволило реализовать фильтр с использованием только сложения и битового сдвига, делая реализацию весьма эффективной.

В оригинальной работе 1983 года указывается, что анализ с использованием Z-преобразования позволяет получить частоты и времена затухания гармоник с более высокой точностью.

Результат работы алгоритма Карплуса-Стронга можно прослушать в прилагающемся аудиофайле. Алгоритм использует коэффициент передачи 0.98 с последовательным смягчением частот низкочастотным фильтром первого порядка. Звучит нота ля второй октавы, 220 Гц.

Постоянный период (то есть, длина линии задержки) дает звук, похожий на струнные или колокол. Резкое увеличение периода сразу после начала сигнала производит звуки, похожие на барабан.

Усовершенствования алгоритма 
Алекс Стронг и Кевин Карплус поняли, что алгоритм в физическом смысле аналогичен записи отклонений струны в фиксированной точке с течением времени, а фильтр характеризует потерю струной энергии за один период. Джулиус О. Смит  и другие исследователи обобщили идею алгоритма до метода цифрового волновода, который также можно применять для синтеза духовых и мембранных инструментов. Первый набор расширений и обобщений был представлен в работе 1982 года на международной конференции компьютерной музыки в Венеции, а также опубликован с дополнениями в 1983 году в журнале компьютерной музыке, в статье «Extensions of the Karplus Strong Plucked String Algorithm», за авторством Дэвида Яффе и Джулиуса О. Смита.

Алекс Стронг создал более совершенную модификацию с использованием волновых таблиц для синтеза щипковых инструментов, опубликованную в виде патента.

Примечания

Литература

Ссылки 
 The Karplus-Strong Algorithm
 Sound Examples
 More sound examples under CC license
 Flash application implementing a guitar
 David A. Jaffe’s music, including sound examples

Синтезаторы
Алгоритмы
Цифровая обработка сигналов