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

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Аватара пользователя
Rovki
Полковник
Сообщения: 4485
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 236
Откуда: Чехов
Имя: Анатолий
Контактная информация:

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

#21

Сообщение Rovki » 19.08.2022{, 09:58}

Фильтр rc пробовал, работает хорошо и понятно, на то он и фильтр, не устраивает только одно - долгий выход на уровень напряжения... Об этом и написал в своём первом посте. К интегрирующему звену хорошо бы добавить дифференцирующее, как в пид регуляторе.
Электронщик до мозга костей и не только

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

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

#22

Сообщение Rovki » 21.08.2022{, 10:23}

Пришлось самому делать фильтр
Вот переходной процесс стандартного фильтра (скользящее окно)
п1.jpg
А вот переходник адаптивного фильтра (без переходного процесса при включении, заполнения стека), с изменяемым коэффициентом (делителем).
п2.jpg
Отправлено спустя 1 минуту 15 секунд:
Параметры фильтров одинаковые , сделаны на базе стека

Отправлено спустя 2 минуты 33 секунды:
схема
фильтр.jpg
Отправлено спустя 2 минуты 30 секунд:
После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N

Отправлено спустя 8 минут 34 секунды:
Данный механизм можно применить для любых фильтров, особенно актуально для длинных и медленных .
Электронщик до мозга костей и не только

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

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

#23

Сообщение Dryundel » 21.08.2022{, 11:23}

Rovki писал(а):
21.08.2022{, 10:38}
После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N
А что же Вы константу на вход подали? Сделайте реальный тест в котором в первый момент на входе 30, а уже потом около 10 И увидите что получится. Тот же самый медленный подход к значению, только сверху. О чем и говорилось ранее. Именно первый момент важен, там могут быть пиковые токи и напряжения.
А так вы можете изначально заполнить стек десятками и выкинуть этот переменный делитель, установив константу размера массива(стека). Это уж точно будет легче и проще.
И учтите еще один момент. Предположим требуется в процессе работы отключить фильтрацию. Не устройство, а только фильтрацию. Что делать со стеком? Очищать? А что делать со счетчиком? Сбрасывать? А стартовать счетчик в какой момент?
Фильтр должен быть универсальным и достаточно простым в применении, только тогда это будет фильтр, а не частное решение с костылями.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#24

Сообщение Rovki » 21.08.2022{, 11:34}

Фот работа фильтра на случайных числах
фильтр.jpg
, видно что работа начинается не с нуля .!
Длина стека 100, такт 50мс

Отправлено спустя 8 минут 31 секунду:
Dryundel писал(а):
21.08.2022{, 11:23}
Rovki писал(а):
21.08.2022{, 10:38}
После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N
А что же Вы константу на вход подали? Сделайте реальный тест в котором в первый момент на входе 30, а уже потом около 10 И увидите что получится. Тот же самый медленный подход к значению, только сверху. О чем и говорилось ранее. Именно первый момент важен, там могут быть пиковые токи и напряжения.
А так вы можете изначально заполнить стек десятками и выкинуть этот переменный делитель, установив константу размера массива(стека). Это уж точно будет легче и проще.
И учтите еще один момент. Предположим требуется в процессе работы отключить фильтрацию. Не устройство, а только фильтрацию. Что делать со стеком? Очищать? А что делать со счетчиком? Сбрасывать? А стартовать счетчик в какой момент?
Фильтр должен быть универсальным и достаточно простым в применении, только тогда это будет фильтр, а не частное решение с костылями.
Вы прикалываетесь что ли , Какая разница константа или переменная , на графике показан переходной процесс начала работы ... Для глаза нет разницы 1гр или 201 , при старте - одинаково плохо? если реальное значение 100!
Сам фильтр может быть любым (универсальным) . А вот значения на его выходе в момент включения питания лучше иметь реальное , без ожидания минут. Тем более можно сделать две скорости работы фильтра ,при включении и после заполнения стека.
Электронщик до мозга костей и не только

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

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

#25

Сообщение Dryundel » 21.08.2022{, 11:45}

Rovki писал(а):
21.08.2022{, 11:34}
Фот работа фильтра на случайных числах
, видно что работа начинается не с нуля .!
Не понятно что Вы хотите показать и доказать. А где исходный сигнал?
Случайные числа это вообще не сигнал черте что. На него нельзя ориентироваться. Сигнал должен быть сигналом, а помехи и шум на него наложены. Их то и надо фильтровать.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#26

Сообщение Rovki » 21.08.2022{, 11:45}

фильтр.jpg
Отправлено спустя 4 минуты 58 секунд:
Dryundel писал(а):
21.08.2022{, 11:45}
Rovki писал(а):
21.08.2022{, 11:34}
Фот работа фильтра на случайных числах
, видно что работа начинается не с нуля .!
Не понятно что Вы хотите показать и доказать. А где исходный сигнал?
Случайные числа это вообще не сигнал черте что. На него нельзя ориентироваться. Сигнал должен быть сигналом, а помехи и шум на него наложены. Их то и надо фильтровать.
Вы как с луны свалились - для фильтра нет разницы помеха или сигнал ...На скрине видно интегрирующий эффект . Тем более сам фильтр - классика ,что в нем сомневаться ,могу и ваш поставить ..Не фильтр проверяется ,а значения с момента старта до уставки ..
Электронщик до мозга костей и не только

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

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

#27

Сообщение Dryundel » 21.08.2022{, 11:53}

Rovki писал(а):
21.08.2022{, 11:43}
Тем более можно сделать две скорости работы фильтра ,при включении и после заполнения стека.
И тут Остапа понесло. :) :) :)
Вы задались сделать такой фильтр, который не потянет процессор?
Rovki писал(а):
21.08.2022{, 11:43}
Вы прикалываетесь что ли , Какая разница константа или переменная , на графике показан переходной процесс начала работы ...
Ничего я не прикалываюсь. Как Вы понять не можете? Если при старте не константа, а отличное от нормы значение то...
1 тик Q = 30/1 = 30
2 тик Q = (30+10)/2 = 20
3 тик Q = (30+10+10)/3 = 13.3
4 тик Q = (30+10+10+10)/4 = 12.5

И так далее. Теперь понятно?

Отправлено спустя 3 минуты 7 секунд:
Все то же самое что и подход от нуля. То же самое время выхода на нормальные показания. Те же яйца - вид в профиль.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#28

Сообщение Rovki » 21.08.2022{, 12:00}

Сам фильтр как работал ,так и работает в данном случае по методу скользящего окна
Dryundel писал(а):
21.08.2022{, 11:53}
Rovki писал(а):
21.08.2022{, 11:43}
Тем более можно сделать две скорости работы фильтра ,при включении и после заполнения стека.
И тут Остапа понесло. :) :) :)
Вы задались сделать такой фильтр, который не потянет процессор?
Rovki писал(а):
21.08.2022{, 11:43}
Вы прикалываетесь что ли , Какая разница константа или переменная , на графике показан переходной процесс начала работы ...
Ничего я не прикалываюсь. Как Вы понять не можете? Если при старте не константа, а отличное от нормы значение то...
1 тик Q = 30/1 = 30
2 тик Q = (30+10)/2 = 20
3 тик Q = (30+10+10)/3 = 13.3
4 тик Q = (30+10+10+10)/3 = 12.5

И так далее. Теперь понятно?
А чем это хуже 1...2...5...10....22...45...100..100...100???? И это без учета ,как в говорите стартовых помех . Да мне не нужно разжовывать . Просили реализацию - их есть у меня... Причем тут потянет или не потянет процессор ,вы схему то видели,?Все средствами ФЛ , несколькими элементами..

Отправлено спустя 1 минуту 27 секунд:
сумматор.jpg
Электронщик до мозга костей и не только

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

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

#29

Сообщение Dryundel » 21.08.2022{, 12:03}

Слова кончились. :smile44:
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#30

Сообщение Rovki » 21.08.2022{, 12:08}

Если говорить о тактах фильтра 100-500мс ,то помехи микросекундные на фоне полезного низкочастотного сигнала имеют ничтожно малую вероятность проникнуть внутрь фильтра при любой реализации и не важно для него с чего стартовать с нуля или входного значения, а вот для глаза и психике -важно

Отправлено спустя 56 секунд:
Dryundel писал(а):
21.08.2022{, 12:03}
Слова кончились. :smile44:
Спасибо, а схема осталась :D

Отправлено спустя 2 минуты 56 секунд:
Просто сначала была идея играться индексами массива ,а потом пришла простая идея - менять делитель суммы массива в стартовый момент ,до заполнения стека ,вот и все!Поставил сам себе задачу и решил ее красиво:smile9:

Отправлено спустя 5 минут 58 секунд:
Но если строго подходить к фильтру ,то он должен быть полосовым ,отфильтровывать не только ВЧ ,но НЧ помехи, что очень важно ввиду слабых ИП и меняющейся нагрузки Для аналоговых сигналов.

Отправлено спустя 2 часа 10 минут 46 секунд:
Тот же генератор случайных чисел ,но через анализ приращения (+.-) сигнала на входе (более чем на 10% за такт) дает сглаживание на резких скачках ,дополнительно к усреднению .
фильтр.jpg
Отправлено спустя 58 секунд:
верхний график

Отправлено спустя 2 минуты 24 секунды:
сумма.jpg
Электронщик до мозга костей и не только

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

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

#31

Сообщение Dryundel » 21.08.2022{, 18:32}

Rovki писал(а):
21.08.2022{, 14:32}
Но если строго подходить к фильтру ,то он должен быть полосовым ,отфильтровывать не только ВЧ ,но НЧ помехи, что очень важно ввиду слабых ИП и меняющейся нагрузки Для аналоговых сигналов.
Цифровые фильтры не фильтруют частоты, они фильтруют ЦИФРЫ (значения)! На то они и цифровые фильтры.

Хорошо, давайте медленно пережевывать основные принципы.
1. До того как аналоговый сигнал попал на пин АЦП, вы можете фильтровать его физическим способом - RC, LC фильтрами, активными методами...
2. Как только аналоговый сигнал попал на АЦП это уже не аналоговый сигнал. Это поток значений с дискретностью по времени. Те если мы хотим оцифровать высокие частоты нам необходимо иметь частоту дискретизации хотя бы на порядок больше частоты сигнала, максимальной частоты которую мы оцифровываем. Другими словами, чтобы оцифровать сигнал 10кГц, надо иметь частоту оцифровки 100кГц. Такое могут далеко не все контроллеры. К примеру AЦП AVR(16МГЦ) может качественно снимать сигнал 1 раз в 120мкс а это всего 8кГц и при условии что контроллер больше ничем не занят. Т.е. Максимально доступная для оцифровки частота до 1000Гц. С ооочень большой натяжкой.
О каких высоких частотах Вы говорите Rovki? О чем вообще речь?
3. Теперь о шуме сигнала и помеховых пиках.
Пришлось создать блок генератора шумной синусоиды. Что не сделаешь ради Rovki. :)
Шумный сигнал.jpg
Так вот фильтрация шума и фильтрация помех ЦИФРОВОГО сигнала осуществляется разными фильтрами и с разной частотой дискретизации (тактирования).
Начнем с помеховых пиков. Как правило они очень короткие по времени. Их период измеряется десятками-сотнями микросекунд. Чтобы отфильтровать эти неправильные цифровые значения используются медианные фильтры.

Что такое медианный фильтр.
Берутся несколько последовательно пришедших значений и из них выбирается среднее. Не рассчитывается! А ВЫБИРАЕТСЯ.
Пример:
1, 2, 2, 2, 5, 18, 30 - медиана в этом случае будет 2, потому как есть 3 числа больше или равно 2 и 3 числа меньше или равно 2.

Т.к. период пиков очень короткий, то и снимать показания надо часто, с дискретностью равной примерно максимально возможному периоду этих помех. В противном случае медианный фильтр будет фильтровать лишнее и искажать сигнал.
Т.к. снимать и фильтровать надо часто, значит делать надо это очень быстро. Медианные фильтры именно под это и заточены. Один из фильтров которые я Вам давал выбирает медиану из трех значений и выполняется за 3-4 такта процессора (не путать с циклами программы), а это 2-3 мкс (для AVR). Быстрее ничего не бывает, никаких фильтров.

Бегущее среднее.
Как Вы правильно разобрались это сумма некоего количества последовательных значений деленная на это количество значений. В чистом виде фильтр Бегущее среднее работает подобным образом, как Вы его сделали на стеке. Не совсем конечно, но похоже.
На стеке это очень медленно.
Ну представьте, у вас куча переменных каждую надо прочитать, потом передвинуть в стеке, потом все сложить, а потом еще разделить. Это огромное количество процессорного времени, особенно деление, которое является самой долгой из простых математических операций, а еще если это float, как у Вас, то вообще беда. А еще и вычисления с переменным количеством значений. А Еще Вы там что то предлагаете по изменению частоты дискретизации во время работы.
Именно по причине быстродействия используют аналог фильтра Бегущее среднее - Экспоненциальный фильтр.
Если по простому, то берется среднее арифметическое предыдущих значений, умножается на 15 к этому прибавляется новое значение и делится на 16. Полученное значение становится новым средним арифметическим.
Псевдокод.
((Старое среднее арифметическое * 15) + новое значение) / 16 = Новое среднее арифметическое;
Старое среднее арифметическое = Новое среднее арифметическое;

Теперь почему 16. Это степень двойки. Таким образом долгая операция деления заменяется сдвигом на 4 бита. Что происходит за один такт процессора (0,0625 мкс). Вместо 16 может быть 2,4,8,16,32 и т.д.

Как видно, в данном случае нет огромного количества переменных их всего две среднее арифметическое и новое значение, а соответственно существенно экономится память и процессорное время на вычисления.
Есть у этого метода и минус. Это точность. Конечное значение занижается в пределах тех четырех бит которые срезаются при сдвиге. Поэтому такой фильтр будет не очень хорошо работать на маленьких значениях (меньше 200-300).

Теперь по дискретизации (тактированию) бегущего среднего. Чем чаще мы снимаем показания тем ближе к реальному времени сигнала, но фильтрация(выпрямление графика) слабей. И наоборот, чем реже вносим новое значение, тем больше отставание от исходного сигнала. Количество суммируемых значений так же влияет на фильтрацию и отставание.

Про другие фильтры, типа Кальмана, рассказывать не буду. Постарайтесь осознать и переварить уже сказанное. Медианный и бегущее среднее(экспоненциальный), это два основных фильтра используемых в маломощных контроллерах.

Ingwar
Полковник
Сообщения: 1714
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 140
Откуда: Ленобласть
Имя: Игорь

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

#32

Сообщение Ingwar » 21.08.2022{, 19:01}

Крылья, ноги... ХВОСТ
А мне нравится фильтровать через RC фильтр (программный). Можно гибко задавать скорость реакции, а задержка... так она практически постоянная и ее легко учитывать :smile9:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#33

Сообщение Dryundel » 21.08.2022{, 19:05}

Ingwar писал(а):
21.08.2022{, 19:01}
А мне нравится фильтровать через RC фильтр (программный).
Про что Вы хоть говорите? Что за программный RC фильтр? Я отстал от жизни?
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Ingwar
Полковник
Сообщения: 1714
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 140
Откуда: Ленобласть
Имя: Игорь

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

#34

Сообщение Ingwar » 21.08.2022{, 19:59}

Dryundel писал(а):
21.08.2022{, 19:05}
Что за программный RC фильтр?
Отсюда viewtopic.php?f=82&t=3098
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#35

Сообщение Dryundel » 22.08.2022{, 08:33}

Ingwar писал(а):
21.08.2022{, 19:59}
Отсюда
Ясно. Это имитация поведения RC-пцепи примененная к цифровом потоку. Не особо эффективно, как мне кажется, но тоже имеет место быть. Вообще математических моделей фильтрации существует довольно много. Для каждого частного случая тоже можно создать свое решение и оно будет прекрасно работать в конкретном случае. Но сделать универсальный цифровой фильтр практически невозможно.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#36

Сообщение Rovki » 22.08.2022{, 09:33}

Dryundel писал(а):
21.08.2022{, 18:32}
Rovki писал(а):
21.08.2022{, 14:32}
Но если строго подходить к фильтру ,то он должен быть полосовым ,отфильтровывать не только ВЧ ,но НЧ помехи, что очень важно ввиду слабых ИП и меняющейся нагрузки Для аналоговых сигналов.
Цифровые фильтры не фильтруют частоты, они фильтруют ЦИФРЫ (значения)! На то они и цифровые фильтры.

Хорошо, давайте медленно пережевывать основные принципы.
1. До того как аналоговый сигнал попал на пин АЦП, вы можете фильтровать его физическим способом - RC, LC фильтрами, активными методами...
2. Как только аналоговый сигнал попал на АЦП это уже не аналоговый сигнал. Это поток значений с дискретностью по времени. Те если мы хотим оцифровать высокие частоты нам необходимо иметь частоту дискретизации хотя бы на порядок больше частоты сигнала, максимальной частоты которую мы оцифровываем. Другими словами, чтобы оцифровать сигнал 10кГц, надо иметь частоту оцифровки 100кГц. Такое могут далеко не все контроллеры. К примеру AЦП AVR(16МГЦ) может качественно снимать сигнал 1 раз в 120мкс а это всего 8кГц и при условии что контроллер больше ничем не занят. Т.е. Максимально доступная для оцифровки частота до 1000Гц. С ооочень большой натяжкой.
О каких высоких частотах Вы говорите Rovki? О чем вообще речь?
3. Теперь о шуме сигнала и помеховых пиках.
Пришлось создать блок генератора шумной синусоиды. Что не сделаешь ради Rovki. :)
Шумный сигнал.jpg
Так вот фильтрация шума и фильтрация помех ЦИФРОВОГО сигнала осуществляется разными фильтрами и с разной частотой дискретизации (тактирования).
Начнем с помеховых пиков. Как правило они очень короткие по времени. Их период измеряется десятками-сотнями микросекунд. Чтобы отфильтровать эти неправильные цифровые значения используются медианные фильтры.

Что такое медианный фильтр.
Берутся несколько последовательно пришедших значений и из них выбирается среднее. Не рассчитывается! А ВЫБИРАЕТСЯ.
Пример:
1, 2, 2, 2, 5, 18, 30 - медиана в этом случае будет 2, потому как есть 3 числа больше или равно 2 и 3 числа меньше или равно 2.

Т.к. период пиков очень короткий, то и снимать показания надо часто, с дискретностью равной примерно максимально возможному периоду этих помех. В противном случае медианный фильтр будет фильтровать лишнее и искажать сигнал.
Т.к. снимать и фильтровать надо часто, значит делать надо это очень быстро. Медианные фильтры именно под это и заточены. Один из фильтров которые я Вам давал выбирает медиану из трех значений и выполняется за 3-4 такта процессора (не путать с циклами программы), а это 2-3 мкс (для AVR). Быстрее ничего не бывает, никаких фильтров.

Бегущее среднее.
Как Вы правильно разобрались это сумма некоего количества последовательных значений деленная на это количество значений. В чистом виде фильтр Бегущее среднее работает подобным образом, как Вы его сделали на стеке. Не совсем конечно, но похоже.
На стеке это очень медленно.
Ну представьте, у вас куча переменных каждую надо прочитать, потом передвинуть в стеке, потом все сложить, а потом еще разделить. Это огромное количество процессорного времени, особенно деление, которое является самой долгой из простых математических операций, а еще если это float, как у Вас, то вообще беда. А еще и вычисления с переменным количеством значений. А Еще Вы там что то предлагаете по изменению частоты дискретизации во время работы.
Именно по причине быстродействия используют аналог фильтра Бегущее среднее - Экспоненциальный фильтр.
Если по простому, то берется среднее арифметическое предыдущих значений, умножается на 15 к этому прибавляется новое значение и делится на 16. Полученное значение становится новым средним арифметическим.
Псевдокод.
((Старое среднее арифметическое * 15) + новое значение) / 16 = Новое среднее арифметическое;
Старое среднее арифметическое = Новое среднее арифметическое;

Теперь почему 16. Это степень двойки. Таким образом долгая операция деления заменяется сдвигом на 4 бита. Что происходит за один такт процессора (0,0625 мкс). Вместо 16 может быть 2,4,8,16,32 и т.д.

Как видно, в данном случае нет огромного количества переменных их всего две среднее арифметическое и новое значение, а соответственно существенно экономится память и процессорное время на вычисления.
Есть у этого метода и минус. Это точность. Конечное значение занижается в пределах тех четырех бит которые срезаются при сдвиге. Поэтому такой фильтр будет не очень хорошо работать на маленьких значениях (меньше 200-300).

Теперь по дискретизации (тактированию) бегущего среднего. Чем чаще мы снимаем показания тем ближе к реальному времени сигнала, но фильтрация(выпрямление графика) слабей. И наоборот, чем реже вносим новое значение, тем больше отставание от исходного сигнала. Количество суммируемых значений так же влияет на фильтрацию и отставание.

Про другие фильтры, типа Кальмана, рассказывать не буду. Постарайтесь осознать и переварить уже сказанное. Медианный и бегущее среднее(экспоненциальный), это два основных фильтра используемых в маломощных контроллерах.
1.Цифрам соответствует сигнал, Это видно на графиках что приводил, зачем быть столь категоричным .А любой сигнал характеризуется - уровнем, частотой изменения и тд...
2.Высокая частота это относительно частоты изменения основного сигнала ,например для измерения температуры помехи даже 10ГЦ будут высокочастотными...Зачем приводить характеристики AVR , если я например использую исключительно ЕСП?
Андрей, с фильтрами скользящего окна я разобрался лет 30 назад, когда выпустил серию цифровых эхолотов для речного пароходства (первые в России) на базе однокристалки ... Мой отец занимался ими профессионально , но аналоговыми. Если можно - поменьше теории ,хотя может кому другому пригодиться... А там помехи на отраженный акустический сигнал, как от дна реки ,так и кильватерной струи еще те...И частота посылок излучателя(он же приемник) не маленькая, что бы во время движения судна снимать без пропусков рельеф дна. Эхолот так и назывался "Тандем" (отца и сына) :)
Для измерения напряжения АКБ , температуры итп речь вообще о быстродействии не идет. Могу померить цикл выполнения своего фильтра ,если интересно ...

Отправлено спустя 8 минут 23 секунды:
Ingwar писал(а):
21.08.2022{, 19:01}
Крылья, ноги... ХВОСТ
А мне нравится фильтровать через RC фильтр (программный). Можно гибко задавать скорость реакции, а задержка... так она практически постоянная и ее легко учитывать :smile9:
Пробовал, если ставлю большое значение интегрирования ,то опять же долго выходит на входное значение при включении питания ,а дальше нормально... Меня в первую очередь утруждает не точность измерения в условиях помех(можно использовать разные фильтры), а время выхода фильтра на входные значения , особенно если использовать цифровой индикатор ...Включил измеритель напряжения АКБ (например в лодке) и ждешь минуту , если быстрее то разряды цифр индикатора бьют по глазам..
Электронщик до мозга костей и не только

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

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

#37

Сообщение Dryundel » 22.08.2022{, 10:06}

Rovki писал(а):
22.08.2022{, 09:41}
Если можно - поменьше теории
Ок. Для Вас теории больше не будет совсем. Похоже это действительно бессмысленно.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#38

Сообщение Rovki » 22.08.2022{, 13:19}

Dryundel писал(а):
22.08.2022{, 10:06}
Rovki писал(а):
22.08.2022{, 09:41}
Если можно - поменьше теории
Ок. Для Вас теории больше не будет совсем. Похоже это действительно бессмысленно.
Я ее своим ученикам в КЮТе давал долгое время :) :smile44:
На форуме имхо не все же новички с гуманитарным образованием.
Электронщик до мозга костей и не только

Ingwar
Полковник
Сообщения: 1714
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 140
Откуда: Ленобласть
Имя: Игорь

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

#39

Сообщение Ingwar » 22.08.2022{, 18:42}

Rovki писал(а):
22.08.2022{, 09:41}
а время выхода фильтра на входные значения , особенно если использовать цифровой индикатор ...Включил измеритель напряжения АКБ (например в лодке) и ждешь минуту , если быстрее то разряды цифр индикатора бьют по глазам..
По мне так это начинает походить на то, что Вы сами создаете проблему, что бы с ней бороться...
Например я использую RC фильтр (вкупе с другими) на самодельном весовом дозаторе жидких продуктов. Там нужно довольно быстро делать измерения (внешний АЦП и несколько тыров измерений в секунду) при этом "не реагировать" на турбулентность потока (неравномерное давление струи на датчик). И поскольку вывод значений на индикацию занимает около 2,6мсек, я просто отключаю этот участок, пока на закончится цикл наполнения.
Так вот, кто Вам мешает сделать обновление экрана/индикатора пореже (чтоб не рябило) это при нерегулярном сигнале. Или сделать задержку вывода при включении (если речь о "зарядке").
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

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

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

#40

Сообщение Rovki » 22.08.2022{, 19:46}

Ingwar писал(а):
22.08.2022{, 18:42}
Rovki писал(а):
22.08.2022{, 09:41}
а время выхода фильтра на входные значения , особенно если использовать цифровой индикатор ...Включил измеритель напряжения АКБ (например в лодке) и ждешь минуту , если быстрее то разряды цифр индикатора бьют по глазам..
По мне так это начинает походить на то, что Вы сами создаете проблему, что бы с ней бороться...
Например я использую RC фильтр (вкупе с другими) на самодельном весовом дозаторе жидких продуктов. Там нужно довольно быстро делать измерения (внешний АЦП и несколько тыров измерений в секунду) при этом "не реагировать" на турбулентность потока (неравномерное давление струи на датчик). И поскольку вывод значений на индикацию занимает около 2,6мсек, я просто отключаю этот участок, пока на закончится цикл наполнения.
Так вот, кто Вам мешает сделать обновление экрана/индикатора пореже (чтоб не рябило) это при нерегулярном сигнале. Или сделать задержку вывода при включении (если речь о "зарядке").
Я ж говорю что заказчика и меня не устраивает время, после включения, выхода на уровень ,а не работа потом при любом фильтре. Редкость обновления не решает проблем с прыганьем показаний , хоть раз в минуту ...Кому нужен вольтметр АКБ , который показывает 12.6.....12.3... 12.9... Или термометр 25.8...26.1...25.5 ...каждую минуту
Электронщик до мозга костей и не только

Ответить

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