Методики реализации алгоритмов нерекурсивной и рекурсивной фильтрации на отладочных комплектах ADSPBF-533 EZKIT-Lite (Методические указания к выполнению лабораторных работ № 5, 6), страница 7

Импульсная характеристика рекурсивного фильтра рассчитывается значительно сложнее, чем для нерекурсивного. Рассмотрим формирование лишь нескольких первых ее отсчетов. При поступлении на вход единичного импульса он умножается на b0 и проходит на выход. Таким образом,

h(0) = b0.

Далее входной единичный импульс попадает во входную линию задержки, а выходной отсчет, равный b0, — в выходную линию задержки. В результате второй отсчет импульсной характеристики будет формироваться как

h(1) = b1 + a1 h(0) = b1 + b0 a1.

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

h(2) = b2 + a2 h(0) + a1 h(1) = b2 + b0 a2 + a1 (b1 + b0 a1) = b2 + b1 a1 + b0 a2 + b0 a1

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

Наличие в схеме обратных связей позволяет получить бесконечную импульсную характеристику, поэтому рекурсивные фильтры называют также фильтрами с бесконечной импульсной характеристикой (БИХ-фильтрами; английский термин — infinite impulse response, IIR), По этой же причине рекурсивные фильтры могут быть неустойчивыми.

Рекурсивная фильтрация требует более высокой точности вычислений по сравнению с нерекурсивной, т.к. использование предыдущих выходных отсчетов для текущих вычислений может приводить к накапливанию ошибок. Особое значение это имеет для фильтров с передаточными функциями высоких порядков (m>3), которые чувствительны к эффектам конечной разрядности. Такие фильтры, как правило, разбиваются на фрагменты – звенья второго и/или первого порядка, и реализуются в каскадной или в параллельной форме.

Перепишем выражение (2.1) в следующем виде:

     (2.2)

Выполнив Z-преобразование над входным и выходным сигналом получим передаточную функцию рекурсивного фильтра:

                  (2.3)

Рис. 2.2. Каскадная форма рекурсивного фильтра.

Для перехода к каскадной форме необходимо найти корни многочленов А(z), B(z) и произвести разложение H(z):

 (2.2)

где G – масштабный множитель. Это позволяет применять каскадное построение фильтров, показанное на рис. 2.2, в котором:

H(z) = G H1(z) H2(z) ….. HN(z),

Hn(z) = Bn(z)/An(z).              (2.3)

Функции Аn(z) и Bn(z) обычно представляются в виде биквадратных блоков (фильтров второго порядка):

Bn(z) = bn0 + bn1 z + bn2 z2,        An(z) = 1 + an1 z + an2 z2.

В принципе, порядок расположения блоков в каскадной форме, равно как и порядок множителей B(z) и A(z) в числителе и знаменателе функции (2.2),  значения не имеет. Однако следует учитывать, что полюса знаменателя, близкие к единичной окружности на z-плоскости (близкие по модулю к 1) формируют большие коэффициенты усиления на соответствующих частотах в блоках, в которых они находятся, и при обработке сигналов могут вызывать переполнение разрядов числовых ячеек этих блоков, если их разрядность ограничена. С учетом этого при формировании каскадов желательно объединять в пары Bi(z)/Ai(z) нули и полюса, близкие по модулю к 1, и располагать их в концевые блоки каскадной формы. Такое комбинирование полезно также с позиций наилучшего отношения сигнал/шум. 

Рис. 2.3. Параллельная форма.

Для перехода к параллельной форме, изображенной на рис. 2.3 функция H(z) разлагается на элементарные дроби:

Параллельная конструкция фильтра применяется реже каскадной, что может объясняться тем, что в аналоговых фильтрах, исторически предшествовавших цифровым фильтрам, теоретическая база анализа и синтеза каскадных рекурсивных фильтров получила детальное развитие.

2.4. Описание программы, реализующей алгоритм рекурсивного фильтра

Алгоритм программы реализации БИХ-фильтра приведен на рис. 2.4

Инициализация подсистем

Подпрограмма фильтрации принятых данных

Прерывание по приему данных SPORT0

Рис. 2.4. Алгоритм программы реализации БИХ-фильтра