Фильтр скользящего среднего является частным случаем обычного фильтра конечной импульсной характеристики. Оба фильтра имеют конечные импульсные характеристики. Фильтр скользящего среднего использует последовательность масштабированных 1с в качестве коэффициентов, в то время как коэффициенты конечной импульсной характеристики разработаны на основе спецификаций фильтра. Они обычно не являются последовательностью 1с.
Скользящее среднее значение потоковых данных вычисляется конечным скользящим окном:
N + 1 - длина фильтра. Этот алгоритм является частным случаем регулярного КИХ-фильтра с вектором коэффициентов [b 0, b 1,..., b N].
Чтобы вычислить вывод, регулярный КИХ-фильтр умножает каждую выборку данных на коэффициент из вектора [b 0, b 1,..., b N] и добавляет результат. Фильтр скользящего среднего не использует никаких умножителей. Алгоритм добавляет все выборки данных и умножает результат на 1/ filterLength.
Сравните частотную характеристику фильтра скользящего среднего с частотой обычного фильтра конечной импульсной характеристики. Установите коэффициенты регулярной конечной импульсной характеристики как последовательность масштабированных 1-х. Масштабный коэффициент 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с. Частотная характеристика фильтра изменяется и имеет тенденцию двигаться ближе к идеальной фильтрующей характеристики.
Проектируйте коэффициенты фильтра на основе предопределенных спецификаций фильтра. Для примера спроектируйте конечную импульсную характеристику фильтр равновесия с нормализованной частотой отключения 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)
Реакция фильтра в полосе пропускания почти плоская (подобна идеальной реакции), и полоса остановки имеет ограниченные равновесия.