Цифровой фильтр
Цифровой фильтр
Создание блока для сглаживания входных данных из АЦП.
http://we.easyelectronics.ru/Theory....tr.html
http://we.easyelectronics.ru/Theory....tr.html
Последний раз редактировалось CraCk 25 янв 2016, 02:42, всего редактировалось 1 раз.
- Grafsaxar
- Лейтенант
- Сообщения: 377
- Зарегистрирован: 06 сен 2015, 16:04
- Откуда: Маркс-Энгелс
- Имя: Alexander
Цифровой фильтр
Вот попробуй этот.
Добавь в блок пользователя.
А лучше на входе АЦП добавить конденсотор 100мкф и 0,1 нано
Добавь в блок пользователя.
А лучше на входе АЦП добавить конденсотор 100мкф и 0,1 нано
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Качество — это делать что-либо правильно, даже когда никто не смотрит
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Цифровой фильтр
Вот работающая реализация RC-фильтра без флоат
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Boroda 01 май 2016, 12:23, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Цифровой фильтр
Немного доработал фильтр. Инт и флоат.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Лучше применить и реализовать метод скользящего окна для аналогового сигнала(фильтрация) ,есть готовые макросы ...
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Фильтр можно сделать на базе блока FSEL -аналогичен блоку SEL ,но для флоат переменных
организовав стекУ вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Цифровой фильтр
Ну можно и скользящее окно точек на 8-16. А лучше медианный, но он больно сложный в реализации. Много переменных уйдет и сортировку пузырьком надо делать. Зато всплески хоть +1000 фильтрует на ура.
Последний раз редактировалось Boroda 08 май 2016, 14:43, всего редактировалось 1 раз.
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Цифровой фильтр
Скользящее окно на 8 точек с периодом измерения
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
![Изображение](http://s38.ucoz.net/sm/1/biggrin.gif)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Rovki 08 май 2016, 15:19, всего редактировалось 1 раз.
Электронщик до мозга костей и не только
Цифровой фильтр
[ref]Dackota[/ref], конечно можно. это же вычисления.
некоторые из фильтров в постах выше во вложениях.
или вот тут http://elref.ru/load/bloki_polzovatelej ... /2-1-0-109
некоторые из фильтров в постах выше во вложениях.
или вот тут http://elref.ru/load/bloki_polzovatelej ... /2-1-0-109
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Фильтр хорошо сглаживает, но при этом долго выходит на уставку (входное значение) . Хорошо бы сделать его адаптивным - сразу установить значение на выходе ,которое на входе ,а затем ""плясать" во круг него ...Что важно при включении...А то он от нуля интегрирует...
Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2392
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Контактная информация:
Цифровой фильтр
Вы не совсем разобрались с фильтрами.Rovki писал(а): ↑15 авг 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 последовательных значений.
И так далее.
Хочешь что бы фильтр быстрей выходил на уставку, либо уменьши количество последовательных значений, либо увеличь количество опросов в единицу времени (сделай тактирование чаще).
От обоих параметров зависит и качество фильтрации. Все зависит от того какой поступает сигнал. Поэтому лучше настраивать фильтры по осцилографу, но для этого кроме АЦП нужен еще и ЦАП.
Работу медианного фильтра надо описывать?
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Мой E-mail: dryundel@flprog.pro
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Все понятно , меня не устраивает среднее значение ,при работе когда при 5в на входе значения прыгают на 0.3 в. При длинном стеке точность повышается ,но увеличивается время измерения . Поэтому и высказал - идею- при включении на вход сразу выдавать измеренное значение (первое) ,а потом уже усредненное через N шагов...не важно каким методом вычисленное и за какое время . А то включил и ждешь минуту пока значение меняются от 0 до U... ![в поиске :smile427:](./images/smilies/smile427.gif)
Отправлено спустя 25 минут 45 секунд:
Можно и по другому- включил питание, длина стека пусть 100. Вначале там нули, если на входе 10в, то на выходе среднее -0.1в, потом 0.2 .....и так 100сек ,если тик1сек. А нужно сделать так сначала среднее из 2, потом из 3 ...из 100 на выходе. Тоесть стек с переменной длиной , при старте .А по мере заполнения стека меняется и количество значений и количество на которое нужно делить сумму. Потом, когда заполнится полностью стек работать по обычному алгоритму- сдвинул, просуммировал, поделил...
Отправлено спустя 5 минут 47 секунд:
Можно ввести и фильтрацию по высоким частотам (помехи) - если входное значение в данном тике больше\меньше среднего на заданный % , то оставлять старое значение ,если входит в диапазон, то записываем новое значение в стек(аналог интегрального звена) . Я говорю про фильтр не для системы управления ,а для Индикации значения прежде всего..
![в поиске :smile427:](./images/smilies/smile427.gif)
Отправлено спустя 25 минут 45 секунд:
Можно и по другому- включил питание, длина стека пусть 100. Вначале там нули, если на входе 10в, то на выходе среднее -0.1в, потом 0.2 .....и так 100сек ,если тик1сек. А нужно сделать так сначала среднее из 2, потом из 3 ...из 100 на выходе. Тоесть стек с переменной длиной , при старте .А по мере заполнения стека меняется и количество значений и количество на которое нужно делить сумму. Потом, когда заполнится полностью стек работать по обычному алгоритму- сдвинул, просуммировал, поделил...
Отправлено спустя 5 минут 47 секунд:
Можно ввести и фильтрацию по высоким частотам (помехи) - если входное значение в данном тике больше\меньше среднего на заданный % , то оставлять старое значение ,если входит в диапазон, то записываем новое значение в стек(аналог интегрального звена) . Я говорю про фильтр не для системы управления ,а для Индикации значения прежде всего..
Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2392
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Контактная информация:
Цифровой фильтр
[ref=#ff8000]Rovki[/ref], Вы теоретик пытающийся изобрести велосипед, вместо того, чтобы разобраться с работой фильтров, учесть все факторы влияющие на правильную фильтрацию и применить именно те фильтры и с такими настройками, которые будут удовлетворять потребности.
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Мой E-mail: dryundel@flprog.pro
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Я как раз практик и все фильтры меня не устраивают в момент включения (неделю гоняю разные) , вникните в суть вопроса! Если быстрая фильтрация ,цифры бегают(в условиях помех ), Если медленная фильтрация , то долго ждать на выход значения ...
Да , я любитель собственных велосипедов! И алгоритм красивый (адаптивный) предложил. Дело за малым- реализация
На тех кого не устраивает сегодняшнее решение (придуманное ранее кем то) и держится развитие (прогресс) .
![ну извини... :smile44:](./images/smilies/smile44.gif)
Да , я любитель собственных велосипедов! И алгоритм красивый (адаптивный) предложил. Дело за малым- реализация
На тех кого не устраивает сегодняшнее решение (придуманное ранее кем то) и держится развитие (прогресс) .
![чешу репу :smile37:](./images/smilies/smile37.gif)
![ну извини... :smile44:](./images/smilies/smile44.gif)
Электронщик до мозга костей и не только
- Dryundel
- Полковник
- Сообщения: 2392
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Контактная информация:
Цифровой фильтр
Вникните в суть работы и ответа выше. Поиграйтесь хотя бы с тактированием. Хотя бы интуитивно без прагматичного расчета.
Сложно назвать предложенный Вами "красивый" алгоритм прогрессом. Это скорее утопия или антиутопия, кому как больше нравится.
.
Ох, чувствую придется писать большой гайд по цифровой фильтрации. Иначе все блоки фильтров просто бесполезны.
![ну извини... :smile44:](./images/smilies/smile44.gif)
Отправлено спустя 7 минут :
Ну хорошо. Предположим вашу идею воплотили.
А теперь представим, что в момент включения мы неизбежно попадаем на помеховый пик вольт так в 30, при измеряемом среднем 10. Мы же как никак выключателем щелкнули, а в этом случае и возникают паразитные пики.
Ну и далее начинается то же самое медленное шагание к среднему значению, но не снизу, а сверху. В чем фишка, брат?
![Улыбка! :)](./images/smilies/ha_smile.gif)
Отправлено спустя 15 минут 37 секунд:
Следующая супер-идея.
Вы хотя бы отдаленно представляете как сделать подобный алгоритм?Rovki писал(а): ↑18 авг 2022, 08:22 Можно и по другому- включил питание, длина стека пусть 100. Вначале там нули, если на входе 10в, то на выходе среднее -0.1в, потом 0.2 .....и так 100сек ,если тик1сек. А нужно сделать так сначала среднее из 2, потом из 3 ...из 100 на выходе. Тоесть стек с переменной длиной , при старте .А по мере заполнения стека меняется и количество значений и количество на которое нужно делить сумму.
Конечно же ничего невозможного нет. Но изваяв такую штуку, мы наглухо убиваем скорость работы фильтров.
К примеру медианный фильтр из 3. Отрабатывает за 3-4 такта процессора а это при 16МГц AVR примерно 2-3 микросекунды
Экспоненциальный тоже быстрый и выполняется порядка 10 мкс на целочисленных значениях.
И что? Вы предлагаете убить всю эту прелесть на корню?
Отправлено спустя 5 минут 50 секунд:
Идеи из Вас прямо таки фонтанируют. И чего это какой нибудь Кальман такой тупой?
![Очень доволен :D](./images/smilies/ucoz_biggrin.gif)
Может высокочастотную составляющую RC фильтриком срезать? Может это будет гораздо эффективнее?
Выразить благодарность
Мой E-mail: dryundel@flprog.pro
Мой E-mail: dryundel@flprog.pro
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Да я писал- играюсь уже неделю с тактированием и прочем .
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 , что не эффективно и действительно много рисовать, в коде (которым слабо владею) это гораздо проще . Это метод скользящего окна с изменяемой шириной окна с момента запуска и до заполнения стека(массива)..
Я ж писал- фильтр мне нужен для ИНДИКАТРА ,поэтому говорить о микросекундах это не в тему.
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 , что не эффективно и действительно много рисовать, в коде (которым слабо владею) это гораздо проще . Это метод скользящего окна с изменяемой шириной окна с момента запуска и до заполнения стека(массива)..
Я ж писал- фильтр мне нужен для ИНДИКАТРА ,поэтому говорить о микросекундах это не в тему.
Электронщик до мозга костей и не только
Цифровой фильтр
[ref=#ff8000]Rovki[/ref], свой оконный я делал с маштабированием по мере заполнения масива
с добавлением исключения ложного импульса
к примеру если на адс1115 посадить термисторы то он часто выбрасывал большой импульс в один цыкл и обычные оконные улетали в своё среднее пока этот ложный не вытеснится из среднего
есть тут аномалки но они не работают почемуто
медийные тоже не работают
единственное что работает это от бороды РС фильтр прекрасный блок очень хорошо сглаживает ацп после которого ставится опрос датчика и далее оконный или медийный которые не работают
с добавлением исключения ложного импульса
к примеру если на адс1115 посадить термисторы то он часто выбрасывал большой импульс в один цыкл и обычные оконные улетали в своё среднее пока этот ложный не вытеснится из среднего
есть тут аномалки но они не работают почемуто
медийные тоже не работают
единственное что работает это от бороды РС фильтр прекрасный блок очень хорошо сглаживает ацп после которого ставится опрос датчика и далее оконный или медийный которые не работают
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Фильтр rc пробовал, работает хорошо и понятно, на то он и фильтр, не устраивает только одно - долгий выход на уровень напряжения... Об этом и написал в своём первом посте. К интегрирующему звену хорошо бы добавить дифференцирующее, как в пид регуляторе.
Электронщик до мозга костей и не только
- Rovki
- Полковник
- Сообщения: 4899
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Контактная информация:
Цифровой фильтр
Пришлось самому делать фильтр
Вот переходной процесс стандартного фильтра (скользящее окно) А вот переходник адаптивного фильтра (без переходного процесса при включении, заполнения стека), с изменяемым коэффициентом (делителем). Отправлено спустя 1 минуту 15 секунд:
Параметры фильтров одинаковые , сделаны на базе стека
Отправлено спустя 2 минуты 33 секунды:
схема Отправлено спустя 2 минуты 30 секунд:
После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N
Отправлено спустя 8 минут 34 секунды:
Данный механизм можно применить для любых фильтров, особенно актуально для длинных и медленных .
Вот переходной процесс стандартного фильтра (скользящее окно) А вот переходник адаптивного фильтра (без переходного процесса при включении, заполнения стека), с изменяемым коэффициентом (делителем). Отправлено спустя 1 минуту 15 секунд:
Параметры фильтров одинаковые , сделаны на базе стека
Отправлено спустя 2 минуты 33 секунды:
схема Отправлено спустя 2 минуты 30 секунд:
После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N
Отправлено спустя 8 минут 34 секунды:
Данный механизм можно применить для любых фильтров, особенно актуально для длинных и медленных .
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей