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

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Rovki писал(а): 21 авг 2022, 10:38 После N тактов ,после включения , фильтр становиться классическим - сумма делится постоянно на длину массива N . А в начале делитель меняется при заполнении стека 1-N
А что же Вы константу на вход подали? Сделайте реальный тест в котором в первый момент на входе 30, а уже потом около 10 И увидите что получится. Тот же самый медленный подход к значению, только сверху. О чем и говорилось ранее. Именно первый момент важен, там могут быть пиковые токи и напряжения.
А так вы можете изначально заполнить стек десятками и выкинуть этот переменный делитель, установив константу размера массива(стека). Это уж точно будет легче и проще.
И учтите еще один момент. Предположим требуется в процессе работы отключить фильтрацию. Не устройство, а только фильтрацию. Что делать со стеком? Очищать? А что делать со счетчиком? Сбрасывать? А стартовать счетчик в какой момент?
Фильтр должен быть универсальным и достаточно простым в применении, только тогда это будет фильтр, а не частное решение с костылями.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

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

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

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

Сообщение Dryundel »

Rovki писал(а): 21 авг 2022, 11:34 Фот работа фильтра на случайных числах
, видно что работа начинается не с нуля .!
Не понятно что Вы хотите показать и доказать. А где исходный сигнал?
Случайные числа это вообще не сигнал черте что. На него нельзя ориентироваться. Сигнал должен быть сигналом, а помехи и шум на него наложены. Их то и надо фильтровать.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

фильтр.jpg
Отправлено спустя 4 минуты 58 секунд:
Dryundel писал(а): 21 авг 2022, 11:45
Rovki писал(а): 21 авг 2022, 11:34 Фот работа фильтра на случайных числах
, видно что работа начинается не с нуля .!
Не понятно что Вы хотите показать и доказать. А где исходный сигнал?
Случайные числа это вообще не сигнал черте что. На него нельзя ориентироваться. Сигнал должен быть сигналом, а помехи и шум на него наложены. Их то и надо фильтровать.
Вы как с луны свалились - для фильтра нет разницы помеха или сигнал ...На скрине видно интегрирующий эффект . Тем более сам фильтр - классика ,что в нем сомневаться ,могу и ваш поставить ..Не фильтр проверяется ,а значения с момента старта до уставки ..
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Rovki писал(а): 21 авг 2022, 11:43 Тем более можно сделать две скорости работы фильтра ,при включении и после заполнения стека.
И тут Остапа понесло. :) :) :)
Вы задались сделать такой фильтр, который не потянет процессор?
Rovki писал(а): 21 авг 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 секунд:
Все то же самое что и подход от нуля. То же самое время выхода на нормальные показания. Те же яйца - вид в профиль.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

Сам фильтр как работал ,так и работает в данном случае по методу скользящего окна
Dryundel писал(а): 21 авг 2022, 11:53
Rovki писал(а): 21 авг 2022, 11:43 Тем более можно сделать две скорости работы фильтра ,при включении и после заполнения стека.
И тут Остапа понесло. :) :) :)
Вы задались сделать такой фильтр, который не потянет процессор?
Rovki писал(а): 21 авг 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
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Слова кончились. :smile44:
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

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

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

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

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

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

Отправлено спустя 2 минуты 24 секунды:
сумма.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Электронщик до мозга костей и не только
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

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

Хорошо, давайте медленно пережевывать основные принципы.
1. До того как аналоговый сигнал попал на пин АЦП, вы можете фильтровать его физическим способом - RC, LC фильтрами, активными методами...
2. Как только аналоговый сигнал попал на АЦП это уже не аналоговый сигнал. Это поток значений с дискретностью по времени. Те если мы хотим оцифровать высокие частоты нам необходимо иметь частоту дискретизации хотя бы на порядок больше частоты сигнала, максимальной частоты которую мы оцифровываем. Другими словами, чтобы оцифровать сигнал 10кГц, надо иметь частоту оцифровки 100кГц. Такое могут далеко не все контроллеры. К примеру AЦП AVR(16МГЦ) может качественно снимать сигнал 1 раз в 120мкс а это всего 8кГц и при условии что контроллер больше ничем не занят. Т.е. Максимально доступная для оцифровки частота до 1000Гц. С ооочень большой натяжкой.
О каких высоких частотах Вы говорите [ref=#ff8000]Rovki[/ref]? О чем вообще речь?
3. Теперь о шуме сигнала и помеховых пиках.
Пришлось создать блок генератора шумной синусоиды. Что не сделаешь ради [ref=#ff8000]Rovki[/ref]. :)
Шумный сигнал.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
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

Крылья, ноги... ХВОСТ
А мне нравится фильтровать через RC фильтр (программный). Можно гибко задавать скорость реакции, а задержка... так она практически постоянная и ее легко учитывать :smile9:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Ingwar писал(а): 21 авг 2022, 19:01 А мне нравится фильтровать через RC фильтр (программный).
Про что Вы хоть говорите? Что за программный RC фильтр? Я отстал от жизни?
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

Dryundel писал(а): 21 авг 2022, 19:05 Что за программный RC фильтр?
Отсюда viewtopic.php?f=82&t=3098
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Ingwar писал(а): 21 авг 2022, 19:59Отсюда
Ясно. Это имитация поведения RC-пцепи примененная к цифровом потоку. Не особо эффективно, как мне кажется, но тоже имеет место быть. Вообще математических моделей фильтрации существует довольно много. Для каждого частного случая тоже можно создать свое решение и оно будет прекрасно работать в конкретном случае. Но сделать универсальный цифровой фильтр практически невозможно.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

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

Хорошо, давайте медленно пережевывать основные принципы.
1. До того как аналоговый сигнал попал на пин АЦП, вы можете фильтровать его физическим способом - RC, LC фильтрами, активными методами...
2. Как только аналоговый сигнал попал на АЦП это уже не аналоговый сигнал. Это поток значений с дискретностью по времени. Те если мы хотим оцифровать высокие частоты нам необходимо иметь частоту дискретизации хотя бы на порядок больше частоты сигнала, максимальной частоты которую мы оцифровываем. Другими словами, чтобы оцифровать сигнал 10кГц, надо иметь частоту оцифровки 100кГц. Такое могут далеко не все контроллеры. К примеру AЦП AVR(16МГЦ) может качественно снимать сигнал 1 раз в 120мкс а это всего 8кГц и при условии что контроллер больше ничем не занят. Т.е. Максимально доступная для оцифровки частота до 1000Гц. С ооочень большой натяжкой.
О каких высоких частотах Вы говорите [ref=#ff8000]Rovki[/ref]? О чем вообще речь?
3. Теперь о шуме сигнала и помеховых пиках.
Пришлось создать блок генератора шумной синусоиды. Что не сделаешь ради [ref=#ff8000]Rovki[/ref]. :)
Шумный сигнал.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 авг 2022, 19:01 Крылья, ноги... ХВОСТ
А мне нравится фильтровать через RC фильтр (программный). Можно гибко задавать скорость реакции, а задержка... так она практически постоянная и ее легко учитывать :smile9:
Пробовал, если ставлю большое значение интегрирования ,то опять же долго выходит на входное значение при включении питания ,а дальше нормально... Меня в первую очередь утруждает не точность измерения в условиях помех(можно использовать разные фильтры), а время выхода фильтра на входные значения , особенно если использовать цифровой индикатор ...Включил измеритель напряжения АКБ (например в лодке) и ждешь минуту , если быстрее то разряды цифр индикатора бьют по глазам..
Электронщик до мозга костей и не только
Аватара пользователя
Dryundel
Полковник
Сообщения: 2467
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 8 раз
Поблагодарили: 35 раз

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

Сообщение Dryundel »

Rovki писал(а): 22 авг 2022, 09:41 Если можно - поменьше теории
Ок. Для Вас теории больше не будет совсем. Похоже это действительно бессмысленно.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

Dryundel писал(а): 22 авг 2022, 10:06
Rovki писал(а): 22 авг 2022, 09:41 Если можно - поменьше теории
Ок. Для Вас теории больше не будет совсем. Похоже это действительно бессмысленно.
Я ее своим ученикам в КЮТе давал долгое время :) :smile44:
На форуме имхо не все же новички с гуманитарным образованием.
Электронщик до мозга костей и не только
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

Rovki писал(а): 22 авг 2022, 09:41 а время выхода фильтра на входные значения , особенно если использовать цифровой индикатор ...Включил измеритель напряжения АКБ (например в лодке) и ждешь минуту , если быстрее то разряды цифр индикатора бьют по глазам..
По мне так это начинает походить на то, что Вы сами создаете проблему, что бы с ней бороться...
Например я использую RC фильтр (вкупе с другими) на самодельном весовом дозаторе жидких продуктов. Там нужно довольно быстро делать измерения (внешний АЦП и несколько тыров измерений в секунду) при этом "не реагировать" на турбулентность потока (неравномерное давление струи на датчик). И поскольку вывод значений на индикацию занимает около 2,6мсек, я просто отключаю этот участок, пока на закончится цикл наполнения.
Так вот, кто Вам мешает сделать обновление экрана/индикатора пореже (чтоб не рябило) это при нерегулярном сигнале. Или сделать задержку вывода при включении (если речь о "зарядке").
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Аватара пользователя
Rovki
Полковник
Сообщения: 5741
Зарегистрирован: 22 апр 2016, 17:25
Откуда: Чехов
Имя: Анатолий
Благодарил (а): 69 раз
Поблагодарили: 223 раза
Контактная информация:

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

Сообщение Rovki »

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

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

Сообщение arisov77 »

Rovki писал(а): 22 авг 2022, 19:46...Кому нужен вольтметр АКБ , который показывает 12.6.....12.3... 12.9... Или термометр 25.8...26.1...25.5 ...каждую минуту
От подобных мельканий мне помогло использование нескольких последовательных фильтров: медианный (по 3 значениям) + "итерационный" + медианный + "итерациональный" + экспоненциальное бегущее среднее + накапливающее среднее. Пробовал разные комбинации, менял местами фильтры - но только в такой последовательности добился наименьших мельканий.

Итерационный или пороговый фильтр (или может его ещё как то по другому называют) был сделан по алгоритму описанному здесь https://catcatcat.d-lan.dp.ua/moving-av ... e-srednee/ читать абзац "Проблема медленно изменяющего параметра" (сайт у меня открывается через VPN). Если у кого нет VPN приведу часть текста оттуда: ...Для этого я применяю такой прием, я для него придумал название итерационный фильтр. Суть заключается в том, что поступившие данные сравниваются с предыдущим значением и если значения равны, то счетчик итераций обнуляется. Если же не равны, то начинает работать счетчик итераций и когда достигает заданного значения, новые данные заменяют место старых. Для устранения влияния на работу на больших изменениях параметра, вводиться понятие порога, выше которого данный фильтр неактивен...
Также по фильтрации на том сайте можно почитать https://catcatcat.d-lan.dp.ua/prostoy-t ... nogo-toka/

Фильтры "Медианный и экспоненциальное бегущее среднее" - алгоритмы брал отсюда https://alexgyver.ru/lessons/filters/
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

Rovki писал(а): 22 авг 2022, 19:46 Я ж говорю что заказчика и меня не устраивает время, после включения, выхода на уровень ,а не работа потом при любом фильтре. Редкость обновления не решает проблем с прыганьем показаний , хоть раз в минуту ...Кому нужен вольтметр АКБ , который показывает 12.6.....12.3... 12.9... Или термометр 25.8...26.1...25.5 ...каждую минуту
Что то тут не так... Я не знаю, как Вы настраиваете фильтры, что они у Вас скачут "каждую минуту". Из моего поста вполне очевидно, что скорость реакции фильтра, как и его сглаживающая функция в примере довольно высоки. Для понимания - скорость налива ~150 грамм в секунду, датчик на 30кг и гарантированная погрешность плюс/минус 5 грамм. Причем льют в тару 0,5 и 1 литр. Такое, казалось бы необоснованное решение применить датчик до 30кг, обусловлено низкой ̶с̶о̶ц̶и̶а̶л̶ь̶н̶о̶й̶ ̶о̶т̶в̶е̶т̶с̶т̶в̶е̶н̶н̶о̶с̶т̶ь̶ю̶ культурой труда работников с дружественных республик, которые на весы могут ставить различные предметы, протирать с усердием поверхность, опереться да и присесть... Надеюсь Вы понимаете какое примерно может быть соотношение шумов к полезному сигналу ?
Может надо что то "в консерватории поправить"?... Может проблема в цикле или аппаратная?
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость