"Оптимальные" коэффициенты БИХ фильтра

Все что касается фильтрации
Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

На примере фильтра Баттерворта 4 порядка покажем, как быстро рассчитать коэффициенты фильтра.
Будем пользоваться формулами и обозначениями из статьи:
http://www.dsplib.ru/content/filters/bu ... terex.html

N=4


Сразу сделаем преобразование:



и обозначим


Обозначим



Теперь воспользуемся программой для умножения полиномов с сайта:
http://www.mathsolution.ru/math-task/simplifi-polynom
Введём формулу умножаемых полиномов:
(s^2+2bxs+b^2)(s^2+2bys+b^2)
Ответ программы:





Обозначим:





Обозначим




и снова воспользуемся программой умножения полиномов.
(1-z)^4+a(1-z)^3(1+z)+b(1-z)^2(1+z)^2+c(1-z)(1+z)^3+d(1+z)^4
Ответ:


Или





Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Преобразуем:







Окончательно:






Последнее преобразование было, скорее всего, сделано с единственной целью - запугать начинающего фильтростроителя :D
Надо было ещё и H(z) в явном виде нарисовать :D

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Сразу рассмотрим случай N=5, так это не требует больших вычислений.











Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Для случая N=6
19 марта 2015. В процессе отладки программы выяснилось, что x,y,w определены неправильно!
Вот верные коэффициенты:















Фильтр N=7 легко получить из случая N=6 , точно так же, как из 5 получили 6.
Даже формулы приводить не буду :D

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

В матричной форме:
N6_1.GIF
N6_1.GIF (5.57 КБ) 4172 просмотра
Почему-то не работает редактор формул для матриц:

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Для N=6




Таким образом, зная коэффициенты Н(S) можно очень просто перейти к коэффициентам

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Вот такую матрицу я рассчитал для N=6 с помощью калькулятора
http://www.mathsolution.ru/math-task/simplifi-polynom
Matr.GIF
Matr.GIF (2.73 КБ) 4172 просмотра
К счастью, эту матрицу необходимо рассчитать только один раз.
После вычисления коэффициентов она нам больше не понадобится!
Окончательно:
Butt_6.GIF
Butt_6.GIF (5.05 КБ) 4172 просмотра

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Итак, коэффициенты для ФНЧ рассчитаны. А что делать, если нужен ФВЧ?
Да практически ничего.
Коэффициенты an - не изменятся (при той же частоте и Rp). :shock:
Коэффициенты bn надо умножить на
и изменить знак у нечётных элементов. Всё.

Причина такого "счастливого" совпадения в том, что перед преобразованием ФНЧ-ФВЧ делается преобразование ФНЧ-ФНЧ на частоту

H(s) для ФВЧ становится очень похожей на H(s) ФНЧ. При N=2
Для ФНЧ:

Для ФВЧ:



Этот вопрос уже обсуждался в http://dsplib.ru/forum/viewtopic.php?f=5&t=15
но там формула для частоты сдвига несколько иная :?:
Если интересно, я могу подробно всё расписать.

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Рассмотрим подробно преобразование ФНЧ- ФВЧ. Пусть

Сначала сделаем преобразование ФНЧ-ФНЧ на частоту


Теперь преобразование ФНЧ- ФВЧ на частоту


Теперь положим


Положим:


Напомню, что для ФНЧ:

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: "Оптимальные" коэффициенты БИХ фильтра

Сообщение Santik »

Программа расчёта коэффициентов фильтра Баттерворта при N=6

Код: Выделить всё

Subroutine Butterworth(Fs,Fd,Rp,A,B,N,L)
	
!Fs-частота среза(Гц), Fd частота дискретизации (Гц),Rp - неравномерность АЧХ (дБ)
!A,B - выходные массивы коэффициентов, N- порядок фильтра, L -тип фильтра  0-ФНЧ 1-ФВЧ

real*8 Fs,Fd,Rp,Pi,Omega_p,Ep,O6,Alpha,Beta,x,y,w
real*8 a0,a01,b01,b2,b3,b4,b5,b6,x0,y0,w0,K2,K3
integer*4 i,j,N,L
real*8, dimension (40) :: A,B

Pi=3.14159265358
Omega_p=DTAN(Fs/(Fd*0.5)*0.5*Pi)
Ep=DSQRT(10.**(Rp*0.1)-1.)
Alpha=1.0/Ep**(1./N)
Beta=Alpha*Omega_p
if(N==6) then
K2=DSQRT(2.0d0)      !19.03.2015 внесено изменение с целью повышения быстродействия.
K3=DSQRT(3.0d0)
x=K2+K2*K3
y=4.+2.*K3
w=K2+2.*x                !Конец изменённого участка программы
b2=Beta*Beta
b3=b2*Beta
b4=b3*Beta
b5=b4*Beta
b6=b5*Beta
a0=1.+beta*x+b2*y+b3*w+b4*y+b5*x+b6
a01=1./a0
b01=b6*a01
B(1)=b01
B(2)=6.*b01
B(3)=15*b01
B(4)=20*b01
B(5)=15*b01
B(6)=6*b01
B(7)=b01

A(1)=1.
A(2)=a01*(-6.-4.*x*beta -2.*y*b2        +2.*y*b4+4.*x*b5 +6.*b6)
A(3)=a01*(15.+5.*x*beta    -y*b2-3.*w*b3   -y*b4+5.*x*b5+15.*b6)
A(4)=a01*(-20.          +4.*y*b2        -4.*y*b4+        20.*b6)
A(5)=a01*(15.-5.*x*beta-    y*b2+3.*w*b3   -y*b4-5.*x*b5+15.*b6)
A(6)=a01*(-6.+4.*x*beta- 2.*y*b2        +2.*y*b4-4.*x*b5 +6.*b6)
A(7)=a01*(1.    -x*beta    +y*b2   -w*b3   +y*b4   -x*b5    +b6)

if (L== 1) then
O6=1./Omega_p**6   
do i=1,7
B(i)=B(i)*O6*(-1)**(i+1)
end do
end if
          end if
return 
end
C filter.exe совпадает :D

Ответить