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

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

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

Сообщение Santik »

Матрица z- преобразования Нфнч(S)-->Hпф(z) 5 порядка для коэффициентов имеет вид:
Матрица z.rar
(11.67 КБ) 318 скачиваний
В первых 6 столбцах - элементы уже известной нам матрицы z- преобразования Нфнч(S)-->Hфвч(z) "разбавленые" нулевыми строками.
Если мы обозачим эту матрицу , то коэффициенты
вычисляются по формуле:
CodeCogsEqn.gif
CodeCogsEqn.gif (3.3 КБ) 6442 просмотра

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

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

Сообщение Santik »

С Днём Радио!

Программа расчёта полосового фильтра 5 порядка:

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

Subroutine BP_RF_5(F0,A,B)
!F0- относительная центральная частота 
!A,B - выходные массивы коэффициентов
real*8 F0,Fs,Pi,Psi,Psi0,Psi2,Psi3,Psi4,Psi5
real*8 b_1,b_2,b_3,b_4,a0,a_1,a_2,a_3,a_4,a_5,Omega_p,O2,O3,O4,O5
real*8, dimension (11) :: A,B
Pi=3.1415926535897932D+00

Fs=0.1   !Частота среза ФНЧ
Omega_p=TAN(Fs*0.5*Pi)
O2=Omega_p*Omega_p
O3=O2*Omega_p
O4=O3*Omega_p
O5=O4*Omega_p

! Фильтр Чебышева 2 рода    (коэффициенты из статьи)
b_1=0.15819*Omega_p
b_2=0.
b_3=0.63277*O3
b_4=0.
b_5=0.50622*O5
a_1=2.64719*Omega_p
a_2=3.49129*O2
a_3=2.91421*O3
a_4=1.51981*O4
a_5=0.50622*O5

!Эллиптический фильтр
b_1=0.02974*Omega_p
b_2=0.
b_3=0.16652*O3
b_4=0.
b_5=0.2042*O5
a_1=0.92546*Omega_p
a_2=1.81487*O2
a_3=1.09691*O3
a_4=0.74668*O4
a_5=0.20420*O5

Psi0=1./DCOS(Fs*0.5*Pi)
Psi=-2.*DCOS(F0*Pi)*Psi0
Psi2=Psi*Psi
Psi3=Psi2*Psi
Psi4=Psi3*Psi
Psi5=Psi4*Psi
a0=1./(1+a_1+a_2+a_3+a_4+a_5)
A(1)=1.
A(2)=a0*(5*Psi+4*Psi* a_1+3*Psi* a_2+2*Psi*a_3+Psi*a_4)
A(3)=a0*(5+10*Psi2+(3+6*Psi2)*a_1+(1+3*Psi2)*a_2+(Psi2-1)*a_3-3*a_4-5*a_5)
A(4)=a0*(20*Psi+10*Psi3+(8*Psi+4*Psi3)*a_1+Psi3* a_2-4*Psi* a_3-4 *Psi* a_4)
A(5)=a0*(10+30*Psi2+5*Psi4+(2+6*Psi2+Psi4)*a_1-(2+3*Psi2)*a_2-(2+3*Psi2)*a_3+2*a_4+10*a_5)
A(6)=a0*(30*Psi+20*Psi3+Psi5-(6*Psi+2*Psi3)*a_2+6*Psi* a_4)
A(7)=a0*(10+30*Psi2+5*Psi4-(2+6*Psi2+Psi4)*a_1-(2+3*Psi2)*a_2+(2+3*Psi2)*a_3+2*a_4-10*a_5)
A(8)=a0*(20*Psi+10*Psi3-(8*Psi+4*Psi3)*a_1+Psi3*a_2+4*Psi*a_3-4*Psi*a_4)
A(9)=a0*(5+10*Psi2-(3+6*Psi2)*a_1+(1+3*Psi2)*a_2-(Psi2-1)*a_3-3*a_4+5*a_5)
A(10)=a0*(5*Psi-4*Psi *a_1+3 *Psi* a_2-2*Psi* a_3+Psi *a_4)
A(11)=a0*(1-a_1+a_2-a_3+a_4-a_5)

B(1)=a0*(b_1+b_2+b_3+b_4+b_5)
B(2)=a0*(4*Psi* b_1+3*Psi* b_2+2*Psi* b_3+Psi* b_4)
B(3)=a0*((3+6*Psi2)*b_1+(1+3*Psi2)*b_2+(Psi2-1)*b_3-3*b_4-5*b_5)
B(4)=a0*((8*Psi+4*Psi3)*b_1+Psi3*b_2-4*Psi*b_3-4*Psi* b_4)
B(5)=a0*((2+6*Psi2+Psi4)*b_1-(2+3*Psi2)*b_2-(2+3*Psi2)*b_3+2*b_4+10*b_5)
B(6)=a0*(-(6*Psi+2*Psi3)*b_2+6*Psi* b_4)
B(7)=a0*(-(2+6*Psi2+Psi4)*b_1-(2+3*Psi2)*b_2+(2+3*Psi2)*b_3+2*b_4-10*b_5)
B(8)=a0*(-(8*Psi+4*Psi3)*b_1+Psi3*b_2+4*Psi* b_3-4*Psi *b_4)
B(9)=a0*(-(3+6*Psi2)*b_1+(1+3*Psi2)*b_2-(Psi2-1)*b_3-3*b_4+5*b_5)
B(10)=a0*(-4*Psi *b_1+3*Psi *b_2-2*Psi *b_3+Psi *b_4)
B(11)=a0*(-b_1+b_2-b_3+b_4-b_5)
return 
end
Конечно, необходимо оптимизировать формулы расчёта. Текст привёл скорее в демонстрационных целях :D

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

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

Сообщение Santik »

ПФ Чебышева 2 рода 5 порядка.
Полоса 200 Гц.
Перестройка центральной частоты на t=0.5 сек с Fo=450 Гц на Fo=550 Гц.
Входной сигал - белый шум.
ПФЧ5.jpg

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

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

Сообщение Santik »

Santik писал(а):...Но есть и положительные моменты - нашёл формулу непосредственного z-преобразования Нфнч(S) --> Hпф(z). То есть промежуточное преобразование S--> (S*S+w*w)/BS можно не делать!
Для z-преобразования Нфнч(S)--> Hпф(z) я вывел формулу:

где


Оказывается это называется "преобразование Константинидиса"... :lol: :lol: :lol:
и используется более 50 лет...

Вот книга Богнер, Костантинидис "Введение в цифровую фильтрацию":
Filtr_Bogner.rar
(1.76 МБ) 340 скачиваний
Советую посмотреть ещё:
http://ets.ifmo.ru/denisov/dsp/lec11.htm

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

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

Сообщение Santik »

Пусть ФНЧ 6 порядка имеет вид:

Преобразование Константинидиса для полосового фильтра:

где


Обозначим соответствующую матрицу Константинидиса 6 порядка:
К6.JPG
Коэффициенты фильтра легко находятся из уравнений:
К6А.JPG
К6А.JPG (8.23 КБ) 6397 просмотров
К6В.JPG
К6В.JPG (8.35 КБ) 6397 просмотров

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

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

Сообщение Santik »

Более подробное описание матриц Константинидиса в файле:

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

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

Сообщение Santik »

Из-за симметрии элементов матрицы Костантинидиса существует быстрый способ вычисления коэффициентов.

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

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

Сообщение Santik »

Приблизительно оценил скорость расчёта.
Процессор Intel Atom 1.6 ГГц
Фильтр - полосовой фильтр Кауэра 5 порядка.
Расчитывалось 5 млн. фильтров с одинаковой полосой, менялась только центральная частота.
Время расчёта по марице Константинидиса 46 секунд.
Время расчёта быстрым методом 28 секунд.

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

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

Сообщение Santik »

Полосовой фильтр 5 порядка. Быстрый алгоритм.

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

#include <math.h>
double F0,Fs,Pi,Psi,Psi0,Psi2,Psi3,Psi4,Psi5,a0Psi,z1,z2;
double b_1,b_2,b_3,b_4,b_5,a0,a_1,a_2,a_3,a_4,a_5,Omega_p,O2,O3,O4,O5;
double A[11], B[11];
int i;
void main(void){
//!F0- относительная центральная частота 
//!A,B - выходные массивы коэффициентов
Pi=3.1415926535897932;
F0=0.3;
Fs=0.2;   //!Частота среза ФНЧ
Omega_p=tan(Fs*0.5*Pi);
O2=Omega_p*Omega_p;
O3=O2*Omega_p;
O4=O3*Omega_p;
O5=O4*Omega_p;
//!Эллиптический фильтр
b_1=0.02974*Omega_p;
b_2=0.;
b_3=0.16652*O3;
b_4=0.;
b_5=0.2042*O5;
a_1=0.92546*Omega_p;
a_2=1.81487*O2;
a_3=1.09691*O3;
a_4=0.74668*O4;
a_5=0.20420*O5;
//! Фильтр Чебышева 2 рода    (коэффициенты из статьи)
//b_1=0.15819*Omega_p;
//b_2=0.;
//b_3=0.63277*O3;
//b_4=0.;
//b_5=0.50622*O5;
//a_1=2.64719*Omega_p;
//a_2=3.49129*O2;
//a_3=2.91421*O3;
//a_4=1.51981*O4;
//a_5=0.50622*O5;

Psi0=1./cos(Fs*0.5*Pi);
Psi=-2.*cos(F0*Pi)*Psi0;
Psi2=Psi*Psi;
Psi3=Psi2*Psi;
Psi4=Psi3*Psi;
Psi5=Psi4*Psi;
a0=1./(1+a_1+a_2+a_3+a_4+a_5);
a0Psi=a0*Psi;
A[0]=1.;
A[10]=a0*(1-a_1+a_2-a_3+a_4-a_5);
z1=a0Psi*(5+3* a_2+a_4);
z2=-2*a0Psi*(2*a_1+ a_3);
A[1]=z1-z2;
A[9]=z1+z2;
z1=a0*(5+Psi2*(10+3*a_2)+a_2-3*a_4);
z2=a0*(-(3+6*Psi2)*a_1-(Psi2-1)*a_3+5*a_5);
A[2]=z1-z2;
A[8]=z1+z2;
z1=a0Psi*(20+Psi2*(10+ a_2)-4* a_4);
z2=a0Psi*(-(8+4*Psi2)*a_1+4*a_3);
A[3]=z1-z2;
A[7]=z1+z2;
z1=a0*(10+30*Psi2+5*Psi4-(2+3*Psi2)*a_2+2*a_4);
z2=a0*(-(2+6*Psi2+Psi4)*a_1+(2+3*Psi2)*a_3-10*a_5);
A[4]=z1-z2;
A[6]=z1+z2;
A[5]=a0Psi*(30+20*Psi2+Psi4-(6+2*Psi2)*a_2+6* a_4);
B[0]=a0*(b_1+b_2+b_3+b_4+b_5);
B[10]=a0*(-b_1+b_2-b_3+b_4-b_5);
z1=a0Psi*(+3* b_2+ b_4);
z2=a0Psi*(-4*b_1-2*b_3);
B[1]=z1-z2;
B[9]=z1+z2;
z1=a0*(+(1+3*Psi2)*b_2-3*b_4);
z2=a0*(-(3+6*Psi2)*b_1-(Psi2-1)*b_3+5*b_5);
B[2]=z1-z2;
B[8]=z1+z2;
z1=a0Psi*(Psi2*b_2-4* b_4);
z2=a0Psi*(-(8+4*Psi2)*b_1+4* b_3);
B[3]=z1-z2;
B[7]=z1+z2;
z1=a0*(2*b_4);
z2=a0*(-(2+6*Psi2+Psi4)*b_1+(2+3*Psi2)*b_3-10*b_5);
B[4]=z1-z2;
B[6]=z1+z2;
B[5]=a0Psi*(-(6+2*Psi2)*b_2+6* b_4);
return;              
} 
Можете сравнить с аналогичной программой от 07 мая :D

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

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

Сообщение Santik »

Более упорядочено материал выложен в статьях здесь: http://we.easyelectronics.ru/Theory/cif ... ast-1.html

Ответить