Обработка данных с сильно шумящего сенсора
- Войдите на сайт для отправки комментариев
Пт, 17/01/2020 - 13:17
Какие возможны методы обработки данных с сильно шумящего сенсора, кроме усреднения по большой выборке? Не понятно где возникает ошибка, то ли на сенсоре, то ли при оцифровке, но явно некоторые данные снимаемые ардуиной не имеют физического смысла. Возникает не имеющий смысла разброс данных даже при усреднении по большой выборке (256). Как отсеять такие данные. Какие методы апроксимации есть. Может есть готовые библиотеки. у меня эта проблема возникла при анализе ЕЕГ, ЕМГ и ЕКГ сигнала.
найдите любую вузовскую методичку на тему "Обработка экспериментальных данных". Там много разных методов борьбы как просто с шумом. так и с хаотическими наводками. В частности, по "правилу трех сигм" можно отсеивать выбросы и удалять их из серии данных
А код, думаю. напишете сами, программирование математики обычно проблем не представляет.
Из авна конфетку не сделаешь, как ни усредняй. Зря штоли мед.оборудование стОит не как модули из Китаю.
Видимо придется разбираться во всем этом. Но чет думаю, что это очень даже стандартная задача и уже есть куча библиотек
Ну да. А что уж теперь. Китайцы же тырят все равно рабочие модули. Ну не они же сами их спроектировали, в самом деле. Так что думаю дело не в модулях.
Что за сенсор, кака подключен, что меряет, скетч... Без этих деталей обсуждать нечего.
Видимо придется разбираться во всем этом. Но чет думаю, что это очень даже стандартная задача и уже есть куча библиотек
а смысл искать библиотеки, если любое усреднение или апроксимация - это не больше 10-15 строк кода?
Да и сомневаюсь я, что таких библиотек много
Сенсор подключен по SPI к ардуине на сенсоре усилитель(не вижу без лупы) и 12 битное АЦП MCP3202. А что он там еще может измерять кроме напряжения
Что за сенсор, кака подключен, что меряет, скетч... Без этих деталей обсуждать нечего.
Вот не торговать тебе на бирже!!!! Природа данных не важна - график всё содержит (с) - "любой технический аналитик"! ;)))))
Если что - шутка, конечно!
Мал золотник да дорог. Строчек может и 10, да искать и вникать - время тратить. Видимо никуда не денусь. Спасибо за подсказку.
Библиотек широкоиспользуемых просто нет... даи быть не может. Это стандартная задач, но с множеством тонкостей. Поэтому решается каждый раз заново.
На первом этапе вырабатываешь критерий "выбросов". На втором - усредняешь оставшееся. Везде нужна т.н. "априорная информация".
Если ты учился в ВУЗе, должен был это всё проходить.
Видимо придется разбираться во всем этом.
Безусловно. Так даже вопрос не стоит.
уже есть куча библиотек
Есть и что? Какой именно метод фильтрации применять и как обрабатывать сигнал зависит от миллиона причин - характера сигнала, характера шума, от того, знаете ли Вы основную функцию сигнала или не знаете и т.д. и т.п. Так что, даже для того, чтобы грамотно выбрать библиотеку и грамотно её применить Вам всё равно "придется разбираться во всем этом"
Я очень люблю такой пример: вот вам надо что-то перевезти по дороге. "Это очень даже стандартная задача и уже есть куча автомобилей". Вам надо лишь выбрать из этой кучи ... но как Вы выберете, если Вы не знаете что именно Вам нужно перевезти - подругу из салона до клуба или партию холодильников с завода на склад? Также Вы не знаете ни расстояния, ни характера и качества дороги - ничего. И как Вы будете выбирать автомобиль? Вот так и с Вашими библиотеками.
Понял, учился, но все уже давно позабыл. И да здравствует Гугль, как всегда, впрочем.
миллиона причин - характера сигнала, характера шума, от того, знаете ли Вы основную функцию сигнала или не знаете и т.д. и т.п.
Хорошо, И какой же характер шума у китайского сенсора по вашему. Я например даже не догадываюсь, вижу какие-то хаотические выбросы непонятной природы, Закономерности пока не прощупываю. Хотя бы как установить этот "характер"? А сигнал я вообще подавал стандартный
Блин! Ну вот снова снобы старички плохо помогают!
Смотри - если у тебя датчик как-то связан с движениями механической системы, то такие движения имеют неразрывную первую, а часто и вторую производные. Есть специальные фильтры для этого. Если просцес тепловой - рапределение равномерно, если .... и так далее. Исходя из этих знаний выбираешь модель, исходя из модели - критерии выбросов и способ фильтрации.
Самый простой пример: нормально распределенная случайная величина вокруг непрерывной кривой.
Определяешь среднее квадратичное отклонение по выборке. Выбросами считаешь все, что отклоняется больше чем на .... из пальца высасываем... пусть тройное значение. Выкидываешь выбросы и пересчитываешь снова, пока выбросы не кончатся. Остальное усредняешь... да хоть скользящим средним, при нормальном распределении - безразлично.
---------------
если тебе известна природа помехи, то можно сильно улучшить свои измерения, отфильтровав именно саму помеху, о чем и писал Евгений.
Спасибо, вот уже и реальный алгоритм проглядывает. По поводу сигнала, уже стандартный сигнал посылал на вход, железные контакты. Все равно шумит и выбрасывает. Может там операционный усилитель перевозбуждается. Думаю что ваш алгоритм и с этим справится.
Спасибо
как говорил Израиль Моисеевич - я их просто отбрасываю в сторону )))
Пока я тут разбираюсь в нормальном распределении... А так можна - Делаем большую выборку. Находим среднее. Устанавливаем экспериментально доверительный интервал путем подбора. Что левее или правее от среднего на доверительный интервал отбрасываем. Снова считаем среднее и вуаля. Критикуйте пжста
Пока я тут разбираюсь в нормальном распределении... А так можна - Делаем большую выборку. Находим среднее. Устанавливаем экспериментально доверительный интервал путем подбора. Что левее или правее от среднего на доверительный интервал отбрасываем. Снова считаем среднее и вуаля. Критикуйте пжста
это если данные статичные...
это если данные статичные...
То есть, надо учитывать изменения доверительного интервала. Ну понятно его можно и вычислять, когда-то это я делал. Правда это будет нагрузка на ардуину при большой выборке.
Ну это же совсем другое дело. Всем спасибо. Данные приемлимые. Можна работать
Но это все при стабильном сигнале на входе. Сейчас начну цеплять электроды к живому телу и тут попрет. Говорите надо отбрасывать сигналы которые дают существенную (какой то порог экспериментально установлю) вторую производную?
Ничего ведь не понял .... :-(
Хорошо, И какой же характер шума у китайского сенсора по вашему.
По моему, у ХЗ какого китайского датчика, включённого по ХЗ какой схеме, питаемого от ХЗ какого источника питания и находящегося в ХЗ какой (по ЭМИ) обстановке характер шума, очевидно, ХЗ какой.
Вам это помогло?
Если хотите серьёзно что-то делать, на все эти вопросы надо отвечать. Нужно не видеть "какие-то хаотические выбросы непонятной природы", а понимать их природу. Для начала хоть на спектр их разложите, поймёте хоть цветной у Вас шум или белый ... впрочем, всё о чём я говорю - это год работы, если с нуля. Вам же, как я понимаю, нужно побыстрее и Вы уже, как сами сказали, собственно, всё поняли :-)
Не факт, что распределение нормальное. Вопрос, кто будет просчитывать данные - ардуина или компьютер. Если ардуина, я бы попробовал сглаживание, поначалу самое примитивное, постепенно усложняя, можно попробовать сглаживание по Калману.
Совершенству нет предела. Я всегда готов учится и усовершенствовать модель, тем более задача очень интересная и главное актуальная. В первом приближении ее решил на уровне случайной ошибки. Дальше будет.
Условия стандартные USB компютера и ардуина UNO связаны по кабелю. Датчик запитывается от ардуины
У нас имеются действительно случайные сигналы, но возможно у датчика есть и систематические ошибки, которые не плохо бы определить и отбросить. Точность самого измерения никого не волнует, мы все равно измеряем относительные величины на ЕЕГ,ЕМГ. Вот это важно для отслеживания изменениями состояния человека.
Что будем раскладывать в ряды сигнал? Выделять характерные частоты? Потом наверно отбрасывать мусорные частоты, так? Я профан в радиоэлектронике, где это часто применяют, но с математикой справлюсь
Я даже уверен что распределение не нормальное. А вы не думаете что можна поступить в этом случае хитро. Ну во первых "доверительный интервал" задать разный слева и справа от среднего. Установить интервалы експериментально. Ну и во вторых - эти интервалы можно и рассчитать отдельно справа и слева условно отражая данные симетрично относительно среднего. Ну так в первом приближении сойдет?
Наши студенты постоянно крутят разные медицинские датчики с али с помощью ардуины. Никогда проблем у рабочего железа не было проблем с шумом. Минимального усреднения хватало. Может всё ж проблемы железа сначала убрать? Может шум от отпаеного проводника, а Вы им кардиограмму строить.
Может и железо, убрал все сопли. При усреднении по 128 макс разброс составляет 14%. На входе постоянный сигнал.
На модуле ЕКГ нет усилителя, там только АЦП и все нормально. Проблема с модулями содержащими усилители. В принципе операционные усилители могут возбуждаться, может это и есть причина разброса
На ЭКГ нет усилителя? Эк Вас колбасит то. Там без усилителей ни один ацп даже намёка на сигнал не поймает. Вот только усилители там с расчётными полосами нагрузками и большим усилением. И без шумов. Точно у Вас где то на входе Вашей схемы китаец что то припаять забыл.
Ошибся, не присмотрелся хорошо, смотрю одна микросхема на модуле. Что ж это у меня так данные колбасит на модуле GSR. А как проверить сам модуль на работоспособность. В прицепе он работает, только сильно разбрасывает.
Я не в курсе что такое GSR, но старался подвести Вас к мысли о полосе частот сигнала, который Вы хотите получить от датчика. Судя по Вашему описанию, помехи лежать в очень высокой области - отдельные выбросы и достаточно поставить на выход датчика перед АЦП простейший RC фильтр с полосой среза немного выше необходимой Вам частоты для существенно улучшения ситуации с оцифровкой и дальнейшей обработкой.
GSR galvanic skin resistance - сопротивление кожи. Модуль содержит как усилитель так и АЦП в отдельных микросхемах. Всунутся там некуда. Емкости не вижу, только сопротивления. Так что фильтра может и нет, а может не видно. На вход подаю стандартный постоянный сигнал и вот вам разброс (если ничего не подаю разброс еще больше). Хотя когда подчистил выбросы за пределами доверительного интервала все стало более или менее нормально. Вот еще попробую данные натравить на фурье анализ и посмотрю это белый шум или нет.
Так на ЭКГ полоса урезана до десятков герц. Чтоб и 50гц давилось И крутизна среза приличная.. На RC такой фильтр морочливо делать. Тут изучать цифровые фильтры в полный рост. Гуглите КИХ и БИХ
Может наводки. Рядом стоит роутер и куча чужих роутеров фиксируется, всякие телефоны итд.
А сигнал я вообще подавал стандартный
PS. У Вас АЦП? Зашунтируйте вход конденсатором.
Как его там шунтировать на вход АЦП? Там все такое мелкое. Какой величины емкость по вашему нужна. И при чем там RC фильтр если сигнал и так подается постоянный на вход операционного усилителя. На вход усилителя могу поставить емкость. Может так ?
Ну да, естественно, на первый вход после датчика. Если это вход ОУ, то на него.
Ну а по поводу величины емкости... она рассчитывается простейшим образом, но у меня нет для этого расчета исходных данных.
Тогда исходя из вашей логики датчиком является наша кожа. К коже прикладывается заданное напряжение. в одной точке на коже снимается потенциал (Всего три электрода). Он гуляет и отражает эмоциональное состояние пациента. Частота не более 2 Гц. Ну как модель может быть переменное сопротивление с "средней" точки которого снимают потенциал. Дальше это идет на усилитель МСР6701, дальше на 12 битное АЦП и по SPI читается ардуиной. Что еще - между модулем и электродами где-то метр не заэкранированных проводов (Так поставлялся модуль). Если предположить что на эти провода наводится помеха которую не отрезает сам усилитель то надо ставить емкость сразу перед модулем. Как рассчитать пороговую частоту фильтра RC цепочки? По памяти кажись Т=RС . Вопрос какое брать сопротивление. Я так понимаю сопротивление кожи (что-то порядка 200 кОм).
И вот что интересно. Если провода с электродами отключить от модуля то ардуина читает одни нули, но как только подключить провода через обычный штыревой разъем то ползут какие то существенные величины (до 750 при максимально возможном значении 4092 и с таким же разбросом), при том что электроды никуда не подключены. Ну похоже на наводку на проводах.
не похоже, а точно наводка. С такой схемой подключения вы будете погоду на Марсе считывать, а не сопротивление кожи. Но даже если это исправить сопротивление будет сильно зависеть от того как прижаты электроды и меняться будет не от эмоционального состояния а от влажности кожи. Хотя если считать что потовыделение однозначно коррелирует с эмоциональным состоянием ....
Занимался я давно датчиком акупунктуры. Там в выносном щупе были электроды на конце и на них сразу усилитель постоянного тока, который собственно и измерял сопротивление кожи, расстояние от датчика до входа усилителя было минимальным, иначе из за высокого входного сопротивления схемы лезли жуткие наводки. Всё упаковали в корпус от фломастера. Дальше хоть метр проводов, никаких наводок. Не знаю какое у вас расстояние между электродами, но понимаю, что пробой эпидермиса напряжением не нужен. Поэтому напряжения прикладываемые к коже маленькие, сопротивления входные большие. Фильтры на входе в датчик на 100кОм и 0.1 мкф должны помочь. И минимальная длина проводов от датчика до усилителя. Идеально, если коробочкой с усилителем можно водить по коже, тем более, что напечатать на 3d принтере можно любой формы.
С такой схемой подключения вы будете погоду на Марсе считывать, а не сопротивление кожи.
ну и от того, не попали ли на точку акупунктуры (чакру), там оно минимальное и ведёт себя по своему...
Это не я придумал. Это конструкторы такую схему сбацали. И видно каким то образом они компенсировали наводки. А китайцы слямзили и продают железо не говоря о методах компенсации. Думаю была предусмотрена программная компенсация для этого железа. Тут очень правильно говорилось ЕвгениемП что надо выделить помехи частотным анализом. Займусь и расскажу что получилось. Повторюсь нам не важны абсолютные величины, нам надо фиксировать относительные изменения в очень низком частотном диапазоне до 5Гц. А с электродами проблема решена на все случаи ЕЕГ ЕКГ, ЕМГ, ИТД
Так как я сейчас вижу задачу - надо самой ардуиной программно провести анализ помех перед началом измерений (помехи то разные могут быть в конкретных условиях) компенсировать, а уже потом производить измерения.
При экг не просто усилители, а еще и с компенсацией шумов за счет подключения доп проводов на браслеты рук и ног.
https://im0-tub-ru.yandex.net/i?id=63da93ff69238e064aa11052ea054413-srl&n=13
в общем случае можно взять два датчика- один измеряющий , второй опорный . Сигналы вычитать останется только полезный сигнал за вычетом шумов.
Задача схожая. Напряжение на кожу подается 3В. Я все же думаю что конструкторы придумавшие вот это все сделали программную компенсация данных. Иначе объяснить не могу.
Классная идея, и главное очень простая в реализации. Тем не менее конструкторы спроектировавшие сей девайс так не поступили. А значит была иная задумка. Соф он дешевле получится чем городить лишнее железо. Пока так думаю.
Flag v ruki
А нет мысли, что конструкторы просто рукожопы? Спектр наводок - cигнал ближайшей радиостанции. Если 5 Гц, то на входе усилителя можно ставить фильтр на 20 Гц. В сети есть калькуляторы фильтров. И провода до усилителей от датчиков должны быть экранированные! Т.е. должна быть внешняя оплетка, которая подключена к замле около усилителя и изолирована на конце датчика. Продаются. Дорогие. Но без них так и будете ловить наводки.
Очень много букф... Не все прочитал, но может поможет... Есть такой подход. Взять второй аналогичный датчик рядом с глючным и измерять им не изменяющийся показатель. В результате получишь наводку , которую вычтешь из своих непонятных данных.
Ну есть такая мысль. Но, этот девайс не для профессионального использования. Он дешевый и доступен. Относительные изменения он все равно фиксирует и ему тоже найдется применение. Выжать пользу думаю удастся, но не без труда. Относительно экранированных проводов. Вот я не видел пока мягких таких проводов. К человеку не подключишь дубовые кабели, при малейшем движении электроды отлетят. Схожу в наш магазин медтехники, посмотрю что там у них.
Если все это можно решить програмно, тогда вопрос будет снят. Пока вникаю в Фурье анализ. Неспроста на ардуине есть 3 (три) библиотеки с быстрым фуре анализом. Значит это кому то надо, ну не для того чтоб релюшки включать. Кто пользовался, подскажите как выделить данные которые соответствуют частотам ниже 5Гц, пжст.
Относительно экранированных проводов. Вот я не видел пока мягких таких проводов. К человеку не подключишь дубовые кабели, при малейшем движении электроды отлетят.