Страница 1 из 10

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

Добавлено: 13 фев 2015, 06:28
Santik
Хотелось бы рассмотреть возможность построения системы оптимальных коэффициентов БИХ-фильтров с точки зрения быстродействия, что особенно актуально при реализации фильтров на микроконтроллерах. Т.е. хотелось бы, чтобы все коэффициенты а1, а2, а3... и b1, b2, b3... были из ряда ...1/16, 1/8, 1/4, 1/2, 1, 2, 4, 8... Тогда операция умножения заменяется операцией сдвига.

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

Добавлено: 14 фев 2015, 23:48
Бахурин Сергей
Такой подход особый случай округления коэффициентов. Для бих всегда приходится контроллировать устойчивость потому что при округлении коэффициентов есть опасность выхода нуля за единичную окружность. Крометого думаю что такие трюки не прокатят на фильтрах чебышева или эллиптических фильтрах. Но вообще задача интересная.

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

Добавлено: 15 фев 2015, 07:06
Santik
Бахурин Сергей писал(а):Такой подход особый случай округления коэффициентов. Для бих всегда приходится контроллировать устойчивость потому что при округлении коэффициентов есть опасность выхода нуля за единичную окружность. Крометого думаю что такие трюки не прокатят на фильтрах чебышева или эллиптических фильтрах. Но вообще задача интересная.
Ни в коем случае "округлять" коэффициенты я не предлагаю. Хотелось бы создать фильтр с коэффициентами удобными для применения на микроконтроллерах. А "поле" изменения параметров есть. Ради хороших коэффициентов можно пожертвовать в некоторых пределах характеристиками фильтра и даже подобрать нужную частоту дискретизации!
Недавно эксперимент провёл - как отличается на современных процессорах скорость умножения на 1/2 и на 1/3.
Вывод - никак не отличается! Некоторые даже с целыми числами работают медленнее (CELERON), чем с floating point!
Но ждать когда такой же эффект будет у микроконтроллеров... :shock:
Предполагаю, что создать "оптимальные" коэффициенты можно будет только на фильтрах порядка больше 4 и меньше 7. А от типа фильтра не очень понимаю как может зависеть. Рекуррентная формула же не меняется...

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

Добавлено: 16 фев 2015, 07:18
Santik
Пример оптимизации (может быть не очень удачный :lol: )
Пусть необходимо создать режекторный фильтр Fr=2000 Гц. Fd=10000 Гц.
Воспользуемся формулой(5) из статьи http://www.dsplib.ru/content/notch/notch.html
k1=-0.309017015
k2=0.5
соответственно коэффициенты:
G=(k2+1)/2=3/4
b0=1
b1=2*k1=-0.61803403
b2=1
a0=1
a1=k1(1+k2)=-0.463525522
a2=k2=0.5
Попытаемся оптимизировать коэффициенты a1и b1.

Пусть a1=k1(1+k2)=-0.5 =-1/2
Тогда k1=-1/3 или f0/Fd=0.195913279
Зададим Fd=10200 Гц
Тогда частота режекции будет Fr=1998.315449 (ошибка Fr 0.085%)
Таким образом при частоте дискретизации Fd=10200 Гц и Fr=1998.315449 Гц
получим следующие коэффициенты фильтра:
G=(k2+1)/2=3/4
b0=1
b1=2*k1=-2/3
b2=1
a0=1
a1=k1(1+k2)=-1/2
a2=k2=1/2

Положив G=1/2 получим:
b0=3
b1=-2
b2=3
a0=2
a1=-1
a2=1

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

Добавлено: 16 фев 2015, 09:13
Santik
Таким образом мы без всяких округлений получили целые коэффициенты фильтра, т.е. получили заведомо устойчивый фильтр .
Единственное деление на 2 для целых чисел легко получается арифметическим сдвигом вправо.
Для микроконтроллеров изменение частоты дискретизации легко может быть проведено путём подбора частоты кварцевого резонатора.

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

Добавлено: 17 фев 2015, 06:43
Santik
Давайте теперь на примере всё того же режекторного фильтра рассмотрим случай Fr<<Fd.
Пусть Fr=50 Гц, Fd=44100 Гц. k2=1/2.
k1=-0.999974626
Положим k1=2^(-15)-1=-0.999969482, Fd=40250. Получим при этом Fr=50.04689734 Гц
Рекурентную формулу можно записать в виде:
Y(k)=3/4*{X(k)+(2^(-15)-1)*X(k-1)+X(k-2)-3/2*(2^(-15)-1)*Y(k-1)-1/2*Y(k-2)}

Заметим, что при 16-ти разрядном АЦП 2^(-15)*X(k) =0 при любом X(k).
Y(k)=3/4*{X(k)-X(k-1)+X(k-2)+3/2*Y(k-1)-3/2*2^(-15)*Y(k-1)-1/2*Y(k-2)}
Или
G=3/2
b0=1
b1=-1
b2=1
a0=2
a1=-3*[1-2^(-15)]
a2=1
Особо отметим, что нельзя приравнять a1=-3, т.к. Y- уже 32-разрядное число.

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

Добавлено: 27 фев 2015, 19:42
Santik
Рассмотрим фильтр Баттерворта N-порядка.
Отметим симметричность коэффициентов b:

N=3 b(k)=(1,3,3,1)
N=4 b(k)=(1,4,6,4,1)
N=5 b(k)=(1,5,10,10,5,1)
N=6 b(k)=(1,6,15,20,15,6,1)
N=7 b(k)=(1,7,21,35,35,21,7,1)
.....................


Коэффициент G, естественно, будет разный для каждой пары [Fs,N].
Заметим, что количество умножений при вычислении Y(k) можно существенно уменьшить.
Покажем это на примере N=5.
L1(n)_________L2(n)__________L3(n)
X(n)__________X(n)*5 ________ X(n)*10
X(n+1)_______ X(n+1)*5 ______ X(n+1)*10
X(n+2) ______ X(n+2)*5 ______ X(n+2)*10
X(n+3)_______ X(n+3)*5______ X(n+3)*10
X(n+4) ______ X(n+4)*5 _______ X(n+4)*10
X(n+5) ______ X(n+5)*5 ______ X(n+5)*10

Y(n+5)=(1/a0)*[L1(n+5)+L2(n+4)+L3(n+3)+L3(n+2)+L2(n+1)+L1(n) - a1*Y(n-1)-a2*Y(n-2)-a3*Y(n-3)-a4*Y(n-4)-a5*Y(n-5)]

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

Добавлено: 28 фев 2015, 07:04
Santik
Нужно отметить, что симметрией коэффициентов bn обладают фильтры Чебышева (1 и 2 рода), элиптические фильтры.
Но только фильтры Баттерворта и Чебышева 1 рода имеют целые коэффициенты
См. таблицу:
Коэффициенты bn.rar
(8.32 КБ) 379 скачиваний

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

Добавлено: 28 фев 2015, 10:33
Santik
Приведём пример "оптимизации" коэффициентов фильтра Баттерворта 4 порядка:
Пусть f0/fN=0.5, неравномерность 3 дБ
Воспользовавшись программой filter.exe получим:
Коэффициенты b:
9.409247452420184400e-002
3.763698980968073800e-001
5.645548471452109800e-001
3.763698980968073800e-001
9.409247452420184400e-002

Коэффициенты a:
1.000000000000000000e+000
1.475751202184475700e-003
4.860295104363562300e-001
3.094878156151232900e-004
1.766484293307393100e-002

Введем параметр G=b0



Оптимизируем G.
Удобно, если G=1/8.
Найдем такие параметры фильтра:
Оптимизированный фильтр.JPG

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

Добавлено: 06 мар 2015, 09:29
Santik
Теперь рассмотрим ФВЧ :
ФНЧ 0.5 1 дБ ФВЧ 0.5 1 дБ
G=7.295008813812E-02
Коэффициенты b: Коэффициенты b:
7.295008813812E-02 1 7.295008813812E-02 1
3.647504406906E-01 5 -3.647504406906E-01 -5
7.295008813812E-01 10 7.295008813812E-01 10
7.295008813812E-01 10 -7.295008813812E-01 -10
3.647504406906E-01 5 3.647504406906E-01 5
7.295008813812E-02 1 -7.295008813812E-02 -1

Коэффициенты a: Коэффициенты a:
1.000000000000E+00 1.000000000000E+00
4.221861570594E-01 -4.221861570594E-01
6.957970951991E-01 6.957970951991E-01
1.471443658482E-01 -1.471443658482E-01
6.533141429455E-02 6.533141429455E-02
3.943788018486E-03 -3.943788018486E+00
Можно заметить, что у ФВЧ меняется только знак нечётных коэффициентов.
Таким образом ФНЧ с частотой Fs/FN всегда имеют свой ФВЧ "аналог" с частотой 1-Fs/FN различающийся лишь знаком нечётных коэффициентов an и bn.
С этой точки зрения интересно рассмотреть полосовые фильтры, имеющие частоты "симметричные" относительно 0.5.