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

В основе платы для считывания ЭКГ располагается инструментальный ОУ. На рынке представлено много таких ИМС. Одни основаны на КМОП технологии ( например, INA321 ~ 170 руб), другие на биполярных транзисторах (например, AD620 – 450 руб).
При сравнении параметров ОУ по чувствительности к входному сигналу выигрывают биполярные, в то время как полевые выигрывают в цене и току потребления. Для считывания ЭКГ была выбрана INA321.
Основные технические характеристики ИОУ INA321:
1. Напряжение питания однополярное Vcc +5 V.
2. Потребляемый ток 45мкА (max).
3. Микросхема изготовлена по КМОП технологии.
4. Значение подавления синфазных помех: 95дБ.
5. Коэффициент усиления дифференциального сигнала от 5 до 500 раз, определяемый внешним резистивным делителем.
6. Уровень собственного шума: 10 uV.

В техническом описании на ИМС приводится принципиальная схема для ЭКГ. Для оцифровывания сигнала воспользуемся звуковым чипом с материнской платы ПК ALC662 (или аналогичный). Совместив принципиальные схемы двух устройств, получилась такая схема:

Рис. 1 Принципиальная электрическая схема
Так как сигнал ЭКГ не высокочастотный, то частоты оцифровывания звуковым устройством хватит с лихвой. При измерении столь малых напряжений, как ЭЭГ и ЭКГ, ОУ устанавливаются в усиление сигнала в тысячи раз. Но это усиление делается не на одном ОУ, а каскадом. Соответственно в основе платы устройства лежит INA321 и ОУ общего назначения LM358.

Рис. 2 Расположение измеряемых напряжений
Общее регулируемое усиление платы по расчетам составляет от 1200 до 3300 раз (регулировка подстроечными резисторами). Плата спроектирована таким образом, что имеет большой диапазон изменения коэффициента усиления и при минимальном значении в 1200 раз соответствует платам, с помощью которых получают сигнал ЭКГ с тела человека. Плата сделана по технологии ЛУТ. USB используется только для питания, сигнал передается через 3.5 jeck.

Рис. 3 Плата для ЭКГ. Вид сверху
Сигнал с платы после усиления поступает на звуковой чип материнской платы ПК, оцифровывается, обрабатывается драйвером и потом передается конечной программе для обработки.

Рис. 4 Точки подключения электродов
По стандартной схеме подключения электродов для считывания ЭКГ два электрода размещаются на запястье рук и фиксируются там, а третий электрод располагается на ноге для подачи на нее опорного напряжения. Электроды были сделаны из поролона с фольгированной оболочкой площадью ~ 2 см2 и смачивались солевым раствором для понижения сопротивления рогового слоя эпидермиса.

Рис. 5 Электроды для снятия сигнала ЭКГ
Для записи сигнала (звука) использовалась программа Sound Forge Pro 11. После первой пробной записи результат был такой:

Рис. 6 Первый график ЭКГ — совсем не ЭКГ
После аппаратных доработок, настройки программы и драйвера и прочих танцев с бубном получить стабильную ЭКГ все таки удалось.

Рис 7. Примеры полученных графиков ЭКГ
Сверху расположена ось времени, которая позволяет подсчитать частоту ударов в минуту. Полученные результаты подсчета подтверждают, что наблюдаемый график и есть ЭКГ – фиксируется 75 ударов в минуту с четкой периодичностью между соседними ударами в 0.8 сек. График оцифровывался в разрешении — 8bit, частота дискретизации — 8kHz. Хотя для частоты в 75Гц выборки в 8кГц многовато.
В программе Sound Forge есть возможность провести обработку записанной дорожки с помощью XFX плагинов. При определенной настройке в программе можно подавлять 50Гц наводку, после чего график становится более похожим на тот, что получается при записи ЭКГ в больнице.
Например, изначальный график:

После применения эффекта эквалайзера к графику:

Так как у нас сигнал оцифрован в звуковую дорожку, то есть возможность сохранить её и прослушать. Услышанный сигнал очень сильно напоминает звук, который слышит человек, когда слушает пульс через стетоскоп, например, при измерении давления.
При считывании сигнала нужно постоянно обеспечивать контакт всех электродов с телом. Солевой раствор для этого подходит плохо. Признаком потери контакта и, соответственно, роста сопротивления между электродом и кожей является усиление 50-55 Гц наводки на графике и пропадание ритма.

Рис. 8 Пропадание сигнала и усиление шума.
Колебания напряжения питания также очень хорошо улавливаются схемой. Шумы в питающем напряжении изменяют значение опорного напряжения, которое должно быть как можно более стабильным, потому как оно подается на тело и относительно него идет получение сигнала. Колебания опорного напряжения накладываются на снимаемый сигнал и усиливаются ОУ, отпечатываясь на получаемом графике. При переключении платы на питание об батареи шумы питающего напряжения заметно ослабевают.

Рис. 9 Шумы в питающем напряжении при питании от сети и от батареи (один график).
Также учтем, что есть собственные генерируемые шумы ИМС. Например, согласно технической документации на INA321, график её собственных шумов, хотя он намного слабее сигнала ЭКГ:

Рис. 10 График шумов напряжения INA321
Проблема в том, как отличить, что будущий планируемый график ЭЭГ это не собственные шумы ИМС или не какие-либо еще? График ЭКГ получился, но мы знаем как он должен выглядеть. А как должен выглядеть ЭЭГ сигнал? При получении сигнала ЭЭГ есть риск получить вообще не тот сигнал, и потратить кучу времени на него.

Заключение.
Получение сигнала ЭЭГ нужно в конечном итоге для создания интерфейса компьютер-мозг. Это сложная задача и занимаются ей много институтов по миру. Не знаю как у них организован процесс проведения исследований, но мне приходится работать на своих началах и делать платы буквально “на коленках”, что дает свою закалку, а потом в лабораторных условиях все так легко будет казаться делать.

Комментарии (43)


  1. mkovalevich
    15.12.2015 20:48

    Высокие частоты, которые убрали эквалайзером, это только шумы техники или характеристика самих ЭК потенциалов тоже?

    Про получение ЭЭГ будет интересно почитать.


    1. RomanSansay
      15.12.2015 20:53

      Эти частоты приходятся на частоту 50 Гц, а это частота питания сети 220 вольт. Данная наводка не связана с организмом, и её убирают. А про ЭЭГ хочу здесь услышать советы, может кто что делал.


      1. Meklon
        15.12.2015 21:00
        +1

        Как минимум рекомендую автомобильный аккумулятор как источник питания. Сразу минус наводки по сети.


        1. RomanSansay
          15.12.2015 21:04

          Если бы было так просто.


          1. Meklon
            15.12.2015 21:05
            +4

            Да знаю. Мы у крысы потенциалы снимали. Там ещё веселее. Амплитуды никакие. Но у нас готовый усилитель


  1. Meklon
    15.12.2015 20:52

    А давай про танцы с бубном по звуковой карте? Я тоже собирался её как АЦП использовать.


    1. RomanSansay
      15.12.2015 21:01

      А конкретно вопрос в чем? Используй как АЦП. Что не получается?


      1. Meklon
        15.12.2015 21:04
        +1

        Ещё не пробовал по факту. Какое предельное напряжение на line in? У меня сниматься сигнал с пьезо-пленки будет.


        1. smart
          16.12.2015 06:40

          На микрофонном входе (большинство карт) максимум порядка 0.7V, на линейном по идее должно быть побольше. Говорят, что карты обычно спокойно переживают пару-тройку вольт, больше – есть риск спалить.

          Я делал «осциллограф» на звуковой карте (чтобы не рисковать ноутбуком, брал внешнюю USB), в целом для некоторых задач полезно, но полезная полоса очень узкая. У звуковух обычно встроено автоматическое выравнивание «нуля» (bias), поэтому низкочастотные сигналы эта хрень здорово искажает. Сверху, понятно, ограничено из-за низкой частоты дискретизации (на 44kHz реально можно разглядывать сигнал до 5kHz).

          И да, ноутбук – это единственный вариант, ибо при питании от сети даже без усиления от 50Гц наводки жуткие, а если там 1000-кратное усиление, я представляю что это будет.


          1. Alexeyslav
            16.12.2015 10:21

            Для линейного входа — 0.7В RMS, это амплитудное 1В для синуса или 2В пик-пик для других сигналов. Микрофонный вход — это чувствительность 20мВ и 2мВ если поставить галочку «усиление микрофона» но это как правило бесполезно — при 24битах оцифровки количество полезного сигнала не добавляется, только растут шумы.
            От 50Гц можно избавится режекторным фильтром высокого порядка… но они все искажают сигнал, да и сам тракт звуковой карты очень далёк от идеала — очень неровная АЧХ.
            Использовать звуковую карту в качестве АЦП можно для низкочастотных сигналов, промодулировав его опорной частотой по амплитуде как это делается в УПТ с МДМ.


            1. Meklon
              16.12.2015 10:34

              У меня пьезоэлемент. Токи мизерные, но размах напряжения большой. Чем защитить? По идее просто резистор потушит без проблем, там вроде микроамперы. Что-то типа стабилитрона поставить для отсекания выше порогового? Пусть тупо сигнал в насыщение уйдёт.


              1. sergku1213
                16.12.2015 12:20

                Трансформатор? Плюс будет в том, что во сколько раз напряжение снизим, во столько станет больше ток.


                1. Meklon
                  16.12.2015 12:26

                  Эмм… Как-то глобально. Мне бы тупо отсечь.


                  1. sergku1213
                    16.12.2015 12:48

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


                    1. Meklon
                      16.12.2015 12:53

                      ТАм все просто. Есть регулятор чувствительности. Если ушли в отсечение верхней части — снизить усиление. Главное, что не спалим ничего. На всякий случай можно еще у DIHALT уточнить.


                      1. sergku1213
                        16.12.2015 13:13

                        Видите ли, если Вас интересует изменение уровня выходного сигнала во всем диапазоне — то трансформатор нужен, если же Вы подключите пару резистор-стабилитрон, то Выше определённого напряжения линейность передаточной характеристики будет меняться. Причём я не уверен, что на очень малых токах (как от пьезодатчика) стабилитрон будет нормально работать. Вам, вероятно, придётся пользоваться буферным усилителем? Тогда его можно сделать нелинейным. Видел схемы логарифмических усилителей на ОУ. А если волнует сугубо наличие/отсутствие сигнала — то оптопара (оптрон)?


                  1. smart
                    21.12.2015 21:15

                    Можно после делителя напряжения поставить встречно направленные диоды (пример тут) – при превышении напряжения открытия они будут открываться и «сбрасывать» излишки накоротко. Если нужно ограничить большим напряжением, можно несколько диодов последовательно.


                    1. Meklon
                      22.12.2015 08:05

                      Спасибо)


              1. Alexeyslav
                16.12.2015 14:26

                Усилитель-повторитель нужен на полевиках, это как бы само собой.
                А защита… два стабилитрона(в обе стороны) включенные параметрическим стабилизатором, т.е. на них должно поддерживаться напряжение порога ограничения и диодами подключить ко входу.
                Напрямую стабилитронами гасить сигнал НЕ СТОИТ, у них характеристика не такая уж крутая и они начинают проводить ваши микроамперы задолго до порогового напряжения, учитывая что у вас токи и так мизерные — стабилитрон будет сильно искажать напряжение на входе задолго до порога. Я на эти грабли уже наступил.
                А так идея очень простая — пока напряжение меньше порога — диод закрыт и имеет очень большое сопротивление(Гигаомы даже для 1N4148) не влияя на измеряемое напряжение. Как только напряжение перевалит за напряжение стабилитрона, диод потихоньку откроется и по меньшей мере на Uст+0.5В будет уже полностью открыт. Смотря на выходное сопротивление пьезоэлемента, ток с него можно и не ограничивать.
                Но вообще надо учесть что такое ограничение скажется на самом пьезоэлементе обраткой… как бы это не повлияло на сам эксперимент.


            1. smart
              21.12.2015 21:42

              Промодулировать НЧ сигнал – интересная идея, но разве это поможет обмануть алгоритмы bias adjust, которые все портят? Насколько я понимаю, они тупо смотрят «накопленный» средний уровень и сводят его к нулю – если они так делают на чистом НЧ-сигнале, то добавление ВЧ средний уровень не изменит. Но попробовать можно.


              1. Alexeyslav
                21.12.2015 23:10
                +1

                Конечно не изменит. В этом вся соль — НЧ составляющая передаётся в амплитуде модулированного сигнала, а не в нём самом, а на амплитуду смещение ноля не влияет.


                1. smart
                  22.12.2015 02:36

                  Ах, в этом смысле! Да, амплитудная модуляция – это логично. Спасибо за идею.


          1. RomanSansay
            22.12.2015 22:33

            При частоте в 44 кГц частота Найквиста 22 кГц по теории. Не знаю как на практике.
            Про напряжение на входе микрофона размышления были такие:
            У нас выставляется в драйвере опорное напряжение на микрофон 2.5 \ 3.2 \ 4.2 В. Относительно этого напряжения и происходят колебания в плюс и в минус. Я выставлял 2.5 вольт на звуке, на устройстве своем тоже 2.5 вольт. А размах у меня шел rail-to-rail и ограничивался питающим напряжением. У второго усилителя до +5 вольт на выходе по идее должно было быть. Я предполагал звуковой чип должен оцифровывать диапазон от 0 до 5 вольт и давал ему этот диапазон. Может я еще чего не понимаю, но со звуком ничего не случилось, возможно потому, что мощность сигнала слабая.


            1. Alexeyslav
              23.12.2015 09:36

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


              1. RomanSansay
                23.12.2015 20:09

                1. Из датащита: Software selectable 2.5 \ 3.2 \ 4.2 VREFOUT as bias voltage for analog input.
                2. Programmable +10\+20\+30 dB boost gain for analog microphone. Вот это выбирается в драйвере звукового уст-ва точно. Так предполагаю они взаимосвязаны.

                Также посчитал, что период удара сердца на графике составляет 1\12 секунды. То есть частота ударов сердца, если их соединить, составит 12 Гц. На частоте 10 Гц у АЦП усиление составляет -3dB. Если перевести в разы, то сигнал на этой частоте умножается на 0.78. То есть при входящем напряжении в 1 вольт у нас запишется амплитуда 0.78 вольт, что считаю не критичным.

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


                1. Alexeyslav
                  23.12.2015 20:32

                  Для ЭКГ нижний частотный диапазон вроде 0.4Гц или нет?
                  Какая-то не очень стандартная звуковая карта, обычно напряжение питания микрофона не выбирается никак, и предназначен этот BIAS только для питания микрофона, на АЦП подаётся сигнал без этого смещения за счет конденсатора отсекающего постоянную составляющую. Усиление 10...20...30дБ это уже после отсечения постоянной составляющей и до подачи на АЦП. И еще, кстати, сигнал проходит аттенюатор который может понижать чувствительность микрофона.


  1. tzlom
    15.12.2015 21:23

    Фильтры из схемы можно убрать или это принципиально для функционирования? Для ЭЭГ имеет смысл брать диапазон по-выше, например на не очень хорошем усилителе я беру 0.5-45 Гц, НО это уже цифровой фильтр. Лично я за то чтобы сигнал шёл как можно менее фильтрованным — разные алгоритмы требуют разных полос, фильтрануть всегда можно и потом.
    Для теста предлагаю нулевую точку на лоб (под самую кромку волос) а электроды на Cz и Pz, после этого пишем 2 записи — просто сидим смотрим в монитор и сидим с закрытыми глазами расслабившись. Дальше давим 50Гц и полосу типо того что я написал (хотя возможны варианты, возможно даже в вашей полосе получится). На отдыхе будет виден веретёнообразный сигнал называемый альфа-ритм, частота 10-12 Гц. Для успеха нужно точно снижать сопротивление с кожей, протирайте спиртом, крутой раствор соли помогает, но лучше не алюминий а медь (серебро, золото, Ag/Ag-Cl но добыть их сложнее, медяха пойдёт но будет портиться солью), можете попробовать использовать в роли электрода туго свёрнутую ватку пропитанную солевым раствором.
    И как верно заметил Meklon — питайтесь от батареи (и без воткнутого Ethernet), иначе там будет одна наводка.
    Если есть вопросы или запишете сигнал — скиньте пожалуйста, интересно что можно получить на такой схеме :)


    1. Meklon
      15.12.2015 22:25

      И придется ноутбук использовать для приема. Иначе по USB-шине прилетит.


    1. Meklon
      15.12.2015 22:26
      +1

      Вспомнилось:
      image


      1. noonv
        16.12.2015 13:26

        А шапочка для крысы из поликапролактона сделана?


        1. Meklon
          16.12.2015 13:33

          Ага. Я про это и писал.


  1. AlexanderG
    15.12.2015 22:20

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


  1. jaiprakash
    16.12.2015 09:11

    OpenEEG
    У них сделана гальваническая развязка от сети.


  1. aitras
    16.12.2015 09:18
    +2

    Третий конец подстроечников хорошо бы подключить к средним выводам.
    image

    Допустим, нам надо сделать переменное сопротивление. Выводов нам надо два, а у девайса их три. Вроде бы напрашивается очевидная вещь — не использовать один крайний вывод, а пользоваться только средним и вторым крайним. Плохая идея! Почему? Да просто в момент движения по полоске подвижный контакт может подпрыгивать, подрагивать и всячески терять контакт с поверхностью. При этом сопротивление нашего переменного резистора становится под бесконечность, вызывая помехи при настройке, искрение и выгорание графитовой дорожки резистора, вывод настраимого девайса из допустимого режима настройки, что может быть фатально.
    Решение? Соединить крайний вывод с средним. В этом случае, худшее что ждет девайс — кратковременное появление максимального сопротивления, но не обрыв. (С)


    1. KOLANICH
      16.12.2015 12:00

      Промахнулся немного постом, но пофиг.
      есть такой проект https://github.com/OpenBCI, они тоже типа разрабатывают open hardware для снятия eeg


      1. RomanSansay
        16.12.2015 20:04

        Кармы не хватило в другой пост.


    1. RomanSansay
      16.12.2015 20:10

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


      1. aitras
        16.12.2015 20:45

        Ну и что? Все равно есть вероятность обрыва среднего контакта.


  1. ignat99
    16.12.2015 15:03
    +2

    Есть готовые системы:

    http://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG-PA/open-source-hardware
    http://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/open-source-hardware
    http://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/open-source-hardware

    Всё вменсте около 40 евро стоит. Сделано хорошими специалистами с качественной аналоговой схемой. Которая работает лучше чем многие китайские поделки (которые используют АЦП с большим количеством битов в отсчёте но в итоге получают сигнал гораздо хуже).

    Кстати, по ссылкам есть вся документация на железо (OSH — open-source-hardware), можно просто взять и форкнуть проект платы.


    1. RomanSansay
      16.12.2015 20:38

      Огромное спасибо, то, что долго искал и не мог найти


  1. wormball
    20.12.2015 15:07

    Очень познавательная статья, надеюсь, когда-нибудь дойдут руки до того, чтобы ею воспользоваться. Но я вас умоляю — никогда не растягивайте рисунки (да и фотографии тоже) в растровом графическом редакторе! Во-первых, это некрасиво, во-вторых, хабр сам растягивает, когда надо, в крайнем случае можно размер в ХТМЛ прописать. И рисунки лучше в ПНГ выкладывать.


    1. RomanSansay
      20.12.2015 22:28

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


      1. wormball
        21.12.2015 00:20

        Ну вот, например, здесь не растянул: geektimes.ru/post/267986 И в моих статьях не растягивал. И вообще я не помню, чтобы кто-то на такое жаловался. Посему я сомневаюсь, что это хабр виноват.