Таблица сигналов произвольной формы для пользовательского осциллятора

Мне нужно создать специальную форму волны для генератора для использования с Web Audio API.

У меня есть функция Javascript для вывода желаемой формы волны (вычисление y между -1 и 1 для любого заданного x), и результат на графике выглядит следующим образом:

Пользовательская форма волны

Однако документация API веб-аудио позволяет создавать собственные волновые таблицы только на основе таблиц гармоник через createPeriodicWave функцию, которую затем можно использовать для настройки пользовательского осциллятора через setPeriodicWave. Существует ли общий метод, который можно использовать для расчета таблиц гармоник на основе моей функции сигнала?


person Clafou    schedule 14.07.2014    source источник


Ответы (1)


ДПФ (или БПФ) с длиной ровно одного периода пользовательской формы волны создаст таблицу гармоник. Просто отфильтруйте фильтр нижних частот и сэмплируйте сигнал 2 ^ N раз, а затем передайте его в универсальную библиотеку БПФ. (Выберите достаточно большое значение 2 ^ N, чтобы оно как минимум в 2 раза превышало значение самой высокой частоты фильтра нижних частот или вашего сигнала). Величины результирующих комплексных бинов БПФ будут вашими уровнями мощности гармоник.

person hotpaw2    schedule 14.07.2014
comment
Благодарю вас! Я нашел dsp.js, но у меня есть две проблемы: 1) мне нужно предоставить образец скорость с моим вводом, но я строю волновую таблицу для генератора, и у меня нет частоты дискретизации, это не похоже на то, что я обрабатываю сигнал из записанного ввода, и 2) он выводит одну таблицу, но Web Audio createPeriodicWave функция принимает два массива (реальный и образный), а не один! - person Clafou; 15.07.2014
comment
Частота дискретизации — это количество выборок, деленное на период вашей формы волны, но она не нужна, поскольку вы будете использовать необработанные выходные данные бина БПФ, а не значения частоты, представленные каждым бином. Чтобы использовать сложное входное БПФ реальных данных, просто установите мнимые компоненты или массив в нули. - person hotpaw2; 15.07.2014
comment
Кстати, 2-й пункт в моем предыдущем комментарии был неверным, dsp.js действительно выводит два массива (реальный и imag). - person Clafou; 15.07.2014