Поиск выбросов

Захват, обработка и генерирование сигнала
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Поиск выбросов

Сообщение Artem.spb »

Очередная модификация прибора у заказчика привела к тому, что прога перестала работать. Нужна помощь знатоков.
Задача: отслеживать сигнал с порта. Как только он отклоняется от нормы на заданную величину, начать запись в лог, и писать пока не вернётся обратно.
Вот сигнал с выпадами
signal.png
В проге уже есть настройка величин выпадов (максимум отклонения от нормы для начала записи). Сначала был ещё и базовый уровень (норма).
В очередной эволюции прибора появилась главная сложность: базовый уровень плавает. Т.е. Сейчас он для верхнего графика ~47975, а через час может стать 48200.
Поэтому от нормы, задаваемой руками пришлось отказаться.
Предпоследняя эволюция была такой:
Считаю скользящее среднее (глубину задаёт пользователь). И есть предельное отклонение. Как только текущая точка сильно убежала от среднего, начинаю писать. При этом запомнил текущую норму (пока пишу, значение среднего не обновляется). Вернулся в допуск, перестаю записывать лог и снова считаю скользящее.
Но сейчас сигнал такой, что среднее плавно его догоняет, и запуска записи не происходит.
Посоветуйте, как быть.
Пока прихожу к тому, что среднее надо считать ещё и с запаздыванием. Т.е. для проверки на вшивость брать среднее в N точек, которое было M точек назад.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Поиск выбросов

Сообщение IvanLis »

Artem.spb писал(а):Предпоследняя эволюция была такой:
Считаю скользящее среднее (глубину задаёт пользователь). И есть предельное отклонение. Как только текущая точка сильно убежала от среднего, начинаю писать. При этом запомнил текущую норму (пока пишу, значение среднего не обновляется). Вернулся в допуск, перестаю записывать лог и снова считаю скользящее.
Но сейчас сигнал такой, что среднее плавно его догоняет, и запуска записи не происходит.
Посоветуйте, как быть.
Пока прихожу к тому, что среднее надо считать ещё и с запаздыванием. Т.е. для проверки на вшивость брать среднее в N точек, которое было M точек назад.
Я бы попробовал:
1. Поиграть с "глубиной", в твоем случае ее видимо нужно увеличить, что бы "скользящее" не догоняло сигнал при его резком изменении.
2. При подсчете "скользящей средней" не учитывать аномальные значения выбросов. Т.е. как только был зафиксирован выброс, то подменять реальные значения на ... :think: например последнее "нормальное" значение. Когда сигнал вернулся в норму, то начинаем "скармливать" снова реальные значения.

3. Более научный способ. Посчитать первую и вторую производные, посмотреть статистику, построить гистограммы, определить аномальные значения "скорости" и "ускорения" по модулю, после чего определить критерий принятия решения. Можно даже прикинуть ошибки первого и второго рода.
Аватара пользователя
alerm

Activity
leader
leader
Сообщения: 682
Зарегистрирован: 02 май 2012, 21:28
Награды: 1
Версия LabVIEW: 20
Благодарил (а): 57 раз
Поблагодарили: 9 раз
Контактная информация:

Re: Поиск выбросов

Сообщение alerm »

IvanLis, могу ошибаться, вторая производная определят рост и падение графика, с замедлением и ускорением, в данной задаче они не играют ни какой роли.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Поиск выбросов

Сообщение IvanLis »

alerm писал(а):IvanLis, могу ошибаться, вторая производная определят рост и падение графика, с замедлением и ускорением, в данной задаче они не играют ни какой роли.
Ну сразу утверждать нельзя, но возможно Вы и правы.
Хотя вторая производная, это ускорение - скорость изменения скорости, может что и покажет.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Поиск выбросов

Сообщение Borjomy_1 »

По второму графику вряд-ли что-то сделать удастся, а вот по первому
Если паразитные отклонения всегда идут в сторону уменьшения, то нужно не скользящее среднее, а скользящий максимум. Только окно делать таким, чтобы паразитный выброс всегда в него укладывался, либо сохранять это значение до достижения нормы.
Аватара пользователя
kiparym
advanced
advanced
Сообщения: 178
Зарегистрирован: 06 сен 2011, 08:52
Версия LabVIEW: 8.2 & 2011
Откуда: г. Саров
Поблагодарили: 1 раз
Контактная информация:

Re: Поиск выбросов

Сообщение kiparym »

Предлагаю попробовать другой метод регистрации импульсов. Вместо средней скользящей, применить скользящую линейную аппроксимацию. По углу наклона линии можно регистрировать импульс. По сравнению со средней скользящей, данный способ обладает меньшим отставанием.
p.s. Линия обладает фильтрующей способностью, отсекая НЧ и ВЧ составляющие, повторяя свойства 1ой производной.
Вложения
импульс.jpg
импульс.jpg (50.57 КБ) 13686 просмотров
Последний раз редактировалось kiparym 21 дек 2015, 14:49, всего редактировалось 1 раз.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Поиск выбросов

Сообщение Artem.spb »

IvanLis писал(а): 1. Поиграть с "глубиной", в твоем случае ее видимо нужно увеличить, что бы "скользящее" не догоняло сигнал при его резком изменении.
2. При подсчете "скользящей средней" не учитывать аномальные значения выбросов. Т.е. как только был зафиксирован выброс, то подменять реальные значения на ... :think: например последнее "нормальное" значение. Когда сигнал вернулся в норму, то начинаем "скармливать" снова реальные значения.
в целом на глубине 400-500 есть шанс поймать
Borjomy_1 писал(а):Если паразитные отклонения всегда идут в сторону уменьшения, то нужно не скользящее среднее, а скользящий максимум. .
это как? максимум из последних N штук?
kiparym писал(а):Вместо средней скользящей, применить скользящую линейную аппроксимацию.
гм
надо потестить
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

Re: Поиск выбросов

Сообщение IvanLis »

Artem.spb писал(а):гм
надо потестить
Артем, ты выложи записи сигналов, желательно txt.
Те которые полностью, не только аномальные.
У кого будет время, могут попробовать реализовать свои идеи.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Поиск выбросов

Сообщение Artem.spb »

1.txt - то ючто нужно обнаруживать
7.txt содержит аномальные выбросы (скорее всего, глюк железа), их надо игнорировать.
выглядят они так:
1.jpg
Вложения
1.txt
(1.4 МБ) 228 скачиваний
7.zip
(603.48 КБ) 231 скачивание
Аватара пользователя
kiparym
advanced
advanced
Сообщения: 178
Зарегистрирован: 06 сен 2011, 08:52
Версия LabVIEW: 8.2 & 2011
Откуда: г. Саров
Поблагодарили: 1 раз
Контактная информация:

Re: Поиск выбросов

Сообщение kiparym »

Сильно не вникал в цель задачи – нет времени перед Новым годом, но попробую помочь.
7.txt содержит аномальные выбросы (скорее всего, глюк железа), их надо игнорировать.
Для удаления импульсных помех воспользуйтесь «Median Filter.vi » с коэффициентом left rank>4.
1.txt - то что нужно обнаруживать
Для выделения импульсов можно воспользоваться, как говорил ранее, скользящей линией. Организация скользящей линейной аппроксимации на основе стандартных функций LW, потребует значительного времени обработки, т.к. на каждом шаге скольжения, функция будет обрабатывать входной массив заново. Для организации алгоритма скользящей линии, достаточно обрабатывать только первую и последнюю точку линии, а результат корректировать. Для этих целей и была разработана самодельная SUBVI – можете пользоваться (режим работы- Point By Point). Фазовая задержка на выходе блока фиксированная и зависит только от выбранной длины линии.
Вложения
TEST_1Line 2.vi
(18.75 КБ) 246 скачиваний
MNK-1.llb
(120.83 КБ) 238 скачиваний
Выделение импульса.jpg
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Поиск выбросов

Сообщение Artem.spb »

kiparym писал(а): Для выделения импульсов можно воспользоваться, как говорил ранее, скользящей линией. Организация скользящей линейной аппроксимации на основе стандартных функций LW, потребует значительного времени обработки, т.к. на каждом шаге скольжения, функция будет обрабатывать входной массив заново. Для организации алгоритма скользящей линии, достаточно обрабатывать только первую и последнюю точку линии, а результат корректировать. Для этих целей и была разработана самодельная SUBVI – можете пользоваться (режим работы- Point By Point). Фазовая задержка на выходе блока фиксированная и зависит только от выбранной длины линии.
Спасибо, воспользовался.
пока железа нет, в бою не потестить. да и код, который работает непонятно как (закрыто паролем) немного боязно использовать, но пока устраивает.
Аватара пользователя
kiparym
advanced
advanced
Сообщения: 178
Зарегистрирован: 06 сен 2011, 08:52
Версия LabVIEW: 8.2 & 2011
Откуда: г. Саров
Поблагодарили: 1 раз
Контактная информация:

Re: Поиск выбросов

Сообщение kiparym »

...да и код, который работает непонятно как (закрыто паролем) немного боязно использовать
Если вас интересует содержание SUBVI, то пороль «KISA_44».
Думаю, что самостоятельно разобраться в алгоритме, будет затруднительно.
За основу программы был взят модуль «Linear Fit Coefficients PtByPt.vi» из библиотеки LW.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Поиск выбросов

Сообщение Artem.spb »

ок, спасибо.
воспользуюсь, если в процессе эксплуатации будут непонятки.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»