Цифровые рекурсивные фильтры. Часть 3.

Продолжение статей Часть 1. и Часть 2.
Нам осталось рассмотреть преобразования аналогового НЧ фильтра в цифровой ФНЧ, ФВЧ, полосовой и режекторный фильтр.

I. Общие положения.

Все выкладки будем приводить для фильтра Баттерворта 2-го порядка.
Аналоговый ФНЧ- прототип Баттерворта имеет вид:

где β — параметр определяющий частоту среза фильтра.
Сразу отметим, что векторы коэффициентов при степенях S числителя и знаменателя H(S) выглядят так:

z- преобразование ФНЧ имеет вид:
z- преобразование ФВЧ имеет вид:
С помощью z- преобразования мы получаем Н(z) — передаточную характеристику в z- области.

По-другому её можно назвать- передаточная характеристика цифрового фильтра, так как её коэффициенты Ai, Bi сразу дают возможность построить рекуррентную формулу фильтра или проще говоря — цифровой фильтр.
Рекуррентная формула цифрового фильтра порядка N в общем виде:


II. Преобразования аналогового ФНЧ в цифровой ФНЧ и ФВЧ.

Во второй части статьи мы подробно рассмотрели методику расчёта матриц z- преобразования.
А теперь, внимание!
… Лёгким движением руки, матрицы z- преобразования превращаются… матрицы превращаются… превращаются матрицы… в оригинальные шорты коэффициенты рекуррентной формулы!

Как видим для создания ФВЧ достаточно поменять местами столбца матрицы z- преобразования.
Кроме того, параметр β имеет разное значение. Для ФНЧ:

а для ФВЧ:

Но есть более простой способ определения коэффициентов цифрового ФВЧ.
Надо спроектировать фильтр НЧ на относительную частоту среза (1-Fs/FN) и изменить знаки нечётных коэффициентов Ai, Bi на противоположные. И всё. ФВЧ на частоту Fs/FN готов!

III. Преобразования аналогового ФНЧ в цифровой полосовой и режекторый фильтры.

Чуть сложнее обстоит дело с полосовым и режекторным фильтрами.
z- преобразование полосового фильтра:

z- преобразование режекторного фильтра:

где

Fo — центральная частота фильтра, Fs — частота среза ФНЧ-прототипа (после преобразования равна полосе фильтра), FN — частота Найквиста.

Получение полосового фильтра мы подробно рассмотрели в Части 1.


Справа матрица записана в более компактном виде. По аналогии с преобразованиями матриц ФНЧ-ФВЧ поменяем столбцы матрицы и получим режекторный фильтр:

Как и в случае ФВЧ параметр β для цифрового режекторного фильтра:


IV. Программная реализация режекторного фильтра Баттерворта 2-го порядка.

#include <math.h>
double F0,Fs,Pi,Psi,Psi0,Psi2,z1,z2;
double a0,a_1,a_2,a_3,Omega_p,O2,K2;
double A[5], B[5];
void main(void){
//!F0- относительная центральная частота 
//!A,B - выходные массивы коэффициентов
Pi=3.1415926535897932;
K2=1.414213562373095144;
F0=0.3;    // Относительная центральная частота 
Fs=0.2;   // Относительная частота среза ФНЧ-прототипа (относительная полоса)
Omega_p=tan(Fs*0.5*Pi); //для BP
Omega_p=1./Omega_p;     //для BS
O2=Omega_p*Omega_p;
a_1=K2*Omega_p;
a_2=O2;
Psi0=1./cos(Fs*0.5*Pi);
Psi=-2.*cos(F0*Pi)*Psi0;
Psi2=Psi*Psi;
z1=1+a_2;
z2=-a_1;
a0=1./(z1-z2);
A[0]=1.;
A[4]=a0*(z1+z2);
z1=(Psi+Psi)*a_2;
z2=-Psi*a_1;
A[1]=a0*(z1-z2);  
A[3]=a0*(z1+z2);
A[2]=a0*(-2+a_2*(2+Psi2));
a0=a0*O2;
B[0]=a0;        
B[1]=a0*(Psi+Psi);
B[2]=a0*(2.+Psi2);
B[3]=B[1];
B[4]=B[0];
return;              
} 

Тестовый вариант. Фрагмент Simbolic Memory (IAR Embedded Workbench IDE):



Сравнение с аналогичной программой:



Практический пример работы программы:
Перестраиваемый режекторный фильтр. Центральная частота Fо=(500+200t/T)[Гц], T=1 сек.
Частота дискретизации 2000 Гц.
Входной сигнал — белый шум.


V. Заключение

Показано, как с помощью матриц z- преобразования легко осуществить переход от аналогового фильтра-прототипа НЧ к цифровым фильтрам НЧ, ВЧ, полосовым и режекторным. Эти же рассуждения пригодны для создания фильтров более высоких порядков, а также фильтров Чебышева и Кауэра.
  • +9
  • 10 июня 2015, 02:14
  • Santik

Комментарии (30)

RSS свернуть / развернуть
Спасибо.
Просьба — если не сложно, в статьях сделай перекрестные ссылки на 1, 2, 3 части.
0
Ссылки не проблема сделать… Сделал уже. А по уму — надо всё переписать, без всяких частей 1,2,3… :-) Это я тоже понимаю. Хотя боюсь через-чур «многа текста» будет. Когда первую статью писал — определённого плана ведь не было. Это потом добавилась часть 2 и «до кучи» часть 3.
Ну ладно, «первый блин — комом» :-)
0
Или 3 блина? :-)
Кстати, а никто не знает как КИХ — фильтры в реалтайме рассчитывают? По идее даже проще, чем БИХ должно быть.
0
Ну так никто не мешает статьи отредактировать. В том числе и слить. Но
1) Стена текста — тоже не слишком хорошо
2) Сайт имеет ограничения на длину статьи (хотя, ЕМНИП, они у тебя достаточно короткие)
3) Комментарии останутся там, где их оставили. Ну и удалить лишние статьи не удастся (разве что админа попросить)
0
Да ладно, пусть пока всё останется как есть. :-)
0
Я за то, чтобы сделать pdf, в нем три раздела.
До меня все это туго доходит, а так раcпечатал pdf — и вдумчиво покуриваешь
Спасибо, Santik, отличная работа!
PS Эти баги SQL уже затрахали
+1
Да, в принципе можно сделать. Согласен, что с распечаткой удобнее работать. Хотя я вот всё больше с карандашом и бумажкой… На матрицы у меня 2 тетради общих формата А4 ушло :-)
Спасибо за отзыв! Ещё десяток таких — и всерьёз займусь за переработку статьи в pdf- формате! :-)
+3
Да, pdf полезен. Еще и тем полезен, что его можно положить в папку-библиотечку.
0
Страничку тоже можно сохранить и в библиотеку положить. Вместе с комментариями, к тому же (хотя у этого цикла в комментариях пока почти ничего полезного).
0
Да, полезного мало… Народ в раздумьях… Ну это и правильно!
0
Вот только отформатируется это добро ровно так, как повезёт.
0
Да я даже готов титульный лист подготовить:
Курсовая работа студента 2 курса / нужное вписать/
:-)
0
А если без шуток, я всё-таки собираюсь заняться проблемами устойчивости IIR.
Проблема это «скользкая», если не сказать больше… Так что в будущем — «Цифровые рекурсивные фильтры. Устойчивость. Часть 1.» А если тема заинтересует — студенты сами её «разберут» и в pdf в word…
0
С we неплохо сохраняется.
Кстати, Lifelover в свое время писал интересный скриптик, который вытягивает исходник статьи и картинки.
0
Ну картинки у меня лежат «под попкой», текст в голове… Чо ещё человеку надо для спокойной старости? :-)
0
Указанной Вами литературы, в первой статье, достаточно чтобы разобраться в основах, в «предистории» создания H(S), к примеру?
Хотя я вот всё больше с карандашом и бумажкой… На матрицы у меня 2 тетради общих формата А4 ушло
А так, возможно, лучше память и внимание тренируется.
В мои студенческие годы (90-е) для решения матриц, дифуравнений, двойных и тройных интегралов много тетрадей было исписано решениями. Только высшая математика, а главного, прикладного уровня для матричных преобразований не было.

Статьи Ваши полезные. К ним всегда можно будет вернуться завтра или через год, по мере «созревания» ;)
0
По созданию H(S) мне этот сайт больше всего нравится. Хотя мне статьи сложноватыми сначала показались. Не с первого раза конечно, но разобрался. Чуть более сложно — переход от H(S) к H(z) В статье приведён алгоритм численного расчёта дробно-рациональной подстановки. Мне показалось, что этот алгоритм в микроконтроллер будет трудно «засунуть», а коэффициенты фильтра хотелось именно в микроконтроллере рассчитывать.
Пришлось пойти по более простому пути — вывод формулы коэффициентов в аналитическом виде.
В формулу H(S) тупо подставлялось S=(1-z^{-1})/(1+z^{-1}) и получалась формула для H(z).
Где-то до 3 порядка я шёл таким способом, пока не «изобрёл» матрицы z- преобразования.
Простота перехода от H(S) к H(z) с использованием соответствующей матрицы меня просто поразила! Я до сих пор не могу поверить, что этим способом раньше никто не пользовался, поэтому слово «изобрёл» взял в кавычки :-)… Хотя нигде пока матричного способа не встречал в литературе. Я вообще часто «изобретаю велосипеды»… Мне даже кажется, что на «Мировом конкурсе изобретателей велосипедов» я бы занял второе место! :-)
Матрицы для преобразования ФНЧ и ФВЧ очень простые и красивые получились, но когда я захотел по аналогии сделать преобразование в полосовой фильтр — меня ждал «большой облом».
Я довольно быстро научился строить полосовой фильтр с частотой =FN/2 (FN- частота Найквиста), что, как оказалось, соответствует преобразованию S=(1+z^{-2})/(1-z^{-2}), а дальше дело «застопорилось». Всё-таки где-то через месяц я вывел формулу для полосового фильтра с произвольной центральной частотой S=(1+K(Fo,Fs)z^{-1}+z^{-2})/(1-z^{-2}).
Ровно через 3 дня я нашёл эту формулу практически того же вида в книге Р.Богнер, А.Костантинидис «Введение в цифровую фильтрацию». :-)
0
Мне даже кажется, что на «Мировом конкурсе изобретателей велосипедов» я бы занял второе место! :-)
А первое кто бы занял?
0
Vga, ты что не слышал этот анекдот???
0
Видимо нет.
0
Жена — мужу :«Ты — м$дак! И на Всемирном Конкурсе М$даков ты бы занял второе место!» Муж -:" А почему второе?" Жена: «Да потому что ты -м$дак!
+1
В слове «мудак» нет символа "$".
0
Это напомнило мне вполне реальную историю, которую я буду условно называть «Как Хохол учил Якута русскому языку»…
Приехал к нам в экспедицию «Б» из московской фирмы «Р» инженер в командировку. Родом из Украины. Недавно окончил что-то там в Днепропетровске. Устроился в Москве. В общем — довольный жизнью молодой специалист. Разговаривали мы по поводу перспектив развития аппаратуры его фирмы, и я между делом обмолвился, что в микроконтроллере ХХХ стоит «довольно хуёвый АЦП»… Он возразил: «Хуёвое!». Видя моё замешательство он пояснил: «Говорить надо — АЦП — хуёвОЕ!».
Надо было видеть моё состояние — я буквально был «пад сталом»!
...«Аналогово — цифровой преобразователь — хуёвОЕ???»
После небольшой паузы он ответил вопросом на вопрос: «А почему я так всегда говорю?!»…
0
Ну, для разговорного языка типично сглаживание неровностей. Кофе — оно, ацэпэ — тоже оно.
0
Да и сглаживайте на здоровье!
Я вот тоже считаю, что и в слове «м$удак» — м$даки могут использовать любые символы! :-)
+1
Указанной Вами литературы, в первой статье, достаточно чтобы разобраться в основах…

Статьи Ваши полезные. К ним всегда можно будет вернуться завтра или через год

Да-а-а, автор в самом деле — ГОЛОВА-А-А!!!
-1
Отзыв с Украинского сайта:
«По-перше, перш ніж здійснювати елементарні математичні операції потрібно як мінімум знати математику загальноосвітньої школи. Якщо ж цих знань немає — знайдіть собі відповідне заняття (шашки, доміно, гра в карти…)».
Даже переводить не буду — так всё понятно :-)
0
На форуме в разделе «Алгоритмы» в теме «Цифровые рекурсивные фильтры» началось обсуждение проблемы устойчивости БИХ- фильтров. Приглашаю поучаствовать!
0
Вот из-за этой темы тут и нету полезных комментариев! :)
+1
Мне просто удобней в форуме отвечать, сразу на все 3 статьи :-)
-1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.