Алгоритм Карплуса — Стронга
Алгоритм Карплуса-Стронга для синтеза струны — способ синтеза звука, заключающийся в пропускании короткого сигнала через линию задержки с фильтром. В зависимости от параметров, полученный звук может быть похож на звук струны, извлекаемый медиатором или тэппингом, либо на звуки некоторых ударных инструментов.
Эту технику можно рассматривать как субтрактивно-гранулярный синтез с применением линии обратной связи, аналогично гребенчатому фильтру для анализа методом z-преобразования. Её также можно рассматривать в качестве простейшего случая волнового синтеза, поскольку линия задержки выступает как хранилище одного периода сигнала.
Александр Стронг изобрёл алгоритм, а Кевин Карплус первым произвёл анализ его работы. Вместе они разработали программную и аппаратную реализации алгоритма, в том числе и реализацию на СБИС. Они назвали алгоритм «Digitar» (игра слов от англ. digital guitar — цифровая гитара).
Принцип работыПравить
- Генерируется короткий сигнал (длиной L отсчетов). В оригинальном алгоритме использовался короткий сигнал белого шума, однако может использоваться любой широкополосный сигнал, например ЛЧМ, период пилообразной или прямоугольной волны.
- Сигнал одновременно подается на выход и на вход линии задержки длиной L отсчетов.
- Выход линии задержки пропускается через звуковой фильтр. Для поддержания стабильной положительной обратной связи коэффициент передачи фильтра должен быть строго меньше 1 для всех частот. В качестве фильтра может использоваться однополюсной фильтр низких частот (как на картинке). В оригинальном алгоритме фильтр состоял из усреднителя двух смежных отсчетов, поскольку такой фильтр позволяет обойтись без умножителя и использовать только операции сложения и битового сдвига. Характеристики фильтра являются определяющими для гармонической структуры затухающего сигнала.
- Выход фильтра одновременно микшируется с выходом и подается на вход линии задержки.
Настройка струныПравить
Основная частота (точнее, самая низкая ненулевая гармоника) полученного сигнала — самая низкая частота, при которой развернутый отклик фазы запаздывания и фильтра в каскаде равен . Требуемое запаздывание по фазе D для данного основного тона F0 вычисляется по формуле D = Fs/F0, где Fs — частота семплирования.
Длина любой цифровой линии задержки является целым множителем периода семплирования. Для получения дробного запаздывания используются интерполирующие фильтры с параметрами, соответствующими запаздыванию фазы при выбранной основной частоте. Могут быть использованы БИХ- или КИХ-фильтры, однако КИХ-фильтр обладает тем преимуществом, что импульсные помехи подавляются, если дробное запаздывание изменяется с течением времени. Простейшим дробным способом вычисления дробного запаздывания является линейная интерполяция двух отсчётов (например, s(4.2) = 0.8s(4) + 0.2s(5)). Если фазовая задержка изменяется с частотой, гармоники могут быть усилены или ослаблены по сравнению с основной частотой. Оригинальный алгоритм использовал среднее значение двух последовательных отсчётов, что позволило реализовать фильтр с использованием только сложения и битового сдвига, делая реализацию весьма эффективной.
В оригинальной работе 1983 года указывается, что анализ с использованием Z-преобразования позволяет получить частоты и времена затухания гармоник с более высокой точностью.
Результат работы алгоритма Карплуса-Стронга можно прослушать в прилагающемся аудиофайле. Алгоритм использует коэффициент передачи 0.98 с последовательным смягчением частот низкочастотным фильтром первого порядка. Звучит нота ля второй октавы, 220 Гц.
Карплус-Стронг №1 |
F1 = 220 Гц |
Помощь по воспроизведению |
Постоянный период (то есть, длина линии задержки) дает звук, похожий на струнные или колокол. Резкое увеличение периода сразу после начала сигнала производит звуки, похожие на барабан.
Усовершенствования алгоритмаПравить
Алекс Стронг и Кевин Карплус поняли, что алгоритм в физическом смысле аналогичен записи отклонений струны в фиксированной точке с течением времени, а фильтр характеризует потерю струной энергии за один период. Джулиус О. Смит [1] и другие исследователи обобщили идею алгоритма до метода цифрового волновода, который также можно применять для синтеза духовых и мембранных инструментов. Первый набор расширений и обобщений был представлен в работе 1982 года на международной конференции компьютерной музыки в Венеции, а также опубликован с дополнениями в 1983 году в журнале компьютерной музыке, в статье «Extensions of the Karplus Strong Plucked String Algorithm», за авторством Дэвида Яффе и Джулиуса О. Смита[1].
Алекс Стронг создал более совершенную модификацию с использованием волновых таблиц для синтеза щипковых инструментов, опубликованную в виде патента.
ПримечанияПравить
ЛитератураПравить
- Karplus, Kevin; Strong, Alex. Digital Synthesis of Plucked String and Drum Timbres (англ.) // Computer Music Journal : journal. — MIT Press, 1983. — Vol. 7, no. 2. — P. 43—55. — doi:10.2307/3680062. — JSTOR 3680062.
- Jaffe, David A.; Smith, Julius O. Extensions of the Karplus-Strong Plucked String Algorithm (англ.) // Computer Music Journal : journal. — MIT Press, 1983. — Vol. 7, no. 2. — P. 56—69. — doi:10.2307/3680063. — JSTOR 3680063.
- Патент США № 4 649 783. Wavetable Modification Instrument and Method for Generating Musical Sound. Описание патента на сайте Ведомства по патентам и товарным знакам США.
- Патент США № 4 622 877. Independently controlled wavetable-modification instrument and method for generating musical sound. Описание патента на сайте Ведомства по патентам и товарным знакам США.
- Moore, F. Richard. Elements of Computer Music (англ.). — Upper Saddle River: Prentice-Hall, 1990. — ISBN 0-13-252552-6.