Я реализовал базовый алгоритм Karplus-Strong.
Ringbuffer, заполняя белым шумом, выводит образец спереди и добавляет среднее значение первых двух элементов в конец и удаляет первый элемент. Повторите последнее действие.Расширение Karplus-Strong с фильтром нижних частот
Для улучшения результатов и контроля над ними я попытался реализовать расширенную версию алгоритма.
Поэтому вместо фильтра усреднения мне нужен фильтр частоты, например фильтр нижних частот.
Мой фильтр усреднения имеет два входа и один выход: avg (a, b) = (a + b)/2
Пример кода на странице wikipedia дает столько выходов, сколько входов.
http://en.wikipedia.org/wiki/Low-pass_filter
я нашел другую (математическую) версию, как:
http://cnx.org/content/m15490/latest/
Н (г) = (1+ (1/г))/2
Я предполагаю г является комплексным числом.
Обе версии имеют два входа, но также два выхода.
Как я получу одно значащее значение из этого?
Или мне нужно переписать большую часть алгоритма?
Если это так, то где я могу найти хорошее объяснение?
Спасибо за ответ. Я не знал, что я уже использую фильтр нижних частот. Тогда мне нужен более продвинутый с параметрами. Спасибо за подсказки для расчета коэффициента и порядка. Я буду использовать это в будущем. Но актуальной проблемой является реализация такого фильтра. –
Реализация очень проста: y = c0 * x [0] + c1 * x [1] ... Установка хороших значений для c является трудной частью. –
Да, это просто. Также объясняется, почему среднее значение является фильтром нижних частот. (a + b)/2 => 0,5 * a + 0,5 * b. Вопрос ответил и принят. Я думаю, что высокий и басовый бас одинаково простой? Если бы вы могли бы также написать эти алгоритмы? –