Фильтр с конечной импульсной характеристикой
Фильтр с конечной импульсной характеристикой (Нерекурсивный фильтр, КИХ-фильтр) или FIR-фильтр (FIR сокр. от finite impulse response — конечная импульсная характеристика) — один из видов линейных цифровых фильтров, характерной особенностью которого является ограниченность по времени его импульсной характеристики (с какого-то момента времени она становится точно равной нулю). Такой фильтр называют ещё нерекурсивным из-за отсутствия обратной связи. Знаменатель передаточной функции такого фильтра — некая константа.
Содержание
Динамические характеристики
Разностное уравнение, описывающее связь между входным и выходным сигналами фильтра: где — порядок фильтра, — входной сигнал, — выходной сигнал, а — коэффициенты фильтра. Иными словами, значение любого отсчета выходного сигнала определяется суммой масштабированных значений предыдущих отсчетов. Можно сказать иначе: значение выхода фильтра в любой момент времени есть значение отклика на мгновенное значение входа и сумма всех постепенно затухающих откликов предыдущих отсчетов сигнала, которые всё ещё оказывают влияние на выход (после -отсчетов импульсная переходная функция становится равной нулю, как уже было сказано, поэтому все члены после -го тоже станут равными нулю). Запишем предыдущее уравнение в более ёмком виде:
Для того, чтобы найти ядро фильтра положим
где — дельта-функция. Тогда импульсная характеристика КИХ-фильтра может быть записана как:
Z-преобразование импульсной характеристики даёт нам передаточную функцию КИХ-фильтра:
Свойства
КИХ-фильтр обладает рядом полезных свойств, из-за которых он иногда более предпочтителен в использовании, чем БИХ-фильтр. Вот некоторые из них:
- КИХ-фильтры устойчивы.
- КИХ-фильтры при реализации не требуют наличия обратной связи.
- Фаза КИХ-фильтров может быть сделана линейной
Прямая форма КИХ фильтра
КИХ фильтры могут быть реализованы с использованием трех элементов: умножитель, сумматор и блок задержки. Вариант, показанный на рисунке, есть прямая реализация КИХ-фильтров типа 1.
Пример программы
Ниже приведен пример программы КИХ-фильтра, написанный на C :
#define N 100 // порядок фильтра float h[N] = { #include “f1.h” }; //вставка файла с известными коэффициентами фильтра float x[N]; float y[N]; short my_FIR(short sample_data) { float result = 0; for ( int i = N - 2 ; i >= 0 ; i-- ) { x[i + 1] = x[i]; y[i + 1] = y[i]; } x[0] = (float)sample_data; for (int k = 0; k < N; k++) { result = result + x[k]*h[k]; } y[0] = result; return ((short)result); }