Аватар для A_Santik
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
1

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

04.05.2015, 13:40. Показов 6872. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Использование 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
04.05.2015, 13:40
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2015, 13:40
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 17 минут
А где Вы там увидели "мощную математику Фортрана"???
В приведенной программе практически только алгебраические формулы, которые "без напряга" переведутся на любой язык. Там даже циклов нет!!!
На microC Вам программу перевести, чтобы было понятней?
Да, меня удивляет "критика" от человека, который "не совсем в теме" вопроса. Призывы к "толерантности" явно излишни.
0
 Аватар для raxper
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 7
04.05.2015, 18:19 6
...ну да, ну да, а тангенсы, косинусы и корни квадратные святым духом конечно же вычисляются. Меня удивляет неадекватность топик-стартера, который завяз в математических пакетах и не видит дальше теории.
0
 Аватар для A_Santik
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 рода:
Левая картинка - входной сигнал (белый шум)
Миниатюры
Реализация полосового фильтра Баттерворта 3 порядка  
0
 Аватар для raxper
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 7
19.05.2015, 14:22 8
Кнопками рулить много ума не надо. Возвращаемся к посту #2, т.е. реализации на практике следящего фильтра на простеньком МК без поддержки матпакетов
0
 Аватар для A_Santik
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
19.05.2015, 15:04  [ТС] 9
Цитата Сообщение от raxp Посмотреть сообщение
...на простеньком МК без поддержки матпакетов
Я не очень понял, а что под "матпакетами" подразумевается?
Вычисление cos(x) ?
0
 Аватар для raxper
10234 / 6612 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 7
19.05.2015, 15:40 10
Такое впечатление, что автор темы читает между строк.
0
 Аватар для A_Santik
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
 Аватар для A_Santik
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
04.06.2015, 11:51  [ТС] 12
Статья о простой методике расчёта КИХ фильтров
https://www.cyberforum.ru/post7988076.html
0
Айлурофил
 Аватар для Massaraksh7
478 / 411 / 110
Регистрация: 27.05.2017
Сообщений: 2,410
Записей в блоге: 3
17.12.2022, 12:40 13
Уважаемый A_Santik, попробовал реализовать в Excel ПФ 3 порядка, реализованный вами в этой статье, может, я не понимаю, как работают фильтры, но результат получился не тот, на который я рассчитывал.
На входе фильтра синусоидальный сигнал определенной частоты.
На выходе после фильтрации я ожидал такой же синусоидальный сигнал, но действительность оказалась другой.
Почему?
Миниатюры
Реализация полосового фильтра Баттерворта 3 порядка  
Вложения
Тип файла: xlsx Цифровой фильтр 3 тест.xlsx (162.1 Кб, 7 просмотров)
0
17.12.2022, 12:40
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2022, 12:40
Помогаю со студенческими работами здесь

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

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

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

Расчет полосового фильтра на базе ОУ
Найти: – величины элементов схемы для получения заданного коэффициента усиления K0, – нижнюю граничную частоту fн, – верхнюю...

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Пользуясь нейросетью возвращаюсь к вопросу альтернативных приводов поступательного движения.
Hrethgir 14.02.2025
Описание тут https:/ / habr. com/ ru/ articles/ 778118/ . Вопрос ответ You Привет. Скажи, есть-ли вещества, которые могут менять жидкое состояние на желеобразное под воздействием ультразвука? . . .
Ошибка "Another git process seems to be running in this repository"
hw_wired 14.02.2025
При работе с git можно столкнуться с довольно раздражающей ошибкой "Another git process seems to be running in this repository". Эта ситуация возникает, когда система контроля версий пытается. . .
Ошибка "java.lang.NoCl­assDefFou­ndErro­r: javax/xml/bind/JAXBException"
hw_wired 14.02.2025
Как разработчики Java-приложений, мы сталкиваемся с разными ошибками, но одна из них - java. lang. NoClassDefFoundError: javax/ xml/ bind/ JAXBException - стала особенно актуальной после выхода Java 9. . . .
Отличия for-in от for-of в JavaScript
hw_wired 14.02.2025
Когда-то единственным способом перебора элементов массива или свойств объекта был классический цикл for с счетчиком. Да, он отлично справлялся с задачей, но код получался громоздким и не очень. . .
Отличия implementation, api и compile в Gradle
hw_wired 14.02.2025
Управление зависимостями - одна из ключевых задач при разработке современных приложений на Java и Kotlin. Система сборки Gradle предоставляет гибкие и мощные средства для работы с зависимостями,. . .
Что лучше: require или import/export в JavaScript
hw_wired 14.02.2025
Модульность в JavaScript прошла долгий путь эволюции, и сегодня у разработчиков есть два основных способа организации модулей: старый добрый require из системы CommonJS и современные import/ export из. . .
Ошибка "Uncaught SyntaxError: Cannot use import statement outside a module"
hw_wired 14.02.2025
Думаю, многие разработчики сталкивались с ошибкой "Uncaught SyntaxError: Cannot use import statement outside a module" при попытке использовать современный синтаксис импорта в JavaScript. Эта. . .
Ошибка Docker "Got permission denied while trying to connect to the Docker daemon socket at"
hw_wired 14.02.2025
Разработка с использованием Docker может иногда преподносить неожиданные сюрпризы, и одним из самых распространенных камней преткновения становится ошибка с отказом в доступе к демону Docker. . . .
Ошибка "No 'Access-Control-Allow-Origin' header is present on the requested resource"
hw_wired 14.02.2025
При разработке современных веб-приложений нередко сталкиваешься с ошибкой "No 'Access-Control-Allow-Origin' header is present on the requested resource". Эта проблема возникает из-за политики. . .
Как закрыть порт в Linux
hw_wired 14.02.2025
Управление сетевыми портами в Linux - непростая, но важная задача для обеспечения безопасности системы. Каждый открытый порт - это потенциальная уязвимость, через которую злоумышленики могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru