Этот код кажется неправильным более чем одним способом.
Цифровой фильтр обычно представлен коэффициентами фильтра , которые постоянны , фильтром историей внутреннего состояния (поскольку в большинстве случаев выходной сигнал зависит от история) и топология фильтра , которая является арифметикой, используемой для вычисления выходных данных с учетом входных данных и фильтра (коэффициенты + история состояний). В большинстве случаев и, конечно же, при фильтрации аудиоданных вы ожидаете получить 0 на выходе, если подаете 0 на вход.
Проблемы в коде, с которым вы связаны:
Коэффициенты фильтра изменены при каждом вызове метода обработки:
es-> f1p0 + = (es-> lf * (образец - es-> f1p0)) + vsa;
Входная выборка обычно умножается на коэффициенты фильтра, а не добавляется к ним. Это не имеет никакого физического смысла - выборка и коэффициенты фильтра даже не имеют одинаковые физические единицы.
- Если вы вводите 0, вы не получите 0 на выходе, только некоторые значения, которые не имеют никакого смысла.
Я предлагаю вам поискать другой код - другой вариант - его отладка, и это будет сложнее.
Кроме того, вам будет полезно прочитать о цифровых фильтрах:
http://en.wikipedia.org/wiki/Digital_filter
https://ccrma.stanford.edu/~jos/filters/