Фотоплетизмограф и реограф

Автор b612, 08 марта 2017 г., 12:16:02

« назад - далее »

Grey

Цитата: gnome от 13 марта 2017 г., 18:02:20
К нему есть какая - то плата готовая с выходом на компьютер.
Arduino UNO?
Ещё пример использования https://www.youtube.com/watch?v=cM_Y7dkBDSk
Двое смотрят в лужу.
один видит лужу, а второй отражающиеся в ней звёзды.

ЛУТ

Ардуино конечно готовая плата , но это просто микроконтроллер , программку придраться самому писать под свои нужды.
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

ЛУТ

Кстати - пульс это ведь следствие биения сердца , причём в пульсе многая информация теряться.
Может лучше сразу ЭКГ ?
Кардиограф на основе Arduino своими руками
Модуль RC039. «Модуль ЭКГ на базе микросхемы AD8232» для Arduino.
Ну и целая ветка форума про ЭКГ и Arduino
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

b612

Добрый день, уважаемый ЛУТ. Рад видеть ваше участие в теме !

ЭКГ показывает только работу самого сердца. ЭКГ хоть и является довольно информативным методом, но всё-таки исследование пульсовой волны в разных точках несёт больше информации о состоянии разных органов, поскольку от их состояния зависит и распределение кровотока.
Если вдруг соберётесь делать кардиограф, то не рекомендую пользовать те готовые датчики. Я недавно слепил свой кардиограф на 2 независимых отведения на ардуине с передачей через блютус. Один хороший человек даже написал приложение под андроид.
Сейчас вот от безисходности сам взялся за написание монитора под винду.
http://biorezonans.3bb.ru/blogs.php?show=my

ЛУТ

Цитата: b612 от 14 марта 2017 г., 22:40:07
Сейчас вот от безисходности сам взялся за написание монитора под винду.
Отчего-же безысходность?
Под винду (если через COM порт)проще написать чем для андроид.
Можно легко в processing написать программку http://arduino-diy.com/arduino-processing-osnovi.
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

b612

Цитата: ЛУТ от 15 марта 2017 г., 00:16:12Отчего-же безысходность?
Под винду (если через COM порт)проще написать чем для андроид.
Можно легко в processing написать программку http://arduino-diy.com/arduino-processing-osnovi.
ок спасибо за ссылки
Но ком-порт это только малая часть того, что нужно.
Нужно ещё строить движущиеся графики, менять масштабы, рисовать сетку, писать в файлы.
Вообще-то всё подъёмно только муторно. В каждой строчке по несколько новых незнакомых букв и слов.
Кто постоянно пишет сделал бы это в разы быстрее.

Когда и где ближайший большой слёт аномальщиков ?

b612

Уважаемые.
Кто-нибудь имел дело с адаптивной фильтрацией ?
Делаю программу для ЭКГ, надо фильтровать, не знаю с какой стороны к этому подходить.
Может быть кто-то ковырял. Подскажите.

UncleMike

А в чем состоит задача? Зачем нужен именно адаптивный фильтр и по каким параметрам необходима адаптация?

b612

"Адаптивный" это самое крутое слово  :)
А задача отфильтровать сигнал
Убрать всё выше 40 гц с хорошим ослаблением
Убрать всё ниже 0.1 гц начисто
Убрать 50гц начисто
и аккуратно ослабить всё ниже 0.5гц
При этом не испортив форму сигнала.

Слышал что 50гц лучше убирать аккуратненько с учетом плавания частоты и фазы, для этого и применяют адаптивные фильтры

Val

Цитата: b612 от 19 марта 2017 г., 08:29:56
Уважаемые.
Кто-нибудь имел дело с адаптивной фильтрацией ?
Делаю программу для ЭКГ, надо фильтровать, не знаю с какой стороны к этому подходить.
Может быть кто-то ковырял. Подскажите.
Лет 25 назад я помог одному к.т.н и его профессору написать алгоритм на их новый метод измерения - кусок алгоритма, по которому их "забанили". ))
То было ориентировано на ассемблер и ацп, далековато и проще от того что нужно Вам, но смысл такой - нужно сделать базу данных шумовых (или полезных) сигналов или чтобы база формировалась "на лету". Потом вычитаете шумовые сигналы и выводите оставшийся полезный сигнал в том же порядке что при поступлении на вход.
Вот как в этой проге, возможно:
http://geovers.com/base/new/content/products/Adaptive-filtration-noise-frequence.php

Ps: Все же нужна жесткая привязка к ацп.
Очевидное — это то, чего никто не видит, пока кто–нибудь не выразит его наипростейшим способом.

b612

Спасибо за ответ.
Я тут уже начитался про адаптивную и пришел к выводу, что оно мне пока рановато.
А надо простые фильтры баттерворта или чебышева
При том желательно в "готовом" виде
В виде словесного описания алгоритма, который на входе имеет
массив отсчетов и набор коэффициентов а на выходе выдаёт значение очередного профильтрованного отсчета.
Нужно три фильтра
Нижних - до 0.5
высоких - после 40
и режекторный 50 гц
PS
Пробовал в одной программе поиграться с разными
получил приемлемый результат с
bandstop Чебышев 45-999 Гц 1db ripple
хичпас Чебышев 2Гц первого порядка 1 дб на октаву
и даже без режекторного

UncleMike

Я бы не замарачивался адаптивными подходами, сделал бы неадаптивный фильтр. Могут возникнуть сложности с адаптацией - вопрос сходимости адаптивных контуров фильтра (хотя лучше в сети поискать, может быть есть готовое решение именно для данного приложения и даже программная библиотека).
А так рекурсивный БИХ-фильтр (фильтр с бесконечной импульсной харакетристикой) - как вариант.
Или я бы попробовал быстрое преобразование Фурье, взять части спектра с теми диапазонами, где необходимо подавление частот или их ослабление. С обратным преобразованием этих участков спектра во временную область и вычитанием из исходного сигнала. Сам хочу так попробовать со своей задачей, но времени пока нет. Главное, чтобы этот метод не вносил искажения сигнала (тут еще помоделировать надо).
И тут вопрос на какой платформе вы будете этот алгоритм делать, чтобы потянул вычисления.
Но проще всего будет БИХ-фильтрация

ЛУТ

Просто и доступно о фильтре нижних частот  http://chipenable.ru/index.php/programming-avr/item/162-prostoy-cifrovoy-filtr.html

Но есть ещё более простой метод - скользящие среднее, я его применял для сглаживания данных от счётчика Гейгера.
Смысл в том что берём несколько последних отсчётов-сэмплов(байтов)  например 10 ,складываем значения байтов и делим на 10, полученным числом заменяем последний байт , на следующем байте делаем так же - сумму последних 10-ти делим на 10 и тд...
Частота среза зависит от числа складываемых последних байт.
Тут проект в котором я применил подобную фильтрацию http://forum.kosmopoisk.ru/index.php?topic=6757.0

Ещё про этот метод https://habrahabr.ru/post/134375/
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

b612

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

ЛУТ

С матлэбом тоже не имел дело, писал всё в С++ builder, в моём проекте - метод скользящего среднего подошёл идеально.

Если нужно более узкие и крутые области среза частот то тут без преобразования Фурье не обойтись.
После преобразования массива отсчётов получаете массив с амплитудами частот , удаляете из массива частоты которые вам нужно , после чего обратное преобразование в массив отсчётов. Но так как вам нужно отсечь частоты ниже  0.5 Гц  ??? будет не просто , нужно что бы был хотя бы один период ( а лучше несколько) частоты что-бы преобразование сработало . Это значит надо обрабатывать массив за несколько секунд отсчётов, и будет отставание данных на мониторе от данных в реальном времени.
А вот с обрезанием частот выше 40 Гц Фурье справиться наУра  :) и можно взять массив  в 100 миллисекунд, не надо будет даже специального режекторного фильтра на 50Гц.
Как сделать преобразование Фурье в  С++ builder могу подсказать (есть опыт) а вот обратного преобразования не делал , не было нужды так как писал анализатор спектра.
Если вы увидели в этом мире красоту значит вы поняли смысл всего.