Цифровой фильтр

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Цифровой фильтр

#1

Сообщение CraCk » 25.01.2016{, 02:11}

Создание блока для сглаживания входных данных из АЦП.
http://we.easyelectronics.ru/Theory....tr.html
Последний раз редактировалось CraCk 25.01.2016{, 02:42}, всего редактировалось 1 раз.

Аватара пользователя
Grafsaxar
Лейтенант
Сообщения: 377
Зарегистрирован: 06.09.2015{, 16:04}
Репутация: 6
Откуда: Маркс-Энгелс
Имя: Alexander

Цифровой фильтр

#2

Сообщение Grafsaxar » 25.01.2016{, 10:44}

Вот попробуй этот.
Добавь в блок пользователя.

А лучше на входе АЦП  добавить конденсотор 100мкф и 0,1 нано
Вложения
8630034.ubi
(77.64 КБ) 116 скачиваний
Качество — это делать что-либо правильно, даже когда никто не смотрит

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Цифровой фильтр

#3

Сообщение Boroda » 01.05.2016{, 12:05}

Вот работающая реализация RC-фильтра без флоат
Вложения
filtr_test_ardu.rar
(12.64 КБ) 123 скачивания
Последний раз редактировалось Boroda 01.05.2016{, 12:23}, всего редактировалось 1 раз.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Цифровой фильтр

#4

Сообщение Boroda » 08.05.2016{, 00:29}

Немного доработал фильтр. Инт и флоат.
Вложения
Test_filtr.rar
(14.32 КБ) 130 скачиваний

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#5

Сообщение Rovki » 08.05.2016{, 00:42}

Лучше применить и реализовать  метод скользящего окна для аналогового сигнала(фильтрация) ,есть готовые макросы ...
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#6

Сообщение Rovki » 08.05.2016{, 11:24}

Фильтр можно сделать на базе блока FSEL -аналогичен блоку SEL ,но для флоат переменных
2261406.jpg
5653011.jpg
организовав стек
Электронщик до мозга костей и не только

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Цифровой фильтр

#7

Сообщение Boroda » 08.05.2016{, 14:42}

Ну можно и скользящее окно точек на 8-16. А лучше медианный, но он больно сложный в реализации. Много переменных уйдет и сортировку пузырьком надо делать. Зато всплески хоть +1000 фильтрует на ура.
Последний раз редактировалось Boroda 08.05.2016{, 14:43}, всего редактировалось 1 раз.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Цифровой фильтр

#8

Сообщение Boroda » 08.05.2016{, 15:07}

Скользящее окно на 8 точек с периодом измерения
Вложения
7122885.rar
(20.32 КБ) 129 скачиваний

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#9

Сообщение Rovki » 08.05.2016{, 15:19}

4707788.jpg
А у меня он так выглядит Изображение
Последний раз редактировалось Rovki 08.05.2016{, 15:19}, всего редактировалось 1 раз.
Электронщик до мозга костей и не только

Dackota
Рядовой
Сообщения: 2
Зарегистрирован: 22.01.2018{, 23:22}
Репутация: 0
Имя: Саша

Цифровой фильтр

#10

Сообщение Dackota » 22.01.2018{, 23:26}

Здравствуйте!
Подскажите, пожалуйста, есть ли в flprog фильтры Баттерворта, Чебышева...? Или любые фильтры нужно создавать самостоятельно?

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Цифровой фильтр

#11

Сообщение pan » 23.01.2018{, 08:19}

Dackota, конечно можно. это же вычисления.
некоторые из фильтров в постах выше во вложениях.
или вот тут http://elref.ru/load/bloki_polzovatelej ... /2-1-0-109

Dackota
Рядовой
Сообщения: 2
Зарегистрирован: 22.01.2018{, 23:22}
Репутация: 0
Имя: Саша

Цифровой фильтр

#12

Сообщение Dackota » 23.01.2018{, 18:54}

Вы не знаете, нету ли фильтра Чебышева 2-го порядка?
В этих сообщениях нету.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#13

Сообщение Rovki » 15.08.2022{, 16:43}

Фильтр хорошо сглаживает, но при этом долго выходит на уставку (входное значение) . Хорошо бы сделать его адаптивным - сразу установить значение на выходе ,которое на входе ,а затем ""плясать" во круг него ...Что важно при включении...А то он от нуля интегрирует...
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Цифровой фильтр

#14

Сообщение Dryundel » 17.08.2022{, 13:41}

Rovki писал(а):
15.08.2022{, 16:43}
Фильтр хорошо сглаживает, но при этом долго выходит на уставку (входное значение) . Хорошо бы сделать его адаптивным - сразу установить значение на выходе ,которое на входе ,а затем ""плясать" во круг него ...Что важно при включении...А то он от нуля интегрирует...
Вы не совсем разобрались с фильтрами.
Вероятно речь идет об экспоненциальном фильтре.
Итак, в двух словах как он работает.
Экспоненциальный фильтр это аналог бегущего среднего, только быстрый по вычислению (не по скорости работы).
Бегущее среднее это сумма последовательных измерений деленная на количество этих измерений.
Чем больше количество этих измерений, тем медленнее происходит приближение к последнему измерению.
К примеру
берем 100 последовательных значений. Из них 99 значений =50 и одно последнее =80
(99*50 + 80) / 100 = 50,3, а в случае с int дробная часть отбросится значение долго будет подходить к 80.
Скорость этого подхода зависит от дискретности измерений. Если измерения (тактирование) происходит раз в секунду, то потребуется 100 секунд для выхода на 80.
Изменив тактирование на 10раз в секунду, мы получим выход на 80 за 10секунд.
Надеюсь понятно.

Теперь что касается настроек экспоненциального фильтра (который я для Вас делал).
Там есть 5 уровней фильтрации.
5 это двойка в степени 5, т.е. 32 последовательных значения (условно)
4 >> 16 последовательных значений.
И так далее.

Хочешь что бы фильтр быстрей выходил на уставку, либо уменьши количество последовательных значений, либо увеличь количество опросов в единицу времени (сделай тактирование чаще).

От обоих параметров зависит и качество фильтрации. Все зависит от того какой поступает сигнал. Поэтому лучше настраивать фильтры по осцилографу, но для этого кроме АЦП нужен еще и ЦАП.

Работу медианного фильтра надо описывать?

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#15

Сообщение Rovki » 18.08.2022{, 07:50}

Все понятно , меня не устраивает среднее значение ,при работе когда при 5в на входе значения прыгают на 0.3 в. При длинном стеке точность повышается ,но увеличивается время измерения . Поэтому и высказал - идею- при включении на вход сразу выдавать измеренное значение (первое) ,а потом уже усредненное через N шагов...не важно каким методом вычисленное и за какое время . А то включил и ждешь минуту пока значение меняются от 0 до U... :smile427:

Отправлено спустя 25 минут 45 секунд:
Можно и по другому- включил питание, длина стека пусть 100. Вначале там нули, если на входе 10в, то на выходе среднее -0.1в, потом 0.2 .....и так 100сек ,если тик1сек. А нужно сделать так сначала среднее из 2, потом из 3 ...из 100 на выходе. Тоесть стек с переменной длиной , при старте .А по мере заполнения стека меняется и количество значений и количество на которое нужно делить сумму. Потом, когда заполнится полностью стек работать по обычному алгоритму- сдвинул, просуммировал, поделил...

Отправлено спустя 5 минут 47 секунд:
Можно ввести и фильтрацию по высоким частотам (помехи) - если входное значение в данном тике больше\меньше среднего на заданный % , то оставлять старое значение ,если входит в диапазон, то записываем новое значение в стек(аналог интегрального звена) . Я говорю про фильтр не для системы управления ,а для Индикации значения прежде всего..
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Цифровой фильтр

#16

Сообщение Dryundel » 18.08.2022{, 10:49}

Rovki, Вы теоретик пытающийся изобрести велосипед, вместо того, чтобы разобраться с работой фильтров, учесть все факторы влияющие на правильную фильтрацию и применить именно те фильтры и с такими настройками, которые будут удовлетворять потребности.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#17

Сообщение Rovki » 18.08.2022{, 15:47}

Я как раз практик и все фильтры меня не устраивают в момент включения (неделю гоняю разные) , вникните в суть вопроса! Если быстрая фильтрация ,цифры бегают(в условиях помех ), Если медленная фильтрация , то долго ждать на выход значения ...
Да , я любитель собственных велосипедов! И алгоритм красивый (адаптивный) предложил. Дело за малым- реализация
На тех кого не устраивает сегодняшнее решение (придуманное ранее кем то) и держится развитие (прогресс) . :smile37: :smile44:
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Цифровой фильтр

#18

Сообщение Dryundel » 18.08.2022{, 16:01}

Rovki писал(а):
18.08.2022{, 15:47}
вникните в суть вопроса!
Вникните в суть работы и ответа выше. Поиграйтесь хотя бы с тактированием. Хотя бы интуитивно без прагматичного расчета.
Rovki писал(а):
18.08.2022{, 15:47}
И алгоритм красивый (адаптивный) предложил. Дело за малым- реализация
На тех кого не устраивает сегодняшнее решение (придуманное ранее кем то) и держится развитие (прогресс) .
Сложно назвать предложенный Вами "красивый" алгоритм прогрессом. Это скорее утопия или антиутопия, кому как больше нравится.
.
Ох, чувствую придется писать большой гайд по цифровой фильтрации. Иначе все блоки фильтров просто бесполезны. :smile44:

Отправлено спустя 7 минут :
Ну хорошо. Предположим вашу идею воплотили.
Rovki писал(а):
18.08.2022{, 08:22}
Поэтому и высказал - идею- при включении на вход сразу выдавать измеренное значение (первое) ,а потом уже усредненное через N шагов...
А теперь представим, что в момент включения мы неизбежно попадаем на помеховый пик вольт так в 30, при измеряемом среднем 10. Мы же как никак выключателем щелкнули, а в этом случае и возникают паразитные пики.
Ну и далее начинается то же самое медленное шагание к среднему значению, но не снизу, а сверху. В чем фишка, брат? :)

Отправлено спустя 15 минут 37 секунд:
Следующая супер-идея.
Rovki писал(а):
18.08.2022{, 08:22}
Можно и по другому- включил питание, длина стека пусть 100. Вначале там нули, если на входе 10в, то на выходе среднее -0.1в, потом 0.2 .....и так 100сек ,если тик1сек. А нужно сделать так сначала среднее из 2, потом из 3 ...из 100 на выходе. Тоесть стек с переменной длиной , при старте .А по мере заполнения стека меняется и количество значений и количество на которое нужно делить сумму.
Вы хотя бы отдаленно представляете как сделать подобный алгоритм?
Конечно же ничего невозможного нет. Но изваяв такую штуку, мы наглухо убиваем скорость работы фильтров.
К примеру медианный фильтр из 3. Отрабатывает за 3-4 такта процессора а это при 16МГц AVR примерно 2-3 микросекунды
Экспоненциальный тоже быстрый и выполняется порядка 10 мкс на целочисленных значениях.
И что? Вы предлагаете убить всю эту прелесть на корню?

Отправлено спустя 5 минут 50 секунд:
Rovki писал(а):
18.08.2022{, 08:22}
Можно ввести и фильтрацию по высоким частотам (помехи) - если входное значение в данном тике больше\меньше среднего на заданный % , то оставлять старое значение ,если входит в диапазон, то записываем новое значение в стек(аналог интегрального звена)
Идеи из Вас прямо таки фонтанируют. И чего это какой нибудь Кальман такой тупой? :D
Может высокочастотную составляющую RC фильтриком срезать? Может это будет гораздо эффективнее?

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Цифровой фильтр

#19

Сообщение Rovki » 18.08.2022{, 16:49}

Да я писал- играюсь уже неделю с тактированием и прочем .
30+10 ,среднее 20 за такт,30+10+10 , среднее -16, 30+10+10+10 , среднее -15 ....на 10 шаге 12....на 20 шаге 11...Если суммировать с нуля как у всех (количество шагов 100)с помехой 30 на входе - то 1 шаг- 0,3, на 10 шаге 1.2 итд ...
Андрей , вы меня совсем идиотом считаете - если я предлагаю алгоритм ,то естественно представляю как его реализовать ,но только на FBD , что не эффективно и действительно много рисовать, в коде (которым слабо владею) это гораздо проще . Это метод скользящего окна с изменяемой шириной окна с момента запуска и до заполнения стека(массива)..
Я ж писал- фильтр мне нужен для ИНДИКАТРА ,поэтому говорить о микросекундах это не в тему.
Электронщик до мозга костей и не только

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Цифровой фильтр

#20

Сообщение Di123 » 19.08.2022{, 09:30}

Rovki, свой оконный я делал с маштабированием по мере заполнения масива
с добавлением исключения ложного импульса
к примеру если на адс1115 посадить термисторы то он часто выбрасывал большой импульс в один цыкл и обычные оконные улетали в своё среднее пока этот ложный не вытеснится из среднего
есть тут аномалки но они не работают почемуто
медийные тоже не работают
единственное что работает это от бороды РС фильтр прекрасный блок очень хорошо сглаживает ацп после которого ставится опрос датчика и далее оконный или медийный которые не работают

Ответить

Вернуться в «Новые»