Импульсная характеристика рекурсивного фильтра рассчитывается значительно сложнее, чем для нерекурсивного. Рассмотрим формирование лишь нескольких первых ее отсчетов. При поступлении на вход единичного импульса он умножается на 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. Алгоритм программы реализации БИХ-фильтра
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.