"Оптимальные" коэффициенты БИХ фильтра
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
На примере фильтра Баттерворта 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
Ответ:
Или
Будем пользоваться формулами и обозначениями из статьи:
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: "Оптимальные" коэффициенты БИХ фильтра
Преобразуем:
Окончательно:
Последнее преобразование было, скорее всего, сделано с единственной целью - запугать начинающего фильтростроителя
Надо было ещё и H(z) в явном виде нарисовать
Окончательно:
Последнее преобразование было, скорее всего, сделано с единственной целью - запугать начинающего фильтростроителя
Надо было ещё и H(z) в явном виде нарисовать
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Сразу рассмотрим случай N=5, так это не требует больших вычислений.
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Для случая N=6
19 марта 2015. В процессе отладки программы выяснилось, что x,y,w определены неправильно!
Вот верные коэффициенты:
Фильтр N=7 легко получить из случая N=6 , точно так же, как из 5 получили 6.
Даже формулы приводить не буду
19 марта 2015. В процессе отладки программы выяснилось, что x,y,w определены неправильно!
Вот верные коэффициенты:
Фильтр N=7 легко получить из случая N=6 , точно так же, как из 5 получили 6.
Даже формулы приводить не буду
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
В матричной форме:
Почему-то не работает редактор формул для матриц:- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Для N=6
Таким образом, зная коэффициенты Н(S) можно очень просто перейти к коэффициентам
Таким образом, зная коэффициенты Н(S) можно очень просто перейти к коэффициентам
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Вот такую матрицу я рассчитал для N=6 с помощью калькулятора
http://www.mathsolution.ru/math-task/simplifi-polynom К счастью, эту матрицу необходимо рассчитать только один раз.
После вычисления коэффициентов она нам больше не понадобится!
Окончательно:
http://www.mathsolution.ru/math-task/simplifi-polynom К счастью, эту матрицу необходимо рассчитать только один раз.
После вычисления коэффициентов она нам больше не понадобится!
Окончательно:
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Итак, коэффициенты для ФНЧ рассчитаны. А что делать, если нужен ФВЧ?
Да практически ничего.
Коэффициенты an - не изменятся (при той же частоте и Rp).
Коэффициенты bn надо умножить на
и изменить знак у нечётных элементов. Всё.
Причина такого "счастливого" совпадения в том, что перед преобразованием ФНЧ-ФВЧ делается преобразование ФНЧ-ФНЧ на частоту
H(s) для ФВЧ становится очень похожей на H(s) ФНЧ. При N=2
Для ФНЧ:
Для ФВЧ:
Этот вопрос уже обсуждался в http://dsplib.ru/forum/viewtopic.php?f=5&t=15
но там формула для частоты сдвига несколько иная
Если интересно, я могу подробно всё расписать.
Да практически ничего.
Коэффициенты an - не изменятся (при той же частоте и Rp).
Коэффициенты 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
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: "Оптимальные" коэффициенты БИХ фильтра
Программа расчёта коэффициентов фильтра Баттерворта при N=6
C filter.exe совпадает
Код: Выделить всё
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