"Оптимальные" коэффициенты БИХ фильтра
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Фильтр Баттерворта 15 порядка.
По-видимому это предельный случай, который можно рассчитать "вручную". Калькулятор (1+z)^15 отказался считать
Итак, обозначим:
Матрица z-преобразования:
По-видимому это предельный случай, который можно рассчитать "вручную". Калькулятор (1+z)^15 отказался считать
Итак, обозначим:
Матрица z-преобразования:
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Сегодня закончил вывод формул для пересчёта коэффициентов ФНЧ в ПФ для фильтра Баттерворта 3 порядка. Сложность формул возрастает значительно. Большой вопрос - получиться ли реализовать адаптивный фильтр выше 3 порядка на микроконтроллерах низкого быстродействия
Но есть и положительные моменты - нашёл формулу непосредственного z-преобразования Нфнч(S) --> Hпф(z). То есть промежуточное преобразование S--> (S*S+w*w)/BS можно не делать!
При применении "матрицы z-преобразования" запись получается довольно компактной.
Проверял всё с помощью filter.exe. Погрешность порядка 10^-7. Коэффициенты в Excel рассчитывал.
Таким образом, коэффициенты ФНЧ, ФВЧ и ПФ (не очень высокого порядка) довольно легко пересчитывать непосредственно в микроконтроллере.
Сергею Бахурину.
Сейчас я морально готов написать статью для сайта (Если такая необходимость имеется, в чём я не совсем уверен из-за полного отсутствия обсуждения )
Но есть и положительные моменты - нашёл формулу непосредственного z-преобразования Нфнч(S) --> Hпф(z). То есть промежуточное преобразование S--> (S*S+w*w)/BS можно не делать!
При применении "матрицы z-преобразования" запись получается довольно компактной.
Проверял всё с помощью filter.exe. Погрешность порядка 10^-7. Коэффициенты в Excel рассчитывал.
Таким образом, коэффициенты ФНЧ, ФВЧ и ПФ (не очень высокого порядка) довольно легко пересчитывать непосредственно в микроконтроллере.
Сергею Бахурину.
Сейчас я морально готов написать статью для сайта (Если такая необходимость имеется, в чём я не совсем уверен из-за полного отсутствия обсуждения )
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Рассмотрим преобразование ФНЧ(S)--> ПФ(z) на примере фильтра Баттерворта 2 порядка.
Будем использовать обозначения из статьи:
http://www.dsplib.ru/content/filters/bu ... terex.html
где
Матрица z-преобразования Нфнч(S)-->Hпф(z) для фильтра 2 порядка имеет вид: где
Fo- центральная частота фильтра, Fs - частота среза ФНЧ-прототипа, FN - частота Найквиста.
На этом расчёт цифрового полосового фильтра Баттерворта 2 порядка закончен (с)
Всех с праздником!
Будем использовать обозначения из статьи:
http://www.dsplib.ru/content/filters/bu ... terex.html
где
Матрица z-преобразования Нфнч(S)-->Hпф(z) для фильтра 2 порядка имеет вид: где
Fo- центральная частота фильтра, Fs - частота среза ФНЧ-прототипа, FN - частота Найквиста.
На этом расчёт цифрового полосового фильтра Баттерворта 2 порядка закончен (с)
Всех с праздником!
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Фильтр Баттерворта 3 порядка:
Матрица z-преобразования ПФ Баттерворта 3 порядка:
где
Fo- центральная частота фильтра, Fs - частота среза ФНЧ-прототипа, FN - частота Найквиста.
А матрица 4 порядка - в окно не влезает...
Матрица z-преобразования ПФ Баттерворта 3 порядка:
где
Fo- центральная частота фильтра, Fs - частота среза ФНЧ-прототипа, FN - частота Найквиста.
А матрица 4 порядка - в окно не влезает...
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Как мы видим, технология расчёта цифрового полосового фильтра предельно упростилась. Теперь даже не надо вычислять коэффициенты ФНЧ в z-области. Кстати говоря, идея рассчитывать коэффициенты ПФ по коэффициентам ФНЧ в z-области по-видимому тупиковая! Для фильтра 2 порядка это ещё получилось, а выше возникают определённые трудности (в частности мешает нормировка на а0). А вот работать с коэффициентами Н(S) (я их по аналогии с идеями ООП называю коэффициенты -"предки" ) очень легко!
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Программа расчёта коэффициентов полосового фильтра Баттерворта 3 порядка:
Если не вычислять Alpha в программе - скорость расчета на Intel Atom 1.6 ГГц - 1 млн. фильтров в секунду.
Жалко под рукой нет ATMegи...
Код: Выделить всё
Subroutine BP_Butterworth_3(F0,Fs,Rp,A,B)
!F0- относительная центральная частота, Fs-относительная частота среза,Rp - неравномерность АЧХ (дБ)
!A,B - выходные массивы коэффициентов
real*8 F0,FN,Fs,Fd,Rp,Pi,Psi,Psi2,Omega_p,Ep,Alpha,Beta
real*8 b1,b2,b3,a0
real*8, dimension (7) :: A,B
Pi=3.1415926535897932384626433832795
Omega_p=DTAN(Fs*0.5*Pi)
Ep=DSQRT(10.**(Rp*0.1)-1.)
Alpha=1.0/Ep**(1./3)
Beta=Alpha*Omega_p
Psi=-2.*DCOS(F0*Pi)/DCOS(Fs*0.5*Pi)
b1=2.*Beta
b3=Beta*Beta
b2=2.*b3
b3=beta*b3
a0=1.0/(1.+b1+b2+b3)
A(1)=1.
A(2)=Psi*(3.+2.*b1+b2)*a0
Psi2=Psi*Psi
A(3)=a0*((Psi2+1.)*(3.+b1)-b2-3.*b3)
A(4)=a0*Psi*(Psi2+6.-2*b2)
A(5)=a0*((Psi2+1.)*(3.-b1)-b2+3.*b3)
A(6)=a0*Psi*(3.-2.*b1+b2)
A(7)=a0*(1.-b1+b2-b3)
B(1)=b3*a0
B(2)=0.
B(3)=-3.*B(1)
B(4)=0.
B(5)=-B(3)
B(6)=0.
B(7)=-B(1)
return
end
Жалко под рукой нет ATMegи...
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Полосовой фильтр Баттерворта 4 порядка:
Внимание! 04.05.2014 10:15 мск исправлена ошибка во втором столбце матрицы! Обозначения те же.
Внимание! 04.05.2014 10:15 мск исправлена ошибка во втором столбце матрицы! Обозначения те же.
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Программа расчёта коэффициентов полосового фильтра Баттерворта 4 порядка:
Код: Выделить всё
Subroutine BP_Butterworth_4(F0,Fs,Rp,A,B)
!F0- относительная центральная частота, Fs-относительная частота среза,Rp - неравномерность АЧХ (дБ)
!A,B - выходные массивы коэффициентов
real*8 F0,FN,Fs,Fd,Rp,Pi,Psi,Psi0,Psi2,Psi3,Psi4,Omega_p,Ep,Alpha,Beta
real*8 K2,b1,b2,b3,b4,bv,b2w,b3v,a0,v,w
real*8, dimension (9) :: A,B
Pi=3.1415926535897932D+00
K2=dsqrt(2.0D+00)
v=dsqrt(2.-K2)+dsqrt(2.+K2)
w=K2+2.
Omega_p=DTAN(Fs*0.5*Pi)
Ep=DSQRT(10.**(Rp*0.1)-1.)
Alpha=1.0/Ep**(0.25)
Beta=Alpha*Omega_p
Psi0=1./DCOS(Fs*0.5*Pi)
Psi=-2.*DCOS(F0*Pi)*Psi0
Psi2=Psi*Psi
Psi3=Psi2*Psi
Psi4=Psi3*Psi
b2=beta*beta
b3=b2*beta
b4=beta*b3
bv=beta*v
b2w=b2*w
b3v=b3*v
a0=1.0/(1.D+00+bv+b2w+b3v+b4)
A(1)=1.
A(2)=Psi*(4.+3.*bv+2.*b2w+b3v)*a0
A(3)=a0*(2.*(3.*Psi2+2.)+bv*(3.*Psi2+2.)+b2w*Psi2-2.*(b3v+2.*b4))
A(4)=a0*(4.*Psi*(Psi2+3.) +bv*Psi*(Psi2+3.)-Psi*(2.*b2w+3.*b3v))
A(5)=a0*(6.+Psi4+12.*Psi2-2.*b2w*(Psi2+1.)+6.*b4)
A(6)=a0*(4.*Psi*(Psi2+3.)-bv*Psi*(Psi2+3.)-Psi*(2.*b2w-3.*b3v))
A(7)=a0*(2.*(3.*Psi2+2.)-bv*(3.*Psi2+2.)+b2w*Psi2+2.*(b3v-2.*b4))
A(8)=Psi*(4.-3.*bv+2.*b2w-b3v)*a0
A(9)=a0*(1.-bv+b2w-b3v+b4)
B(1)=b4*a0
B(2)=0.
B(3)=-4.*B(1)
B(4)=0.
B(5)=6.*B(1)
B(6)=0.
B(7)=B(3)
B(8)=0.
B(9)=B(1)
return
end
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Рассмотрим вопрос получения ПФ 5 порядка из коэффициентов ФНЧ Чебышева 2 рода и Кауэра.
Передаточная характеристика этих фильтров имеет вид:
Пришлось 5 порядок рассчитывать, т.к. он приведен в примерах в статьях:
http://www.dsplib.ru/content/filters/ch5/ch5.html
http://www.dsplib.ru/content/filters/ch6/ch6.html
Сразу неприятность - матрица 11х11 не помещается в Latex
Ну и ладно, запишем коэффициенты в явном виде:
Заметим, что нам теперь 2 матрицы z-преобразования рассчитывать для An и для Bn.
Проверено электроникой (с)
Передаточная характеристика этих фильтров имеет вид:
Пришлось 5 порядок рассчитывать, т.к. он приведен в примерах в статьях:
http://www.dsplib.ru/content/filters/ch5/ch5.html
http://www.dsplib.ru/content/filters/ch6/ch6.html
Сразу неприятность - матрица 11х11 не помещается в Latex
Ну и ладно, запишем коэффициенты в явном виде:
Заметим, что нам теперь 2 матрицы z-преобразования рассчитывать для An и для Bn.
Проверено электроникой (с)
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Заработало!!!
Коэффициенты ФНЧ - прототипа взяты из статьи:
http://www.dsplib.ru/content/filters/ch5/ch5.html
Сделано преобразование коэффициентов на частоту среза 0.1 и потом преобразование в ПФ на центральную частоту 0.3 Аналогично для эллиптического фильтра:
http://www.dsplib.ru/content/filters/ch6/ch6.html
Коэффициенты ФНЧ - прототипа взяты из статьи:
http://www.dsplib.ru/content/filters/ch5/ch5.html
Сделано преобразование коэффициентов на частоту среза 0.1 и потом преобразование в ПФ на центральную частоту 0.3 Аналогично для эллиптического фильтра:
http://www.dsplib.ru/content/filters/ch6/ch6.html