Клиначёв Николай Васильевич

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

Передаточную функцию (ПФ) для дискретного фильтра любого типа можно получить из ПФ аналогового прототипа посредствам Билинейного преобразования (БЛП). Одновременно БЛП может быть использовано для масштабирующих операций в частотном домене. В частности для смещения полосы пропускания и регулировки ее ширины.

Дискретная ПФ фильтра второго порядка имеет вид:

(1)

            b0 + b1*z^-1 + b2*z^-2
    H(z) = ------------------------
            a0 + a1*z^-1 + a2*z^-2

Для сокращения нагрузки на ЦВМ шесть коэффициентов z-ПФ могут быть заменены эквивалентными, один из которых будет равен единице (одна из шести операций умножения будет сокращена). Если проектируемая z-ПФ лишь одна из нескольких включенных последовательно, то можно привести к единице еще один коэффициент, за счет коррекции общего коэффициента передачи цепочки фильтров или системы. Тогда z-ПФ будет иметь вид:

(2)

            (b0/a0) + (b1/a0)*z^-1 + (b2/a0)*z^-2
    H(z) = ---------------------------------------
               1 + (a1/a0)*z^-1 + (a2/a0)*z^-2

или

(3)

                      1 + (b1/b0)*z^-1 + (b2/b0)*z^-2
    H(z) = (b0/a0) * ---------------------------------
                      1 + (a1/a0)*z^-1 + (a2/a0)*z^-2

Дальнейшее сокращение операций умножения возможно, если z-ПФ имеет пары равных коэффициентов.

Рекуррентный алгоритм, реализующий z-ПФ (2), должен рассчитывать следующее разностное уравнение (РУ):

(4)

    y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]
                        - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]

Параметры цифровых фильтров

1/dT = sampleRate
Частота дискретизации фильтра. Определяется как обратная величина от периода времени dT, через который цифровая вычислительная машина способна выполнять подпрограмму, рассчитывающую соответствующее разностное уравнение (4)
Частота (frequency)
В зависимости от типа фильтра - это "частота сопряжения" (оценивается по пересечению ЛАЧХ с уровнем -3 дБ), "резонансная частота" для полосового и режекторного фильтров, "центральная частота" полософормирующего фильтра, или "центральна частота наклонного участка" фильтра-ступени (фильтра-горки)
К в полосе (dBgain)
Коэффициент передачи на модифицируемом участке ЛАЧХ для полософормирующего фильтра и фильтра-ступени
Добротность (Q)
Отношение резонансной частоты фильтра к ширине его полосы. В зависимости от типа фильтра при формировании требований к ЧХ, бывает удобней пользоваться эквивалентными параметрами - "полосой" и "наклоном"
Полоса (bandwidth)
Ширина полосы рабочих частот фильтра. Для полосового и режекторного фильтров оценивается по пересечению их ЛАЧХ с уровнем -3 дБ. Для полософормирующего фильтра - по пересечению их ЛАЧХ с её средним уровнем (dBgain/2). Для фильтра-ступени - это длина наклонного участка
Наклон (shelf slope)
Модуль наклона ЛАЧХ фильтра-ступени. Максимально возможный наклон (без появления колебательности ЛАЧХ) равен 1 Белу за октаву. При задании малого значения наклона фильтр-ступень превращается в фильтр-лестницу (ЛАЧХ похожа на две ступеньки). Наклонный участок становится нелинейным

Вычисление коэффициентов цифровых фильтров

Аналоговые прототипы разрабатываются для приведенной (нормализованной) частоты. Данные прототипы, при оптимальной настройке, являются фильтрами Баттерворта (с максимально плоскими ЛАЧХ). Билинейное преобразование выполняется посредствам подстановки:

                1          1 - z^-1
   s  =  -------------- * ----------
          tan(omega/2)     1 + z^-1

Для вычисления тангенса при составлении программы используются тригонометрические тождества:

                 sin(w)                                 1 - cos(w)
   tan(w/2) = ------------              (tan(w/2))^2 = ------------
               1 + cos(w)                               1 + cos(w)

Расчет промежуточных переменных

A     = sqrt[ 10^(dBgain/20) ] =
      = 10^(dBgain/40)                    (только для полософормирующих фильтров)

omega = 2*pi*frequency/sampleRate

sin   = sin(omega)
cos   = cos(omega)


alpha = sin/(2*Q) =                                    (если задана Q)
      = sin*sinh[ ln(2)/2 * bandwidth * omega/sin ]    (если задана полоса)

    Отношение между шириной полосы и Q:
            1/Q = 2*sinh[ln(2)/2*bandwidth*omega/sin]  (для ЦФ на основе БЛП)
    or      1/Q = 2*sinh[ln(2)/2*bandwidth]            (для аналогового прототипа)


beta  = sqrt(A)/Q =                                    (только для фильтров-ступенек)
      = sqrt(A)*sqrt[ (A + 1/A)*(1/S - 1) + 2 ]        (если задан наклон горки)
      = sqrt[ (A^2 + 1)/S - (A-1)^2 ]

    Отношение между наклоном и Q:
            1/Q = sqrt[(A + 1/A)*(1/S - 1) + 2]

ФНЧ:	H(s) = 1 / (s^2 + s/Q + 1)

	b0 =  (1 - cos)/2
	b1 =   1 - cos
	b2 =  (1 - cos)/2
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


ФВЧ:	H(s) = s^2 / (s^2 + s/Q + 1)

	b0 =  (1 + cos)/2
	b1 = -(1 + cos)
	b2 =  (1 + cos)/2
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


ПФ:	H(s) = s / (s^2 + s/Q + 1)          (пик АЧХ = Q)

	b0 =   sin/2  =   Q*alpha
	b1 =   0 
	b2 =  -sin/2  =  -Q*alpha
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


ПФ:	H(s) = (s/Q) / (s^2 + s/Q + 1)      (пик АЧХ = 0 dB)

	b0 =   alpha
	b1 =   0
	b2 =  -alpha
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


Режекторный фильтр или фильтр - пробка:
	H(s) = (s^2 + 1) / (s^2 + s/Q + 1)

	b0 =   1
	b1 =  -2*cos
	b2 =   1
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


Фазовращающий фильтр:
	H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)

	b0 =   1 - alpha
	b1 =  -2*cos
	b2 =   1 + alpha
	a0 =   1 + alpha
	a1 =  -2*cos
	a2 =   1 - alpha


Полософормирующий фильтр (для эквалайзеров):
	H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)

	b0 =   1 + alpha*A
	b1 =  -2*cos
	b2 =   1 - alpha*A
	a0 =   1 + alpha/A
	a1 =  -2*cos
	a2 =   1 - alpha/A


Фильтр - НЧ-ступень-лестница:
	H(s) = A * (s^2 + (sqrt(A)/Q)*s + A) / (A*s^2 + (sqrt(A)/Q)*s + 1)

	b0 =    A*[ (A+1) - (A-1)*cos + beta*sin ]
	b1 =  2*A*[ (A-1) - (A+1)*cos            ]
	b2 =    A*[ (A+1) - (A-1)*cos - beta*sin ]
	a0 =        (A+1) + (A-1)*cos + beta*sin
	a1 =   -2*[ (A-1) + (A+1)*cos            ]
	a2 =        (A+1) + (A-1)*cos - beta*sin


Фильтр - ВЧ-ступень-лестница:
	H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1) / (s^2 + (sqrt(A)/Q)*s + A)

	b0 =    A*[ (A+1) + (A-1)*cos + beta*sin ]
	b1 = -2*A*[ (A-1) + (A+1)*cos            ]
	b2 =    A*[ (A+1) + (A-1)*cos - beta*sin ]
	a0 =        (A+1) - (A-1)*cos + beta*sin
	a1 =    2*[ (A-1) - (A+1)*cos            ]
	a2 =        (A+1) - (A-1)*cos - beta*sin

Мастер для генерации коэффициентов дискретного фильтра

Встроенный ниже в html-страницу мастер корректно визуализируется и функционирует в браузере MSIE 5.0. Отображение мастера меняется не существенно в браузере Opera 6.04, и логика работы с мастером не нарушается. В браузере Netscape 7.0 мастер не работает.

Три коэффициента числителя (b0, b1, b2) и три коэффициента знаменателя (a0, a1, a2) z-ПФ в соответствующем порядке выводятся мастером в двух нижних строках. В качестве разделителя используется пробел. Рекомендуется пользоваться клавиатурным копированием (Ctrl+c и Ctrl+v) для переноса коэффициентов в блок "Передаточная функция" моделирующей программы. Для перехода между полями формы используйте клавиши Tab и Shift+Tab.

БИХ-фильтр второго порядка
Тип: 
= f/Df
= f/Df
К в полосе:  [дБ]
Аналоговый прототип (w=1):
k:  
Числ:  
 Знам:  
Дискретный фильтр:
1/dT:  [Гц]
Частота:  [Гц]
Числ:  
Знам:  

Приведенная ниже форма позволяет на основе коэффициентов рассчитанных мастером построить частотные характеристики соответствующего дискретного фильтра. Скрипт считает ЧХ именно дискретной системы, а не ее линеаризованного аппроксиматора (в большинстве моделирующих программ для построения ЧХ дискретной системы выполняется обратное БЛП и строятся ЧХ линеаризованного аппроксиматора). С ознакомительными целями Вы можете выполнить расчеты для выбранных по умолчанию установок. Поскольку графики строятся в Excel'е, Вы должны ответить положительно на вопрос системы безопасности программы MSIE о том запускать ActiveX компонент (Excel) или нет.

Построение ЛАЧХ & ЛФЧХ (в Excel'e)
 Начальная частота:  [рад/с]
 Считать для декад:  (100 точек / дек) 
+ АЧХ & ФЧХ:  ( + 30 сек )