Как фильтр скользящего среднего значения отличается от КИХ-фильтра?

Фильтр скользящего среднего значения является особым случаем обычного КИХ-фильтра. Оба фильтра имеют конечные импульсные ответы. Фильтр скользящего среднего значения использует последовательность масштабированной 1 с как коэффициенты, в то время как КИХ-коэффициенты фильтра разработаны на основе спецификаций фильтра. Они обычно не последовательность 1 с.

Скользящее среднее значение потоковой передачи данных вычисляется с конечным раздвижным окном:

movAvg=x[n]+x[n1]+...+x[nN]N+1

N + 1 является длиной фильтра. Этот алгоритм является особым случаем обычного КИХ-фильтра с содействующим вектором, [b 0, b 1..., b N].

FIROutput=b0x[n]+b1x[n1]+...+bNx[nN]

Чтобы вычислить вывод, обычный КИХ-фильтр умножает каждую выборку данных с коэффициентом от [b 0, b 1..., b N] вектор и добавляет результат. Фильтр скользящего среднего значения не использует множителей. Алгоритм добавляет все выборки данных и умножает результат с 1 / filterLength.

Частотная характеристика фильтра скользящего среднего значения и КИХ-фильтра

Сравните частотную характеристику фильтра скользящего среднего значения с тем из обычного КИХ-фильтра. Установите коэффициенты обычного КИХ-фильтра как последовательность масштабированных 1's. Масштабный коэффициент равняется 1 / | filterLength |.

Создайте Систему dsp.FIRFilter object™ и установите ее коэффициенты на 1/40. Чтобы вычислить скользящее среднее значение, создайте Системный объект dsp.MovingAverage с раздвижным окном длины 40, чтобы вычислить скользящее среднее значение. Оба фильтра имеют те же коэффициенты. Вход является Гауссовым белым шумом со средним значением 0 и стандартным отклонением 1.

filter = dsp.FIRFilter('Numerator',ones(1,40)/40);
mvgAvg = dsp.MovingAverage(40);
input = randn(1024,1);
filterOutput = filter(input);
mvgAvgOutput = mvgAvg(input);

Визуализируйте частотную характеристику обоих фильтров при помощи fvtool.

hfvt = fvtool(filterOutput,1,mvgAvgOutput,1);
legend(hfvt,'FIR Filter','Moving Average Filter');

Частотные характеристики соответствуют точно, который доказывает, что фильтр скользящего среднего значения является особым случаем КИХ-фильтра.

Для сравнения просмотрите частотную характеристику фильтра без шума.

fvtool(filter);

Сравните частотную характеристику фильтра на тот из идеального фильтра. Вы видите, что основной лепесток в полосе пропускания не является плоским, и пульсации в полосе задерживания не ограничиваются. Частотная характеристика фильтра скользящего среднего значения не совпадает с частотной характеристикой идеального фильтра.

Чтобы понять идеальный КИХ-фильтр, измените коэффициенты фильтра на вектор, который не является последовательностью масштабированной 1 с. Частотная характеристика фильтра изменяется и имеет тенденцию придвигаться поближе к идеальному ответу фильтра.

Разработайте коэффициенты фильтра на основе предопределенных спецификаций фильтра. Например, разработайте equiripple КИХ-фильтр с нормированной частотой среза 0,1, пульсацией полосы пропускания 0,5 и затуханием полосы задерживания 40 дБ. Используйте fdesign.lowpass, чтобы задать спецификации фильтра и метод design, чтобы разработать фильтр.

FIReq = fdesign.lowpass('N,Fc,Ap,Ast',40,0.1,0.5,40);
filterCoeff = design(FIReq,'equiripple','SystemObject',true);
fvtool(filterCoeff)

Ответ фильтра в полосе пропускания является почти плоским (подобный идеальному ответу), и полоса задерживания ограничила equiripples.

Похожие темы