Фильтр нижних частот - это, по сути, некоторый вариант усреднения нескольких значений вместе.Это означает, что по крайней мере в обычном случае ваш внутренний цикл будет накапливать значение.Трудно угадать точное намерение по вашему коду, но в конечном итоге вы получите что-то в чрезвычайно общем порядке:
sample = 0;
for (int j=i; j<i+10; j++)
sample += input[j];
output[i] = sample / 10;
В нынешнем виде это просто усредняет,без указания среза - это означает, что он имеет фиксированную (и довольно медленную) кривую среза.Отсечка регулируется только числом отсчетов в окне.
Чтобы управлять отсечкой, вы (по крайней мере обычно) не умножаете все входные значения на одну и ту же величину -это в основном просто изменило бы масштабный коэффициент.Вместо этого вы берете набор выборок (10 из них, в вашем случае) кривой отсечки, которую вы хотите применить, пропускаете их через обратное БПФ и получаете набор из 10 коэффициентов.Затем вы применяете эти коэффициенты в своем цикле:
sample = 0;
for (j=0; j<10; j++)
sample += input[i+j] * coefficients[j];
output[i] = sample;
Количество выборок в вашем окне обычно не является входом в процесс проектирования, а скорее является выходом.Вы начинаете с определения частоты среза (в виде доли от частоты дискретизации) и ширины среза, и на основе этих значений вы вычисляете необходимый размер окна.
Существует довольно много различных методов для вычисления ваших коэффициентов.Однако независимо от того, как вы их вычисляете, вы обычно получаете что-то в этом общем порядке - накапливаете сумму выборок в окне, каждая из которых умножается на соответствующий коэффициент.
Время EE было довольнохорошая статья о дизайне фильтров несколько лет назад.