Обработка данных с сильно шумящего сенсора

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Какие возможны методы обработки данных с сильно шумящего сенсора, кроме усреднения по большой выборке? Не понятно где возникает ошибка, то ли на сенсоре, то ли при оцифровке, но явно некоторые данные снимаемые ардуиной не имеют физического смысла. Возникает не имеющий смысла разброс данных даже при усреднении по большой выборке (256). Как отсеять такие данные. Какие методы апроксимации есть. Может есть готовые библиотеки. у меня эта проблема возникла при анализе ЕЕГ, ЕМГ и ЕКГ сигнала.

b707
Offline
Зарегистрирован: 26.05.2017

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

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Из авна конфетку не сделаешь, как ни усредняй. Зря штоли мед.оборудование стОит не как модули из Китаю. 

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Видимо придется разбираться во всем этом. Но чет думаю, что это очень даже стандартная задача и уже есть куча библиотек

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Ну да. А что уж теперь. Китайцы же тырят все равно рабочие модули. Ну не они же сами их спроектировали, в самом деле. Так что думаю дело не в модулях.  

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Что за сенсор, кака подключен, что меряет, скетч... Без этих деталей обсуждать нечего.

b707
Offline
Зарегистрирован: 26.05.2017

ИгорьУ пишет:

Видимо придется разбираться во всем этом. Но чет думаю, что это очень даже стандартная задача и уже есть куча библиотек

а смысл искать библиотеки, если любое усреднение или апроксимация - это не больше 10-15 строк кода?

Да и сомневаюсь я, что таких библиотек много

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Сенсор подключен по SPI к ардуине на сенсоре усилитель(не вижу без лупы) и 12 битное АЦП MCP3202. А что он там еще может измерять кроме напряжения

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

asam пишет:

Что за сенсор, кака подключен, что меряет, скетч... Без этих деталей обсуждать нечего.

Вот не торговать тебе на бирже!!!! Природа данных не важна - график всё содержит (с) - "любой технический аналитик"! ;)))))

Если что - шутка, конечно!

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Мал золотник да дорог. Строчек может и 10, да искать и вникать - время тратить. Видимо никуда не денусь. Спасибо за подсказку.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Библиотек широкоиспользуемых просто нет... даи быть не может. Это стандартная задач, но с множеством тонкостей. Поэтому решается каждый раз заново.

На первом этапе вырабатываешь критерий "выбросов". На втором - усредняешь оставшееся. Везде нужна т.н. "априорная  информация".

Если ты учился в ВУЗе, должен был  это всё проходить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ИгорьУ пишет:

Видимо придется разбираться во всем этом. 

Безусловно. Так даже вопрос не стоит.

ИгорьУ пишет:

уже есть куча библиотек

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

Я очень люблю такой пример: вот вам надо что-то перевезти по дороге. "Это очень даже стандартная задача и уже есть куча автомобилей". Вам надо лишь выбрать из этой кучи ... но как Вы выберете, если Вы не знаете что именно Вам нужно перевезти - подругу из салона до клуба или партию холодильников с завода на склад? Также Вы не знаете ни расстояния, ни характера и качества дороги - ничего. И как Вы будете выбирать автомобиль? Вот так и с Вашими библиотеками.

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

ЕвгенийП пишет:

 миллиона причин - характера сигнала, характера шума, от того, знаете ли Вы основную функцию сигнала или не знаете и т.д. и т.п.

Хорошо, И какой же характер шума у китайского сенсора по вашему. Я например даже не догадываюсь, вижу какие-то хаотические выбросы непонятной природы, Закономерности пока не прощупываю. Хотя бы как установить этот "характер"? А сигнал я вообще подавал стандартный

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Блин! Ну вот снова снобы старички плохо помогают!

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

 

Самый простой пример: нормально распределенная случайная величина вокруг непрерывной кривой.

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

---------------

если тебе известна природа помехи, то можно сильно улучшить свои измерения, отфильтровав именно саму помеху, о чем и писал Евгений.

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

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

Спасибо

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

как говорил Израиль Моисеевич - я их просто отбрасываю в сторону )))

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Пока я тут разбираюсь в нормальном распределении... А так можна - Делаем большую выборку. Находим среднее. Устанавливаем экспериментально доверительный интервал путем подбора. Что левее или правее от среднего на доверительный интервал отбрасываем. Снова считаем среднее и вуаля. Критикуйте пжста

b707
Offline
Зарегистрирован: 26.05.2017

ИгорьУ пишет:

Пока я тут разбираюсь в нормальном распределении... А так можна - Делаем большую выборку. Находим среднее. Устанавливаем экспериментально доверительный интервал путем подбора. Что левее или правее от среднего на доверительный интервал отбрасываем. Снова считаем среднее и вуаля. Критикуйте пжста

это если данные статичные...

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

b707 пишет:

это если данные статичные...

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Ну это же совсем другое дело. Всем спасибо. Данные приемлимые. Можна работать

Но это все при стабильном сигнале на входе. Сейчас начну цеплять электроды к живому телу и тут попрет. Говорите надо отбрасывать сигналы которые дают существенную (какой то порог экспериментально установлю) вторую производную?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ничего ведь не понял .... :-(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ИгорьУ пишет:

Хорошо, И какой же характер шума у китайского сенсора по вашему. 

По моему, у ХЗ какого китайского датчика, включённого по ХЗ какой схеме, питаемого от ХЗ какого источника питания и находящегося в ХЗ какой (по ЭМИ) обстановке характер шума, очевидно, ХЗ какой.

Вам это помогло?

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

ata3d
Offline
Зарегистрирован: 24.05.2017

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Совершенству нет предела. Я всегда готов учится и усовершенствовать модель, тем более задача очень интересная и главное актуальная. В первом приближении ее решил на уровне случайной ошибки. Дальше будет.

Условия стандартные USB компютера и ардуина UNO связаны по кабелю. Датчик запитывается от ардуины 

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

Что будем раскладывать в ряды сигнал? Выделять характерные частоты? Потом наверно отбрасывать мусорные частоты, так? Я профан в радиоэлектронике, где это часто применяют, но с математикой справлюсь

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ИгорьУ пишет:
с математикой справлюсь
Ну, напустите хоть БПФ на неё для начала, хоть что-то увидите (или не увидите)

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Я даже уверен что распределение не нормальное. А вы не думаете что можна поступить в этом случае хитро. Ну во первых "доверительный интервал" задать разный слева и справа от среднего. Установить интервалы експериментально. Ну и во вторых - эти интервалы можно и рассчитать отдельно справа и слева условно отражая данные симетрично  относительно среднего. Ну так в первом приближении сойдет?

nik182
Offline
Зарегистрирован: 04.05.2015

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Может и железо, убрал все сопли. При усреднении по 128 макс разброс составляет 14%. На входе постоянный сигнал.

На модуле ЕКГ нет усилителя, там только АЦП и все нормально. Проблема с модулями содержащими усилители. В принципе операционные усилители могут возбуждаться, может это и есть причина разброса

nik182
Offline
Зарегистрирован: 04.05.2015

На ЭКГ нет усилителя? Эк Вас колбасит то. Там без усилителей ни один ацп даже намёка на сигнал не поймает. Вот только усилители там с расчётными полосами нагрузками и большим усилением. И без шумов. Точно у Вас где то на входе Вашей схемы китаец что то припаять забыл. 

 

 

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Ошибся, не присмотрелся хорошо, смотрю одна микросхема на модуле. Что ж это у меня так данные колбасит на модуле GSR. А как проверить сам модуль на работоспособность. В прицепе он работает, только сильно разбрасывает.

nik182
Offline
Зарегистрирован: 04.05.2015

Я не в курсе что такое GSR, но старался подвести Вас к мысли о полосе частот сигнала, который Вы хотите получить от датчика. Судя по Вашему описанию, помехи лежать в очень высокой области - отдельные выбросы и достаточно поставить на выход датчика перед АЦП простейший RC фильтр с полосой среза немного выше необходимой Вам частоты для существенно улучшения ситуации с оцифровкой и дальнейшей обработкой.   

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

GSR galvanic skin resistance - сопротивление кожи. Модуль содержит как усилитель так и АЦП в отдельных микросхемах. Всунутся там некуда. Емкости не вижу, только сопротивления. Так что фильтра может и нет, а может не видно. На вход подаю стандартный постоянный сигнал и вот вам разброс (если ничего не подаю разброс еще больше). Хотя когда подчистил выбросы за пределами доверительного интервала все стало более или менее нормально. Вот еще попробую данные натравить на фурье анализ и посмотрю это белый шум или нет.

Logik
Offline
Зарегистрирован: 05.08.2014

Так на ЭКГ полоса урезана до десятков герц. Чтоб и 50гц давилось И крутизна среза приличная.. На RC такой фильтр морочливо делать. Тут изучать цифровые фильтры в полный рост. Гуглите КИХ и БИХ

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Может наводки. Рядом стоит роутер и куча чужих роутеров фиксируется, всякие телефоны итд.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ИгорьУ пишет:

А сигнал я вообще подавал стандартный

Это в перлы! (если уж говорите о стандарте, не забывайте приводить номер ГОСТ)

 

PS. У Вас АЦП? Зашунтируйте вход конденсатором.

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Как его там шунтировать на вход АЦП? Там все такое мелкое. Какой величины емкость по вашему нужна.  И при чем там RC фильтр если сигнал и так подается постоянный на вход операционного усилителя. На вход усилителя могу поставить емкость. Может так ?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну да, естественно, на первый вход после датчика. Если это вход ОУ, то на него.

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Тогда исходя из вашей логики датчиком является наша кожа. К коже прикладывается заданное напряжение. в одной точке на коже снимается потенциал (Всего три электрода). Он гуляет и отражает эмоциональное состояние пациента. Частота не более 2 Гц. Ну как модель может быть переменное сопротивление с "средней" точки которого снимают потенциал. Дальше это идет на усилитель МСР6701, дальше на 12 битное АЦП и по SPI читается ардуиной. Что еще - между модулем и электродами где-то метр не заэкранированных проводов (Так поставлялся модуль). Если предположить что на эти провода наводится помеха которую не отрезает сам усилитель то надо ставить емкость сразу перед модулем. Как рассчитать пороговую частоту фильтра RC цепочки? По памяти кажись  Т=RС . Вопрос какое брать сопротивление. Я так понимаю сопротивление кожи (что-то порядка 200 кОм).

И вот что интересно. Если провода с электродами отключить от модуля то ардуина читает одни нули, но как только подключить провода через обычный штыревой разъем то ползут какие то существенные величины (до 750 при максимально возможном значении 4092 и с таким же разбросом), при том что электроды никуда не подключены. Ну похоже на наводку на проводах.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

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

nik182
Offline
Зарегистрирован: 04.05.2015

Занимался я давно датчиком акупунктуры. Там в выносном щупе были электроды на конце и на них сразу усилитель постоянного тока, который собственно и измерял сопротивление кожи, расстояние от датчика до входа усилителя было минимальным, иначе из за высокого входного сопротивления схемы лезли жуткие наводки. Всё упаковали в корпус от фломастера. Дальше хоть метр проводов, никаких наводок. Не знаю какое у вас расстояние между электродами, но понимаю, что пробой эпидермиса напряжением не нужен. Поэтому напряжения прикладываемые к коже маленькие, сопротивления входные большие. Фильтры на входе в датчик на 100кОм и 0.1 мкф должны помочь. И минимальная длина проводов от датчика до усилителя. Идеально, если коробочкой с усилителем можно водить по коже, тем более, что напечатать на 3d принтере можно любой формы.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

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

ну и от того, не попали ли на точку акупунктуры (чакру), там оно минимальное и ведёт себя по своему...

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Это не я придумал. Это конструкторы такую схему сбацали. И видно каким то образом они компенсировали наводки. А китайцы слямзили и продают железо не говоря о методах компенсации. Думаю была предусмотрена программная компенсация для этого железа. Тут очень правильно говорилось ЕвгениемП что надо выделить помехи частотным анализом. Займусь и расскажу что получилось.  Повторюсь нам не важны абсолютные величины, нам надо фиксировать относительные изменения в очень низком частотном диапазоне до 5Гц. А с электродами проблема решена на все случаи ЕЕГ ЕКГ, ЕМГ, ИТД

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

inspiritus
Offline
Зарегистрирован: 17.12.2012

При экг не просто усилители, а еще и с компенсацией шумов за счет подключения доп проводов на браслеты рук и ног.

https://im0-tub-ru.yandex.net/i?id=63da93ff69238e064aa11052ea054413-srl&n=13

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Задача схожая. Напряжение на кожу подается 3В. Я все же думаю что конструкторы придумавшие вот это все сделали программную компенсация данных. Иначе объяснить не могу.

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

Классная идея, и главное очень простая в реализации. Тем не менее конструкторы спроектировавшие сей девайс так не поступили. А значит была иная задумка. Соф он дешевле получится чем городить лишнее железо. Пока так думаю.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Flag v ruki

nik182
Offline
Зарегистрирован: 04.05.2015

А нет мысли, что конструкторы просто рукожопы? Спектр наводок - cигнал ближайшей радиостанции. Если 5 Гц, то на входе усилителя можно ставить фильтр на 20 Гц. В сети есть калькуляторы фильтров. И провода до усилителей от датчиков должны быть экранированные! Т.е. должна быть внешняя оплетка, которая подключена к замле около усилителя и изолирована на конце датчика. Продаются. Дорогие. Но без них так и будете ловить наводки.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

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

ИгорьУ
Offline
Зарегистрирован: 24.04.2016

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

Если все это можно решить програмно, тогда вопрос будет снят. Пока вникаю в Фурье анализ. Неспроста на ардуине есть 3 (три) библиотеки с быстрым фуре анализом. Значит это кому то надо, ну не для того чтоб релюшки включать. Кто пользовался, подскажите как выделить данные которые соответствуют частотам ниже 5Гц, пжст.

SLKH
Offline
Зарегистрирован: 17.08.2015

ИгорьУ пишет:

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

Для начала экспериментнуть с дубовыми - посмотреть на результат экранирования. 

 

Цитата:
Схожу в наш магазин медтехники, посмотрю что там у них.
в магазах всякой звукотехники или электрики искать надо.  "кабель микрофонный" или "кабель экранированный"