LINUX.ORG.RU

Отсеивание «плохих» пиков на диаграмме

 


1

1

Всем привет. Сейчас вынужден переписывать небольшой модуль не совсем по своей специальности и столкнулся с проблемой, которую нужно решить. Не в Job, потому что не прошу решить её за меня, а просто подтолкнуть в нужную сторону.

Имеется: диаграммы распространения ультразвука в некой среде. На них мне программно надо найти пики. С этим проблем нет, это реализуется просто. Но, надо отсеять «плохие» пики и оставить только нужные, на которых будут строиться дальнейшие расчёты.

Пример того, что нужно отсеять:
Раз
Два

Пример того, что нужно оставить:
Раз
Два

Ответ на: комментарий от Sahas

Когда приходить, я сам разберусь. Визуально на скриншотах всё видно. Если бы я мог адекватно выразить чем одни отличаются от других - я бы смог это и в коде выразить и темы на форуме бы не было.

evgeny_aa ★★☆
() автор топика
Ответ на: комментарий от ymn

Это какие-то помехи. Визуально их отличить легко. Если я делаю расчёты вручную, то эти всплески не учитываются. Как их адекватно отсеять программно - не придумал.

Я бы мог даже обучить модель без проблем, которая отсеивала бы всё лишнее, но это из пушки по воробьям)

evgeny_aa ★★☆
() автор топика
Ответ на: комментарий от evgeny_aa

Берешь какой-нибудь scipy.signal.find_peaks, находишь кандидатов на удаление. Рассматриваешь окрестность у этих кандидатов некоторой ширины. Находишь в ней все локальные максимумы, смотришь на разброс: если больше порога, то выбрасываешь, если меньше – оставляешь, не?

Upd: даже руками ничего делать не надо, в find_peaks есть все нужные параметры: и порог, и размер окна. https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html

ymn ★★★★★
()
Последнее исправление: ymn (всего исправлений: 1)
Ответ на: комментарий от ymn

scipy.signal.find_peaks

Да, оно и используется

Рассматриваешь окрестность у этих кандидатов некоторой ширины

Так точно, что-то подобное сейчас и ваяю, но выглядит это как откровенное колхозанство от неуча. Скорее всего даже будет работать. Может просто кто-то подобные задачи решал и есть более правильный путь.

Я ни разу не физик и не математик, в обычное время я обычный бэкенд разработчик и немного DevOps, и с подобным я обычно не работаю.

evgeny_aa ★★☆
() автор топика
Ответ на: комментарий от evgeny_aa

Может просто кто-то подобные задачи решал и есть более правильный путь

Более правильный путь называется outlier detection, который открывает дверь в удивительный мир целой кучи детерминированных и не очень методов проверки статистических гипотез. В scikit-learn что-то готовое есть. Начать можно отсюда https://scikit-learn.org/stable/modules/outlier_detection.html

ymn ★★★★★
()

Фильтруете входные данные и вуаля.

Есть много фильтров, хороших и разных - всякие сглаживающие, медианный, через фурье (резануть высокие частоты) и тд. Сигнальная обработка большая наука.

Я бы попробовал медианный или какое то сглаживание (линейный фильтр) для начала.

AntonI ★★★★
()
Ответ на: комментарий от AntonI

Фильтры пробовал, но среда распространения бывает очень разной толщины, и в зависимости от ее толщины фильтры лишнее срезали. В общем, мне показалось, что в нужный срок я их приготовить не смогу, а сроки поджимают.

evgeny_aa ★★☆
() автор топика
Ответ на: комментарий от shTigrits

Примерно так и получилось. Всем спасибо, на нужные мысли натолкнули, реализация получилась. Точность измерений выросла с +- 100 (утрированно) до 0.01 :)

evgeny_aa ★★☆
() автор топика

Это не в dev а в science (ты ж пишешь проблема не в разработке).

Сравнивай площади пиков, все хороше у тебя больше чем все плохие. Ну и можно как-нить окрестности анализировать, но по этим четырём примерам недостаточно информации.

firkax ★★★★★
()
Ответ на: комментарий от Irma

Ты только что использовал обученные нейросети, для решения задачи

Лор-гопота — большая языкастая модель, четверть века на рынке. Основной принцип — битый небитого обученный необученного везёт.

Nervous ★★★★★
()

А на сколько пики помех продолжительные? Может, стоит использовать какие-нибудь усредненные/медианные значения за «х» времени?

dicos ★★
()

Посмотри в сторону оконного преобразования фурье(спектрограммы), на нем паттерн пиков будет более понятным. Да и фильтры куда проще в частотной области применять.

scalaris_
()
Ответ на: комментарий от evgeny_aa

Визуально их отличить легко.

Нет не легко, ты выделил плохой пик, но там рядом такие же пики, ты выделил хороший пик который выгляди как пик, но на деле кривая.

Именно это чтоль? Если так то просто между верхним пиком и двумя самыми нижними не должно быть больше точек для построения графика, если их нет пик плохой, если они есть пик хороший. Рахрешение точек на графике небольшое, должно сработать или чёнить из линейной алгебры применить на предмет пересечения векторов (пускать лучи из плечей пика по касательной линий если есть пересечение в точке пика на всех точках вплоть до дна он плохой), плохие пики ещё всегда зеркальны и можно вычислить их таким образом инвертировав направление по x и если отрезки лежат друг на друге после инвертирования то пик плохой. Но это мысли в слух, так как наверное я не то увидел :D

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 4)
Ответ на: комментарий от evgeny_aa

Если бы я мог адекватно выразить чем одни отличаются от други

И не надо выражать. Это прошлый век. Обучи нейросеть, она сама выяснит по каким критериям разделять на сигналы.

ox55ff ★★★★★
()
Ответ на: комментарий от bugfixer

Да конечно все сводится к фильтрам. Но ТС не хочет в фильтры, а нейросетефилы вроде @ox55ff не умеют в фильтры.

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

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Какие математические вычисления в нейросетях? сложить-умножить-отсечь? При том что это давным давно захаркдожено и вся работа сводится к подбору типа нейросети и обучению (челоек пальцем тычет, этот пик хороший этот плохой)?

а те же математические вычисления в нейросетях сразу приведут к отупению.

Ну, судя по Вашим комментам, уже привело…

AntonI ★★★★
()
Ответ на: комментарий от AntonI

сложить-умножить-отсечь?

Чем вам это не угодило? Будто бы в КИХ что-то кардинально другое.

вся работа сводится к подбору типа нейросети

Фильтры каждый раз новые не придумывают.

обучению (челоек пальцем тычет, этот пик хороший этот плохой)

А в фильтрах коэффициенты не подстраиваете с проверкой результата на плохой/хороший? Правильная подготовка обучающего набора имеет решающее значение. Если думаете, что можно просто навалить кучу и нейросеть сама разберётся, то нет, так не работает, вплоть до того, что обучение никогда не сойдётся.

Ну, судя по Вашим комментам, уже привело…

От ваших луддизмом веет. По сути нейросети это просто другой способ обработки данных, а у вас, простите, жопа от чего то полыхнула. Нормально вообще? Дальше что, неугодные разделы математики, которые «отупляют» людей, которые их изучают? Смешно.

ox55ff ★★★★★
()
Ответ на: комментарий от AntonI

Но ТС не хочет в фильтры

Не не хочу, а не получилось сходу. Задача в целом была непростой (как минммум для меня) и поджимали сроки. Писал, кстати говоря, ультразвуковой толщиномер.

Не буду плодить сообщения и отвечу разом всем, кто отписывался по существу. Во-первых всем большое спасибо, я все сообщения прочёл и многие были так или иначе полезны. Пробовал почти всё, что советовали.

За прошедшие дни алгоритм похорошел и стал измерять всё, что нужно, а точность на самом деле теперь укладывается в 0.01 при требуемых 0.1. Главной проблемой в последние дни было то, что та реализация, о которой я писал выше, давала сбои на слишком маленьких и слишком больших измеряемых образцах. В итоге она была полностью переписана.

Что вышло: во-первых, фильтры всё-таки теперь используются, а именно фильтр Бесселя. Так же пробовал фильтр Баттерворта и он даёт практически схожие результаты, но с Бесселем вышло достичь большей точности. Во-вторых вышло обойтись без нейронок, я смог корректно находить требуемые мне импульсы анализируя амплитуду. Причём алгоритм находит нужные точки даже на таких сигналах, где визуально их определить невозможно. Конечную реализацию выложить не могу, так как это не моё и делалось по работе, но если вдруг кому-то надо будет - в приватной беседе помогу :)

evgeny_aa ★★☆
() автор топика
Ответ на: комментарий от ox55ff

Будто бы в КИХ что-то кардинально другое.

В компутере при HPC вообще ничего другого почти нет. Разница в обосновании набора этих действий. Нейросети сейчас больше искусство чем наука (извеcтно как их строить, но неизвестно почему), а наука это все таки больше про «почему именно так».

Фильтры каждый раз новые не придумывают.

Наука тем и хороша что ничего не надо придумывать - просто берешь и делаешь с гарантированным результатом, а не тычешь пальцем в небо. У ТС все таки прикладная задача.

А в фильтрах коэффициенты не подстраиваете с проверкой результата на плохой/хороший?

Вид фильтров и значение параметров фильтрации как правило можно поучить из теории, если ее знаешь конечно.

Если думаете, что можно просто навалить кучу и нейросеть сама разберётся

Не вангуйте по поводу того что думает собеседник и собеседник не будет делать обоснованных выводов о влиянии нейросетей на Ваш IQ. В задаче ТС обучение потребовало бы колоссальной ручной работы.

От ваших луддизмом веет.

Вы просто не умеете читать и понимать написанное. Никто не против нейросетей вообще, никто не отрицает огромных успехов нейросетей в последние десятилетия - но не надо совать нейросети туда куда им не место.

По сути нейросети это просто другой способ обработки данных

Разумеется. И этот способ пригоден далеко не для всех задач. Что бы понять какой способ для какой задачи подходит нужно иметь некоторую квалификацию - но у таких как Вы этой квалификации нет. Потому Вы и суете нейросети везде, включая те места куда их совать априори не надо, причем делаете с диким пафосом.

«Если у тебя в руках молотах, то все вокруг кажется гвоздями»(с).

Естественно это вызывает раздражение у нормальных людей… Особенно когда очередное юное нейросетевое дарование прибегает со взором горящим:
– вот какую я супер-пупер новую шутку для обработки данных придумал!
– эээ… вообще то это называет градиент…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 2)
Ответ на: комментарий от AntonI

а наука это все таки больше про «почему именно так»

Квантовая физика по вашему получается не наука. Там вопрос «почему именно так» до сих пор стоит. Вообще это обычное дело для переднего края науки, к которому современные нейросети тоже относятся.

можно поучить из теории, если ее знаешь конечно

Теория на что? Как отсеять какие-то не зная какие помехи? В итоге в данном случае алгоритм фильтрации подбирался, а не был обоснован теоретически. Железобетонного теоретического фундамента не нашлось.

В том то и дело, что нейросеть в процессе обучения сама может извлечь признаки в том числе такие, какие человек не смог бы сам разглядеть. В сообщении, на которое я ответил предложением использовать нейросети, автор явно написал «Если бы я мог адекватно выразить чем одни отличаются от други». Здесь как раз поможет способность нейросетей подбирать признаки.

Не вангуйте по поводу того что думает собеседник

Но чуть ниже видим:

у таких как Вы этой квалификации нет

Начните применять на себе жизненные принципы, которые советуете другим и тогда

собеседник не будет делать обоснованных выводов о влиянии нейросетей на Ваш IQ

Про определении квалификации с помощью IQ я промолчу.

И этот способ пригоден далеко не для всех задач

Естественно это вызывает раздражение у нормальных людей

И вы на себя взвалили ношу определять когда пригоден, а когда нет, попутно выписывая всех несогласных из нормальных.

Очень повеселили ваши откровения. Даже и не мог подумать, что человек может так загореться из-за предложения использования нейросетей. Возможно у вас есть травмирующий опыт и вы предполагаете, что все о нём знают и поэтому поймут ваше поведение. Но нет, никто не знает, поэтому все ваши сообщения выглядят как луддизм и клоунада.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Квантовая физика по вашему получается не наука.

Вполне себе наука, но не с Вашим уровнем о ней рассуждать, бггг. Вам с элементарными вещами вроде фильтров разобраться для начала.

Железобетонного теоретического фундамента не нашлось.

У ТС-а не нашлось. Но он хотя бы знал куда копать и что пробовать. Нейросеть в задаче ТСа совершенно избыточна, фильтр быдет куда проще и быстрее и с т .з. реализации/настройки и с т.з. скорости работы. Самое смешное, что Вы таких элементарных вещей не понимаете, но дуете тут щеки про квантовую физику…

В сообщении, на которое я ответил предложением использовать нейросети, автор явно написал «Если бы я мог адекватно выразить чем одни отличаются от други». Здесь как раз поможет способность нейросетей подбирать признаки.

До-до. Сколько там пиков надо будет ТС-у ручками отметить для нейросети как хороший/плохой что бы она раздуплилась? И какие же признаки она определит - область спектра и огибающую? SNR? Еще чего то? Бггг, Вы точно знаете что такое нейросети и как их используют?

Начните применять на себе жизненные принципы,

Еще раз научитесь читать и понимать написанное. То что Вы нишута не понимаете в обсуждаемой теме однозначно следует из Ваших комментов. Но беда то не в этом - мало ли кто в чем не разбирается, я вот танцевать не умею. Беда в том, что Вы брякнув фигню продолжаете в этой фигне упорствовать, вместо того что бы книжку какую нить по фильтрации почитать, раз уж Вас эта тема так завела…

И вы на себя взвалили ношу определять…

То что нейросети не всемогущи даже в доказательстве не нуждается. То, что их сейчас зачастую суют куда не надо - в этом тоже как бы консенсус у всех кто хоть как то всерьез чем то подобным занимается. Непонятно вообще с чем Вы спорите…

все ваши сообщения выглядят как луддизм

Т.е. мое утверждение, что нейросети не подходят для решения всех возможных задач это уже луддизм?! То ли Вы не знаете значения этого слова, то ли у Вас с логикой вообще полный трындец. И это в дополнение к полному непониманию обсуждаемой задачи…

Уж не знаю, виноват ли в этом Ваш «опыт» работы с «нейросетями» или это у Вас врожденное, но я таки искренне соболезную Вашим коллегам и работодателям.

На этом общение с Вами вынужден прекратить, Вы кроме полной некомпетентности (даже в области нейросетей) ко всему еще неадекватны и очень агрессивны;-(

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от AntonI

Вполне себе наука

Вы сообщением выше утверждали, что это искусство. Не надо переобуваться на лету. Это выглядит смешно.

но не с Вашим уровнем о ней рассуждать, бггг.

Я о ней не рассуждаю. Буду признателен, если вы пришлёте ссылку на мои рассуждения. Я просто удачно поймал вас за язык за выписывания нейросетей из науки.

дуете тут щеки про квантовую физику

Ещё раз прошу ссылочку. Иначе это пустопорожняя болтовня с вашей стороны. Упоминание не равно рассуждению и дутью щёк. Это очевидно.

До-до

Уровень аргументации зашкаливает.

область спектра и огибающую? SNR?

Решили напугать баззвордами ;)? Вы в таких моментах просто палитесь на непонимании нейросетей. Нейросеть проведёт классификацию, какие признаки при этом будут использованы это её внутреннее дело. Ещё раз: старый подход - человек сам сидит и подбирает признаки; нейросетевой подход - сеть сама извлекает признаки исходя из обучающего набора, причём они могут быть неочевидны для человека.

То что Вы нишута не понимаете в обсуждаемой теме однозначно следует из Ваших комментов

Смотрите предыдущий пункт. Там вы наглядно продемонстрировали своё нишута по поводу нейросетей. Это хорошо подсвечивает ваше огромное отрицательно предубеждение по их поводу. Это предубеждение заставляет вас набрасываться на людей с оскорблениями.

То что нейросети не всемогущи даже в доказательстве не нуждается

Я утверждал обратное? Ссылочку бы. Впрочем фильтры в частности и ЦОС в общем изобрели люди, а люди думают мозгом, который внезапно нейросеть. Вы не знали? ;) Очень забавно наблюдать как нейросеть вашего мозга пытается объяснить окружающим, что от нейросетей тупеют. Если вы и вправду в это верите, то предлагаю меньше думать, чтобы случайно не отупеть.

Непонятно вообще с чем Вы спорите

Я спорю с вашим кавалерийским наскоком на предложение попробовать нейросеть для решения задачи. Заметьте, я не поливал помоями фильтры и «старую школу». Просто написал, что если признаки неизвестны (а автор явно об этом написал), то это как раз работка для нейросетей. И тут на сцене появляетесь вы и начинает оскорблять: то отупение, то квалификация не та, то с IQ что-то, то бггг, то до-до и т.д. Такую аргументацию даже в ВАКовских помойках не опубликуют.

это уже луддизм

Луддизм это ваши агрессивные нападки на новые технологии с попутными оскорблениями.

ко всему еще неадекватны и очень агрессивны;-(

Чёрное это белое. Вы тут в нескольких комментариях занимались переходом на личность и оскорблениями, а теперь д’Артаньяна из себя строите. Хам и демагог.

ox55ff ★★★★★
()

Как насчет взять среднеквадратичное значение и построить линию тренда, а затем взять от нее производную линейной функции и смотреть куда она указывает? Если коэффициент отрицательный - то у вас происходит гашение сигнала, если положительный - то надо отбросить пик. При этом надо построить заранее несколько тестовых данных в условном экселе чтобы просчитать, при каких случаях вы должны отбрасывать пик. Так как для тренда вы возьмете среднеквадратичную функцию, то значение пика брать при проверке производной будет нельзя, ибо там будет что-то около h/sqrt(2)

PPP328 ★★★★★
()

Но вообще, по своему опыту работы с ультразвуком выглядит так, как будто у вас есть пик и есть гармоники или переотражения с поглощением после пика.

У гармоник (а равно как и у переотражений) будет одинаковое запаздывание, следовательно у вас есть еще такой вариант: берем пик, отрезаем всё что до него, включая сам пик, ищем «пик» в правой половине, запоминаем, отрезаем всё слева (раз у вас есть функция определения пика, то так будет проще переиспользовать её, подав на вход не data, а data + n). Ну так вот. Определив ближайшие 3-4 субпика после основного вычислите расстояние между ними и сравните амплитуды. Если амплитуда падает, а расстояние плюс-минус одинаковое - то вы получили затухающие колебания, забираем.

PPP328 ★★★★★
()
Ответ на: комментарий от ox55ff

Ну знаете ли, что бы так открыто брехали так как Вы это делаете - даже на ЛОР-е такое нечасто бывает!

То что нейросети не всемогущи даже в доказательстве не нуждается

Я утверждал обратное?

Весь этот тред Вас в клочья рвет просто от того что кто-то усомнился в том что нейросети можно использовать для решения ЛЮБОЙ задачи. Цитировать не буду - много букв, все в свободном доступе.

Луддизм это ваши агрессивные нападки на новые технологии

Констатация того факта, что нейросети не являются универсальным средством для решения любых задач это нападки?! Или нападками является констатация того факта, что нейросети зачастую пытаются юзать там где не надо (вот как Вы тут)?!!

Лапочка, да Вы же тут много раз сказали что нейросеть сама определит все признаки по которым хороший пик отличается от плохого - но список этих признаков Вы озвучить не в состоянии, несмотря мои просьбы. По Вашему работа с нейросетью сводится к «эй, Алиса - скажи чем отличаются эти пики от этих»… Ну и о чем с Вами предметно говорить? Ни слова по делу, сплошное бла-бла-бла.

Я спорю с вашим кавалерийским наскоком на предложение попробовать нейросеть для решения задачи.

Я нигде НЕ предлагал использовать нейросеть для решения задачи ТС, напротив - я настойчиво предлагал этого НЕ делать.

я не поливал помоями фильтры и «старую школу».

«Это прошлый век. Обучи нейросеть, она сама выяснит по каким критериям разделять на сигналы.» (c) Вы

То есть Вы еще и эталонный, законченный лжец ко всему прочему… в приличном обществе таким руки не подают.

AntonI ★★★★
()