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

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

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

Сообщение Santik » 13 фев 2015, 06:28

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

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 775
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

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

Сообщение Бахурин Сергей » 14 фев 2015, 23:48

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

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

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

Сообщение Santik » 15 фев 2015, 07:06

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

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

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

Сообщение Santik » 16 фев 2015, 07:18

Пример оптимизации (может быть не очень удачный :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
Последний раз редактировалось Santik 16 фев 2015, 18:29, всего редактировалось 1 раз.

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

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

Сообщение Santik » 16 фев 2015, 09:13

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

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

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

Сообщение Santik » 17 фев 2015, 06:43

Давайте теперь на примере всё того же режекторного фильтра рассмотрим случай 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-разрядное число.

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

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

Сообщение Santik » 27 фев 2015, 19:42

Рассмотрим фильтр Баттерворта 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)]

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

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

Сообщение Santik » 28 фев 2015, 07:04

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

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

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

Сообщение Santik » 28 фев 2015, 10:33

Приведём пример "оптимизации" коэффициентов фильтра Баттерворта 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

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

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

Сообщение Santik » 06 мар 2015, 09:29

Теперь рассмотрим ФВЧ :
ФНЧ 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.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость