Как сделать фильтр частот на ардуино
Аннотация научной статьи по математике, автор научной работы — Исмаилов Анарбек Оразавич, Нуркин Султанбек Акылбекович
В данной статье описывается способ построения фильтрации данных с датчиков давления . В качестве управляющего элемента был использован инструмент для проектирования электронных устройств Arduino .
Похожие темы научных работ по математике , автор научной работы — Исмаилов Анарбек Оразавич, Нуркин Султанбек Акылбекович
Разработка модели программно-аппаратного комплекса системы мониторинга техногенных объектов на базе Arduino
13. Balanis С.А. Antenna Theory: Analysis and Design. Wiley, 2012.
14. Poon A.S.Y. and Tse D.N.C. Does Super-Directivity Increase the Degrees of Freedom in Wireless Channels. Proc. IEEE Int'l. Symp. Info. Theory. Hong Kong. June 2015.
ЦИФРОВОЙ ФИЛЬТР ДЛЯ РАБОТЫ С ARDUINO
1 2 Исмаилов А.О. , Нуркин С.А.
1Исмаилов Анарбек Оразавич - кандидат технических наук;
2Нуркин Султанбек Акълбекович - магистрант, кафедра мехатроники, Костанайский государственный университет им. А. Байтурсынова, г. Костанай, Республика Казахстан
Аннотация: в данной статье описывается способ построения фильтрации данных с датчиков давления. В качестве управляющего элемента был использован инструмент для проектирования электронных устройств Arduino. Ключевые слова: Arduino, фильтр, цифровой фильтр, датчик, давление.
Фильтрация призвана сделать работу вашего устройства более стабильной, так как она фильтрует фоновые шумы измерений, а также способна отфильтровать ложные показания с датчика [1].
В качестве источника плохого, сильно шумящего сигнала используется датчик атмосферного давления на чипе BMP180.
В данной работе, мы написали скетч в программе Arduino IDE, который получает значения с датчика, записывает их в переменную alt, а затем эту же переменную x выводит в порт, но выводит специальным образом, чтобы мы могли построить по полученным данным график в реальном времени. График мы строим с помощью программы Serial Port Plotter. Для того чтобы пользоваться данной программой нужно соблюдать специальный синтаксис. Синтаксис подробно описан в Help, панель меню.
Далее мы покажем, как фильтровать данные значения. Для фильтрации значений лучше всего использовать фильтр Калмана. В программе Arduino IDE мы написали скетч упрощенного фильтра Калмана. В данном скетче у нас описаны переменные, обеспечивающие работу фильтра.
Для работы с данным фильтром необходимо вставить переменные в начало скетча, а функцию фильтрации нужно вставить в конец скетча. Среднее отклонение значений мы можем найти при помощи Excel, для этого нужно получить нефильтрованные значения, вывести их в COM port, скопировать и вставить в Excel. Для этого мы должны загрузить в микроконтроллер скетч, но в этот раз удаляем строчки, отвечающие за построение графика в реальном времени (Serial.print("&"); SeriaLprint(";");). Загружаем скетч в микроконтроллер и включаем COM port [2].
Полученные значения копируем и вставляем в блокнот, заменяем точки на запятые с помощью ctrl+f, это нужно потому что Excel не читает точки, а в COM port, дробные числа разделены точкой. После того, как мы заменили все точки на запятые, вставляем значения в Excel в столб А1. В отдельной ячейке записываем формулу среднего отклонения =СТАНДОТКЛОН.Г(A:A), среднего значения ^РЗНАЧ^^), максимальное значение =МАКС^^) и минимальное значение =МИН(A:A).
Полученное значение среднего отклонения записываем в функцию float varVolt. Функция float varProcess - скорость реакции на изменение, подбирается вручную в процессе работы фильтра с датчиком. Далее мы должны вывести график фильтрованных значений и график нефильтрованных значений. Конечный скетч выглядит таким образом
float varVolt = 0.25; float varProcess = 0.05; float Pc = 0.0; float G = 0.0; float P = 1.0; float Xp = 0.0; float Zp = 0.0; float Xe = 0.0; int baseline; float alt;
Xe = G*(val-Zp)+Xp; return(Xe);>
Скетч 1. Фильтрация значений датчика атмосферного давления
Загружаем скетч, запускаем Serial Port Plotter, в flot controle ставим 2 графика и нажимаем подключиться. Красным цветом, вы можете видеть, не фильтрованные значения и желтым цветом фильтрованные значения.
При заданных значениях графики не имеют особых различии. Для того чтобы наш отфильтрованный сигнал выглядит более гладким, в написанном скетче мы должны изменить функцию float varProcess - скорость реакции на изменение. Изначально в функции float varProcess мы установили скорость реакции равной 0,05. График покажет, как измениться фильтрованный сигнал, если в функции float varProcess скорость реакции установить 0,005.
Шумы, практически, полностью пропали. Острых пиков мы на результирующем графике не наблюдаем. Мы имеем желтый график, который представляет собой отфильтрованный красный график. На желтом графике отсутствуют резкие пики, и сигнал выглядит сглаженным. В данном методе есть проблема, а именно то, что
реакция на резкое изменение довольно медленная, поэтому если красный график резко подскочит вверх, желтый график за ним подняться не успеет.
Если вы хотите использовать данный фильтр в своем проекте, то необходимо обязательно испытывать датчик в реальных условиях и функцию float varProcess подбирать вручную. В данной работе мы использовали датчик давления BMP 180, для этого датчик подойдет и низкое значение функции float varProcess, так как коэффициент изменяется довольно медленно. Он подойдет для измерения давления в течение всего дня. Но если нам нужно зафиксировать вспышку давления, то заданное нами значение float varProcess слишком мало, то есть скорость измерения реакции должно быть намного выше.
БЕСПИЛОТНЫЕ ЛЕТАТЕЛЬНЫЕ АППАРАТЫ В ОБОРОННОЙ
1 2 Федосеева Н.А. , Загвоздкин М.В.
1Федосеева Наталья Алексеевна - преподаватель иностранного языка;
2Загвоздкин Матвей Викторович - студент, специальность: производство летательных аппаратов, Ульяновский авиационный колледж, Межрегиональный центр компетенций, г. Ульяновск
Аннотация: в статье анализируются преимущества беспилотников, современные тенденции развития беспилотной авиации военного назначения. Вместе с увеличением количества БЛА, применяемых в войсках, расширяется круг решаемых ими задач группы. В настоящее время на фоне этих факторов формируются современные тенденции развития беспилотной авиации военного назначения, что военные ведомства современных развитых государств с каждым годом делают все больший упор на беспилотную авиацию. Но беспилотники не смогут полностью заменить пилотируемую авиацию ни через десять, ни через двадцать лет. Ключевые слова: беспилотный летательный аппарат, дрон, беспилотник, область применения, военные специалисты, группы факторов, тенденции беспилотной авиации.
Главное достоинство БЛА, по мнению экспертов, - отсутствие на борту человека, поэтому, независимо от сложности и опасности выполняемой БЛА задачи, жизни пилота не угрожает опасность. БЛА способен выполнять поставленные задачи в зонах
Фильтрация шума очень важная вещь, при работе с различными датчиками. Сигнал, получаемый от них всегда приходит с шумами, и важно уметь их грамотно отфильтровать. Качественная фильтрация шума способна уменьшить погрешность и увеличить качество измерения датчика. Этим мы сегодня и займемся.
Примерами будут три графика - синусоида, квадратный сигнал (или дискретный, или цифровой) и треугольный сигнал (или пилообразный).
Код для вывода графиков
синусоида, квадратный сигнал и треугольный сигнал
Бороться мы будем с двумя видами шума: постоянный шум (аддитивный белый гауссовский шум или АБГШ) с относительно стабильной амплитудой и случайные импульсы, вызванные внешними факторами. Амплитудой шума - стандартное отклонение зашумленного сигнала от не зашумленного.
Симулировать это мы будем данным образом.
Функция для добавление шума
Среднее арифметическое
Как по мне, самый очевидный способ минимизировать шум. Для его реализации потребуется ввести буфер нескольких предыдущих значений, каждый раз, когда опрашивается датчик буфер сдвигается (первый элемент удаляется, а новое значение датчика добавляется в конец или как-нибудь по другому, главное фиксированный размер буфера). От его размера и будет зависеть результат и быстродействие кода. С фильтрацией алгоритм справляется очень неплохо. Но его проблема заключается в производительности. Контроллеру приходится делать множество вычислений с плавающей точкой, что может сказаться на скорости выполнения кода. Но если датчик не следует очень часто опрашивать, то этот метод отлично подойдет.
Код фильтрация графика средним арифметическим
buffer_size = 7 buffer_size = 25
Как мы видим, при увеличении буфера квадратный и треугольный сигналы сильно исказились, а синусоида сместилась. Проявляется запаздывание среднего значения. Так что, при использовании данного фильтра стоит аккуратнее подбирать размер буфера.
Медианный фильтр
Медианный фильтр предназначен справляться со случайными импульсами. Если среднее арифметическое получая на вход (10, 12, 55), выдаст 25.67, то медиан выдаст 12. На первый взгляд не так просто понять как он устроен, но со своей задачей он справляется отлично. На просторах интернета я нашел лаконичное исполнение. Но оно подойдет только в случаях когда длительность импульса не более одного шага, иначе придется использовать другое исполнение медианы высшего порядка.
Код медианного фильтра
Результат действия медианного фильтра
Медианный фильтр справился почти со всеми импульсами. К тому же этот алгоритм совершенно прост в вычислении. И используя его в комбинации с каким-либо другим другим фильтром можно получить максимальный результат.
Экспоненциальное бегущее среднее и адаптивный коэффициент
Этот фильтр по своей сути схож с первым, а главное он более простой по вычислениям. Работает он так: к предыдущему фильтрованному значению прибавляется новое, и каждое из них помножено на собственный коэффициент, сумма которых равна 1. Коэффициент k подбирается от 0 до 1 и означает важность нового значения по сравнению с предыдущем, то есть чем больше k, тем больше важность нового нефильтрованного значения и фильтрованный график ближе к изначальному.
Адаптивный коэффициент нужен для корректной фильтрации квадратных сигналов. Реализуется он в одну строчку и означает, что если предыдущее фильтрованное значение слишком далеко от нового (то есть корректный сигнал изменился), то k увеличиваем чтобы момент смены сигнала был четко виден, а иначе k оставляем нормальным.
Код фильтра экспоненциального бегущего среднего с адаптивным коэффициент
Работает достаточно хорошо, но из-за адаптивного коэффициента появляются некие артефакты в моментах с импульсами, так как они достаточно велики, чтобы определиться как составляющие квадратного сигнала. С этим можно бороться, увеличивая параметр d (требуемое расстояние для определения квадратного сигнала), но есть решение элегантнее. И тут нам как раз нам потребуется медианный фильтр. Если перед подачей данных на бегущее среднее, прогнать их через медиану, то можно получить качественный и быстродейственный алгоритм для фильтрации сигнала.
с использованием медианного фильтра
Все артефакты исчезли. Данная связка алгоритмов является одной из самых эффективных и быстродейственных. Она может быть применена практически везде.
Применение связки фильтров
Фильтр Калмана
Еще один фильтр, принцип работы которого не столь очевиден для каждого. Из всего кода необходимо знать, что r - это приблизительная амплитуда шума, а q - ковариационное значение процесса, и его следует подбирать самостоятельно. Если вы хотите разобраться в устройстве фильтра Калмана поподробнее, можете прочитать эту статью с википедии, а код я взял и отредактировал с этой страницы.
Код фильтра Калмана
Со своей задачей фильтр справляется, но он не всегда подойдет из-за множества вычислений с плавающей точкой.
Какой фильтр выбрать?
Это зависит от обстоятельств в которых фильтр будет использоваться. Естественно стоит попробовать каждый, но практически для каждого случая подойдёт вариант №2 из списка ниже. Напомню, что наиболее выгодная связка - медианного фильтра с другим. Пройдемся вкратце по перечисленным фильтрам из данной статьи:
Медианный фильтр - самый быстродейственный алгоритм, применятся для отсеивания случайных импульсов, наиболее эффективен в связках с другими алгоритмами.
Экспоненциальное бегущее среднее с адаптивным коэффициент - универсальный, и простой фильтр, подойдет в большинстве ситуаций
Среднее арифметическое - эффективный, но не всегда столь быстродейственный алгоритм
Фильтр Калмана - универсальный способ фильтрации любого сигнала, но громоздкий по вычислениям
Кстати, если вы работаете со средой arduino, то там присутствует удобный инструмент визуализации графиков из значений переданных в порт, статья об этом. Это может упростить работу с сигналами.
В данной статье я не стал затрагивать большую часть терминологии ради доступности. И естественно, фильтры предоставленные в этой статье - это лишь малая часть от всех существующих, и если вы не нашли интересующую информацию по данной теме или предоставленные фильтры не дали достаточный результат, то я рекомендую поподробнее разобраться в теме цифровой фильтрации.
И на последок исходники кодов, и еще несколько примеров.
Код для визуализация графиков
фильтрация сильного шума с помощью kalman(p, r=3, q=0.4), arith_mean(res, buffer_size=5) просто линейный шум, нормализованный средним арифметическим с буфером в 20
Ещё интересный эксперимент: я построчно загрузил зашумленную картинку своего кота и пропустил её через фильтр Калмана.
17.02.2019
Эта конструкция является экспериментальной (макетной) пробой посмотреть в действии возможность построения анализатора амплитудно-частотных характеристик на стандартной китайской плате на базе синтезатора частоты AD9850 и управления ею с помощью Arduino Mega с выводом характеристики на стандартный экран TFT3.2 480х320.
Схемотехника устройства следующая:
Для просмотра в полном размере кликни на изображении.
Arduino Mega в связке с дисплеем TFT 3.2 480x320 служат для управления синтезатором и индикации. Качающаяся частота генерируется платой синтезатора (на схеме обозначен как синтезатор на AD9851). Я экспериментировал с платой на AD9850, но плата на AD9851 полностью совместима по ногам, а программа управления требует изменения только 2-х строк (в программе есть подробные комментарии). На выходе синтезатора стоит аттенюатор с которого сигнал отправляется на измерение.
Макетная плата устройства :
О назначении кнопок:
1 — FAST — при нажатии на кнопку валкодер служит для быстрого изменения начальной частоты сканирования.
2 — SLOW — при нажатии на кнопку валкодер служит для точного изменения начальной частоты сканирования.
3 — DELTA — при нажатии на кнопку валкодер служит для изменения ширины полосы сканирования (от 50 кгц до 50 мгц)
4 — кнопка служит для переключения программных поправочных коэффициентов для одинакового отображения в режимах высокоомного входа / входа 50 Ом. (переключение по отпусканию кнопки)
Без нажатий на кнопки валкодер служит для перемещения метки по характеристике АЧХ (частота метки выводится внизу экрана, так же как величина ширины полосы сканирования и режим входа)
Программу управления можно скачать по ссылке. Для работы дисплея использована библиотека UTFT. В моём архиве её нет, но найти и скачать её не должно составить труда.
Программа управления возможно несовершенна, но полностью работоспособна и снабжена подробными комментариями, что позволяет разобраться в ней и перекроить по своему усмотрению.
Теперь о результатах:
При соединении входа и выхода напрямую и установке полосы сканирования 50 мГц получилась следующая картинка:
Что и ожидалось, так как снижение уровня сигнала на выходе синтезатора AD9850 на частотах выше 25 мГц — известный факт. Возможно надо будет попробовать цепочку с корректирующим конденсатором, для выравнивания характеристики. Впрочем, для настройки контуров и полосовых фильтров и этого будет на первых порах достаточно. Тем более, что при сужении полосы сканирования до единиц мегагерц (а тем более сотен килогерц) неравномерность практически незаметна.
Примеры первых измерений:
Полосовой фильтр 21.4 мГц, полоса 18 кГц режим высокоомного входа
Полосовые фильтры 45 мГц, 2 последовательно, высокоомный вход, установлены на плате преобразователя частоты.
Полосовой фильтр DBP1007B, 5 мГц, высокоомный вход
Керамический фильтр 6.6 мГц (телевизионный от звука)
После этого были ещё тесты с диапазонными входными фильтрами для радиоприёмника в режиме входного сопротивления 50 ом (фотографии я не делал). Они так же подтвердили право на жизнь этой конструкции. Определённая доработка схемотехники и программы нужна, но пользоваться этим анализатором АЧХ без проблем можно и в этом виде.
Для предстоящего проекта потребовалось создать прибор, позволяющий анализировать АЧХ LC контуров, фильтров ФНЧ/ФВЧ/Полосовых, а также генератор сигналов.
Сразу оговорюсь, что схема разработана с нуля и имеет кучу недостатков, которые сразу обнаружат опытные радиолюбители, но для новичков как я — рекомендую к сборке.
Параметры получившегося устройства:
- Генератор частоты от 1мгц до 125мгц
- Измеритель АЧХ от 1мгц до 40мгц
- Шаг перестройки 1гц
- Возможность подключения к компьютеру для построения графиков, так и работа без него.
В качестве деталей для сборки использованы (есть на алиэкспресс):
Схема сборки следующая:
Всё монтируется в подходящий по размеру корпус, я использовал провода МГТФ, но для ВЧ цепей рекомендую коаксиал. Также, рекомендую вынести ВЧ детектор в щуп, а не располагать прямо в корпусе.
Внешний вид устройства в сборе получился следующим:
С помощью энкодера можно выставлять частоту на выходе генератора (нажатие на энкодер переключает разряды).
Первой строкой отображается измеренное ВЧ напряжение.
При подключении к компьютеру доступен более широкий спектр возможностей:
- Проход по заданной частоте с необходимым шагом;
- Измерение полученных данных в Вольтах и в dbV;
- Калибровка измерений для компенсации потерь в генераторе и линиях.
Для калибровки необходимо соединить вход и выход прибора, выбрать необходимый интервал частот и шаг и запустить калибровочный процесс. Полученные данные программа будет использовать как точку отсчёта в дальнейших измерениях.
К примеру подключим прибор к импровизированному LC-контуру.
Результаты будут примерно следующие:
Здесь синим отображены калибровочные измерения. Желтым — измеренные с учётом калибровки.
Как видим на графике отлично заметна резонансная частота контура.
Читайте также: