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