Поиск выбросов
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Поиск выбросов
Очередная модификация прибора у заказчика привела к тому, что прога перестала работать. Нужна помощь знатоков.
Задача: отслеживать сигнал с порта. Как только он отклоняется от нормы на заданную величину, начать запись в лог, и писать пока не вернётся обратно.
Вот сигнал с выпадами В проге уже есть настройка величин выпадов (максимум отклонения от нормы для начала записи). Сначала был ещё и базовый уровень (норма).
В очередной эволюции прибора появилась главная сложность: базовый уровень плавает. Т.е. Сейчас он для верхнего графика ~47975, а через час может стать 48200.
Поэтому от нормы, задаваемой руками пришлось отказаться.
Предпоследняя эволюция была такой:
Считаю скользящее среднее (глубину задаёт пользователь). И есть предельное отклонение. Как только текущая точка сильно убежала от среднего, начинаю писать. При этом запомнил текущую норму (пока пишу, значение среднего не обновляется). Вернулся в допуск, перестаю записывать лог и снова считаю скользящее.
Но сейчас сигнал такой, что среднее плавно его догоняет, и запуска записи не происходит.
Посоветуйте, как быть.
Пока прихожу к тому, что среднее надо считать ещё и с запаздыванием. Т.е. для проверки на вшивость брать среднее в N точек, которое было M точек назад.
Задача: отслеживать сигнал с порта. Как только он отклоняется от нормы на заданную величину, начать запись в лог, и писать пока не вернётся обратно.
Вот сигнал с выпадами В проге уже есть настройка величин выпадов (максимум отклонения от нормы для начала записи). Сначала был ещё и базовый уровень (норма).
В очередной эволюции прибора появилась главная сложность: базовый уровень плавает. Т.е. Сейчас он для верхнего графика ~47975, а через час может стать 48200.
Поэтому от нормы, задаваемой руками пришлось отказаться.
Предпоследняя эволюция была такой:
Считаю скользящее среднее (глубину задаёт пользователь). И есть предельное отклонение. Как только текущая точка сильно убежала от среднего, начинаю писать. При этом запомнил текущую норму (пока пишу, значение среднего не обновляется). Вернулся в допуск, перестаю записывать лог и снова считаю скользящее.
Но сейчас сигнал такой, что среднее плавно его догоняет, и запуска записи не происходит.
Посоветуйте, как быть.
Пока прихожу к тому, что среднее надо считать ещё и с запаздыванием. Т.е. для проверки на вшивость брать среднее в N точек, которое было M точек назад.
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Поиск выбросов
Я бы попробовал:Artem.spb писал(а):Предпоследняя эволюция была такой:
Считаю скользящее среднее (глубину задаёт пользователь). И есть предельное отклонение. Как только текущая точка сильно убежала от среднего, начинаю писать. При этом запомнил текущую норму (пока пишу, значение среднего не обновляется). Вернулся в допуск, перестаю записывать лог и снова считаю скользящее.
Но сейчас сигнал такой, что среднее плавно его догоняет, и запуска записи не происходит.
Посоветуйте, как быть.
Пока прихожу к тому, что среднее надо считать ещё и с запаздыванием. Т.е. для проверки на вшивость брать среднее в N точек, которое было M точек назад.
1. Поиграть с "глубиной", в твоем случае ее видимо нужно увеличить, что бы "скользящее" не догоняло сигнал при его резком изменении.
2. При подсчете "скользящей средней" не учитывать аномальные значения выбросов. Т.е. как только был зафиксирован выброс, то подменять реальные значения на ... например последнее "нормальное" значение. Когда сигнал вернулся в норму, то начинаем "скармливать" снова реальные значения.
3. Более научный способ. Посчитать первую и вторую производные, посмотреть статистику, построить гистограммы, определить аномальные значения "скорости" и "ускорения" по модулю, после чего определить критерий принятия решения. Можно даже прикинуть ошибки первого и второго рода.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
alerm
- leader
- Сообщения: 682
- Зарегистрирован: 02 май 2012, 21:28
- Награды: 1
- Версия LabVIEW: 20
- Благодарил (а): 57 раз
- Поблагодарили: 9 раз
- Контактная информация:
Re: Поиск выбросов
IvanLis, могу ошибаться, вторая производная определят рост и падение графика, с замедлением и ускорением, в данной задаче они не играют ни какой роли.
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Поиск выбросов
Ну сразу утверждать нельзя, но возможно Вы и правы.alerm писал(а):IvanLis, могу ошибаться, вторая производная определят рост и падение графика, с замедлением и ускорением, в данной задаче они не играют ни какой роли.
Хотя вторая производная, это ускорение - скорость изменения скорости, может что и покажет.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2210
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 26 раз
Re: Поиск выбросов
По второму графику вряд-ли что-то сделать удастся, а вот по первому
Если паразитные отклонения всегда идут в сторону уменьшения, то нужно не скользящее среднее, а скользящий максимум. Только окно делать таким, чтобы паразитный выброс всегда в него укладывался, либо сохранять это значение до достижения нормы.
Если паразитные отклонения всегда идут в сторону уменьшения, то нужно не скользящее среднее, а скользящий максимум. Только окно делать таким, чтобы паразитный выброс всегда в него укладывался, либо сохранять это значение до достижения нормы.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Поиск выбросов
Предлагаю попробовать другой метод регистрации импульсов. Вместо средней скользящей, применить скользящую линейную аппроксимацию. По углу наклона линии можно регистрировать импульс. По сравнению со средней скользящей, данный способ обладает меньшим отставанием.
p.s. Линия обладает фильтрующей способностью, отсекая НЧ и ВЧ составляющие, повторяя свойства 1ой производной.
p.s. Линия обладает фильтрующей способностью, отсекая НЧ и ВЧ составляющие, повторяя свойства 1ой производной.
- Вложения
-
- импульс.jpg (50.57 КБ) 13692 просмотра
Последний раз редактировалось kiparym 21 дек 2015, 14:49, всего редактировалось 1 раз.
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Поиск выбросов
в целом на глубине 400-500 есть шанс пойматьIvanLis писал(а): 1. Поиграть с "глубиной", в твоем случае ее видимо нужно увеличить, что бы "скользящее" не догоняло сигнал при его резком изменении.
2. При подсчете "скользящей средней" не учитывать аномальные значения выбросов. Т.е. как только был зафиксирован выброс, то подменять реальные значения на ... например последнее "нормальное" значение. Когда сигнал вернулся в норму, то начинаем "скармливать" снова реальные значения.
это как? максимум из последних N штук?Borjomy_1 писал(а):Если паразитные отклонения всегда идут в сторону уменьшения, то нужно не скользящее среднее, а скользящий максимум. .
гмkiparym писал(а):Вместо средней скользящей, применить скользящую линейную аппроксимацию.
надо потестить
-
IvanLis
- guru
- Сообщения: 5462
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 86 раз
Re: Поиск выбросов
Артем, ты выложи записи сигналов, желательно txt.Artem.spb писал(а):гм
надо потестить
Те которые полностью, не только аномальные.
У кого будет время, могут попробовать реализовать свои идеи.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Поиск выбросов
1.txt - то ючто нужно обнаруживать
7.txt содержит аномальные выбросы (скорее всего, глюк железа), их надо игнорировать.
выглядят они так:
7.txt содержит аномальные выбросы (скорее всего, глюк железа), их надо игнорировать.
выглядят они так:
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Поиск выбросов
Сильно не вникал в цель задачи – нет времени перед Новым годом, но попробую помочь.
Для удаления импульсных помех воспользуйтесь «Median Filter.vi » с коэффициентом left rank>4.7.txt содержит аномальные выбросы (скорее всего, глюк железа), их надо игнорировать.
Для выделения импульсов можно воспользоваться, как говорил ранее, скользящей линией. Организация скользящей линейной аппроксимации на основе стандартных функций LW, потребует значительного времени обработки, т.к. на каждом шаге скольжения, функция будет обрабатывать входной массив заново. Для организации алгоритма скользящей линии, достаточно обрабатывать только первую и последнюю точку линии, а результат корректировать. Для этих целей и была разработана самодельная SUBVI – можете пользоваться (режим работы- Point By Point). Фазовая задержка на выходе блока фиксированная и зависит только от выбранной длины линии.1.txt - то что нужно обнаруживать
- Вложения
-
- TEST_1Line 2.vi
- (18.75 КБ) 246 скачиваний
-
- MNK-1.llb
- (120.83 КБ) 239 скачиваний
-
- professor
- Сообщения: 3396
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Поиск выбросов
Спасибо, воспользовался.kiparym писал(а): Для выделения импульсов можно воспользоваться, как говорил ранее, скользящей линией. Организация скользящей линейной аппроксимации на основе стандартных функций LW, потребует значительного времени обработки, т.к. на каждом шаге скольжения, функция будет обрабатывать входной массив заново. Для организации алгоритма скользящей линии, достаточно обрабатывать только первую и последнюю точку линии, а результат корректировать. Для этих целей и была разработана самодельная SUBVI – можете пользоваться (режим работы- Point By Point). Фазовая задержка на выходе блока фиксированная и зависит только от выбранной длины линии.
пока железа нет, в бою не потестить. да и код, который работает непонятно как (закрыто паролем) немного боязно использовать, но пока устраивает.
- kiparym
- advanced
- Сообщения: 178
- Зарегистрирован: 06 сен 2011, 08:52
- Версия LabVIEW: 8.2 & 2011
- Откуда: г. Саров
- Поблагодарили: 1 раз
- Контактная информация:
Re: Поиск выбросов
Если вас интересует содержание SUBVI, то пороль «KISA_44»....да и код, который работает непонятно как (закрыто паролем) немного боязно использовать
Думаю, что самостоятельно разобраться в алгоритме, будет затруднительно.
За основу программы был взят модуль «Linear Fit Coefficients PtByPt.vi» из библиотеки LW.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 310 Просмотры
-
Последнее сообщение BAS