Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
1

Реализация полосового фильтра Баттерворта 3 порядка

04.05.2015, 13:40. Просмотров 4560. Ответов 11
Метки нет (Все метки)

Использование z-преобразования Ннч(S)--> Hпф(z) с получением соответствующей матрицы, позволяет значительно упростить алгоритм вычисления коэффициентов полосового фильтра.
Для примера привожу программу вычисления коэффициентов полосового фильтра Баттерворта 3 порядка:
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Subroutine BP_Butterworth_3(F0,Fs,Rp,A,B)
!F0- относительная центральная частота, Fs-относительная частота среза,Rp - неравномерность АЧХ (дБ)
!A,B - выходные массивы коэффициентов
 
real*8 F0,FN,Fs,Fd,Rp,Pi,Psi,Psi2,Omega_p,Ep,Alpha,Beta
real*8 b1,b2,b3,a0
real*8, dimension (7) :: A,B
 
Pi=3.141592653589793115997963469D+00
Omega_p=DTAN(Fs*0.5*Pi)
Ep=DSQRT(10.**(Rp*0.1)-1.)
Alpha=1.0/Ep**(1./3)
Beta=Alpha*Omega_p
FN=Fd*0.5
Psi=-2.*DCOS(F0*Pi)/DCOS(Fs*0.5*Pi)
b1=2.*Beta
b3=Beta*Beta
b2=2.*b3
b3=beta*b3
a0=1.0D00/(1.+b1+b2+b3)
A(1)=1.
A(2)=Psi*(3.+2.*b1+b2)*a0
Psi2=Psi*Psi
A(3)=a0*((Psi2+1.)*(3.+b1)-b2-3.*b3)
A(4)=a0*Psi*(Psi2+6.-2*b2)
A(5)=a0*((Psi2+1.)*(3.-b1)-b2+3.*b3)
A(6)=a0*Psi*(3.-2.*b1+b2)
A(7)=a0*(1.-b1+b2-b3)
B(1)=b3*a0
B(2)=0.
B(3)=-3.*B(1)
B(4)=0.
B(5)=-B(3)
B(6)=0.
B(7)=-B(1)
return 
end
Матрица соответствуещего z-преобразования приведена вРеализация ФНЧ
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 13:40
Ответы с готовыми решениями:

Расчет порядка нормированного прототипа ФНЧ при расчете полосового фильтра
Добрый день! После длительного перерыва опять занялся разработкой приложения на С++ для...

Алгоритм полосового фильтра Блэкмана
Добрый день! Основываясь на http://habrahabr.ru/post/128140/ и книге Эммануил Айфичер "Цифровая...

fdatool. Расчет полосового фильтра
нужно рассчитать полосовой фильтр. какая формула у полосового фильстра? y=f(x)

Расчет фильтра Баттерворта
Привет всем! Сколько не искал,не могу найти верный алгоритм расчета фильтра Баттерворта 4 порядка....

11
10212 / 6593 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
04.05.2015, 15:28 2
...значительное упрощение предполагает избавление от готового фарша в виде вычисления корней квадратных и косинусов. Например, через таблицы или подбором через умножение для целочисленной арифметики.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.05.2015, 16:46  [ТС] 3
Такое мнение может принадлежать человеку, который в своей жизни ни одного коэффициента полосового фильтра не вычислял.
Согласен - проще брать готовые коэффициенты.
Но как тогда построить элементарный "следящий" фильтр?
0
Миниатюры
Реализация полосового фильтра Баттерворта 3 порядка  
10212 / 6593 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
04.05.2015, 17:14 4
A_Santik, не делайте далеко идущих выводов и не расписывайтесь за других. Вы пользуетесь математикой Фортрана, это мощный инструмент, спору нет как и в случае с Матлабом. Но для ЦОС актуальна реализация в железе, а это ПЛИС и МК. Нет там никаких Фортранов. Сразу видно в железе никогда не реализовывали ни одного фильтра.

p.s.: и мое имхо, будьте толератнее и воспринимайте критику адекватно.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.05.2015, 17:37  [ТС] 5
Классический алгоритм расчёта коэффициентов ФНЧ Баттерврота описан в Реализация ФНЧ Баттерворта
Но лично я эту программу не стал бы и пытаться в микроконтроллер "запихивать"!

Добавлено через 17 минут
А где Вы там увидели "мощную математику Фортрана"???
В приведенной программе практически только алгебраические формулы, которые "без напряга" переведутся на любой язык. Там даже циклов нет!!!
На microC Вам программу перевести, чтобы было понятней?
Да, меня удивляет "критика" от человека, который "не совсем в теме" вопроса. Призывы к "толерантности" явно излишни.
0
10212 / 6593 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
04.05.2015, 18:19 6
...ну да, ну да, а тангенсы, косинусы и корни квадратные святым духом конечно же вычисляются. Меня удивляет неадекватность топик-стартера, который завяз в математических пакетах и не видит дальше теории.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
06.05.2015, 22:45  [ТС] 7
Цитата Сообщение от A_Santik Посмотреть сообщение
Использование z-преобразования Ннч(S)--> Hпф(z) с получением соответствующей матрицы, позволяет значительно упростить алгоритм вычисления коэффициентов полосового фильтра.
Кроме того:
1. Матрица z-преобразования не зависит от типа фильтра!
Можно использовать коэффициенты Hфнч(S) фильтров Чебышева 1 и 2 рода, Кауэра, Бесселя и т.п.
2. Режекторный фильтр можно получить элементарными преобразованиями матрицы полосового фильтра (перестановкой столбцов).


"...уже есть онлайн-генератор готового Си-кода http://www-users.cs.york.ac.uk... /trad.html "

Но: генератор "генерит" рекурентрую формулу фильтра. Т.е. пригоден только для создания одного фильтра. Если понадобится изменить частоту фильтра нужно зайти на сайт , "сгенерить" новый код и "запихнуть" его в микроконтроллер.
Предлагается "генерить" коэффициенты прямо в микроконтроллере! И изменять частоту/полосу фильтра можно будет просто "кнопками" микроконтроллера (практически без ограничений).

Вот пример полосового фильтра Чебышева 2 рода:
Левая картинка - входной сигнал (белый шум)
0
Миниатюры
Реализация полосового фильтра Баттерворта 3 порядка  
10212 / 6593 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
19.05.2015, 14:22 8
Кнопками рулить много ума не надо. Возвращаемся к посту #2, т.е. реализации на практике следящего фильтра на простеньком МК без поддержки матпакетов
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
19.05.2015, 15:04  [ТС] 9
Цитата Сообщение от raxp Посмотреть сообщение
...на простеньком МК без поддержки матпакетов
Я не очень понял, а что под "матпакетами" подразумевается?
Вычисление cos(x) ?
0
10212 / 6593 / 495
Регистрация: 28.12.2010
Сообщений: 21,164
Записей в блоге: 1
19.05.2015, 15:40 10
Такое впечатление, что автор темы читает между строк.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
20.05.2015, 10:20  [ТС] 11
Эксперимент. Вычисление коэффициентов полосового фильтра Баттерворта 3 порядка на ATmega8.
С Фортрана переписал на Си CodeVisionAVR. Особых трудностей не испытал, кроме как многочисленные замены () на [] в массивах. Но это я в "блокноте" заменил Использовал <math.h> В принципе, на этапе инициализации полосы вычисляется tg и cos, и ещё один раз cos при изменении центральной частоты.
Результаты:При частоте 8 МГц:
Инициализация полосы: 2 мс
Изменение центральной частоты: 1мс

Результаты меня не устраивают, поэтому сейчас бегу в ближайший ларёк за STM32
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.06.2015, 11:51  [ТС] 12
Статья о простой методике расчёта КИХ фильтров
https://www.cyberforum.ru/post7988076.html
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 11:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Реализация преобразования Гильберта с использованием КИХ-фильтра первого порядка
У меня такой вопрос, скажите можно ли реализовать преобразование Гильберта с помощью КИХ-фильтра...

Реализация ФНЧ Баттерворта
есть ли у кого уже готовый код расчета фильтра?

Рабочая схема полосового фильтра
Фильтр должен обрезать частоты ниже 20 герц и выше 500 Кгц. Расчеты сделал. Схему в протеусе...

Настройка полосового фильтра
Доброго времени суток. Возникла необходимость поставить полосовой фильтр(пропустить частоту 1100...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.