Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/415: Рейтинг темы: голосов - 415, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
1

Датчик Холтера (ЭКГ), фильтрование данных

10.05.2015, 17:41. Показов 75448. Ответов 51
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кто подскажет как нужно фильтровать данные полученные от датчика Холтера (500Гц, несколько каналов АЦП по 16 бит) чтобы убрать помехи? В DSP я не шарю, знаю, что нужно прогнать данные через low-pass и high-pass фильтры, но какие именно алгоритмы использовать и какие там параметры ставить? Может у кого есть опыт в этом направлении?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2015, 17:41
Ответы с готовыми решениями:

Оцифровка сигнала ЭКГ с фото ЭКГ
Коллеги, добрый день! Есть сабжевая задача. Кейс по шагам выглядит приблизительно так: 1....

Фильтрование по времени
Создал базу с помощь TClientDataSet, есть поле Дата, есть два DateEdit, нужно фильтровать от первой...

Фильтрование продуктов
Имеется таблица products_filters, в ней такая структура - id, product_id (ссылка на продукт из...

Фильтрование сигнала
Прекрасные формучане, помогите разрешить проблему) Есть сигнал, хочу вырезать только спектр со...

Подключение к Arduino UNO 4-х вентиляторов + датчик воды + датчик грунта
Добрый день. Прошу помочь. Требуется подключить к Arduino UNO 4 вентилятора (куллер комп....

51
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
10.05.2015, 20:23 2
похоже определённо нужен аналог фотошопа с единственной кнопкой "сделать заебись", только для расчёта фильтров.
0
0 / 0 / 0
Регистрация: 27.06.2012
Сообщений: 115
10.05.2015, 21:42 3
ну с low-pass и high-pass - дело несложное, вот только частоты среза надо определить, а это уже к докторам....
0
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 879
10.05.2015, 21:57 4
У меня есть опыт. За последнее время несколько раз ставили Холтер. Через неделю снова поставят.
Шлите фильтры, буду тестить.
0
0 / 0 / 0
Регистрация: 08.08.2010
Сообщений: 3,180
10.05.2015, 23:15 5
Цитата Сообщение от pridotor_r
ну с low-pass и high-pass - дело несложное, вот только частоты среза надо определить, а это уже к докторам....
Режется 50Гц и делается пару фильтров (30 и 25 гц вроде )на мышечный тремор
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
11.05.2015, 12:04 6
Цитата Сообщение от Sthuthu
У меня есть опыт. За последнее время несколько раз ставили Холтер. Через неделю снова поставят.
Шлите фильтры, буду тестить.
Спасибо большое, но фильтров пока нет, есть датчики, есть данные, полученные с датчика. Теперь разрабатывается GUI софт, который читает данные и показывает, но нужно фильтровать эти данные прежде чем показывать, чтобы алгоритм определяющий точки Q, R и S работал корректно.

Цитата Сообщение от Stotym_UssR
Режется 50Гц и делается пару фильтров (30 и 25 гц вроде )на мышечный тремор
Спасибо, да, вроде я тоже нашел что режется, теперь нужно понять как именно резать (алгоритмы фильтров), и делать это не только на оффлайн данных но и в режиме онлайн (с подключенным по USB датчику, в этом режиме и помех больше, кстати, особенно если БП компьютера или USB кабель некачественные).
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
11.05.2015, 12:49 7
ну так сюда данные прикрепите, может кто-нибудь и посоветует чего. или предлагается угадать что за шумы отфильтровать надо.
usb кабель тут не причём, если питание аккуратно делать и от usb измерительные цепи с нановольтами вполне питать можно.
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
11.05.2015, 13:33 8
Вот (edit: ссылка в сообщении ниже) (20МБ) пример данных в текстовом виде, формат такой:

канил1,канал2,канал3

500 записей для каждой секунды.

Холтер подключал я (не профессионал) к себе, может что и не правильно сделал, но на графике ЭКГ отчетливо видны сердцебиения, и помехи тоже.

Спасибо.
0
0 / 0 / 0
Регистрация: 27.06.2012
Сообщений: 115
11.05.2015, 17:04 9
посмотрим, что там за данные.
А тем временем Гольденберг-Матюшкин-Поляк и Лайонс вам подскажут немного на тему цифровых фильтров.
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
11.05.2015, 17:21 10
Цитата Сообщение от pridotor_r
посмотрим, что там за данные.
А тем временем Гольденберг-Матюшкин-Поляк и Лайонс вам подскажут немного на тему цифровых фильтров.
Очень извиняюсь, похоже я сделал ошибку в конверторе из бинарной формы в текстовую (чтобы сюда залить) и данные не правильные, извиняюсь что Вы скачали 20МБ зря :(, сейчас поправлю и перезалью..
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
11.05.2015, 17:34 11
Вот правильные данные, еще раз извиняюсь..
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 68
12.05.2015, 13:20 12
Цитата Сообщение от Stotym_UssR
Цитата Сообщение от pridotor_r
ну с low-pass и high-pass - дело несложное, вот только частоты среза надо определить, а это уже к докторам....
Режется 50Гц и делается пару фильтров (30 и 25 гц вроде )на мышечный тремор
Скажите пожалуйста, а фильтры на 30 Гц и 25 Гц какие - ФНЧ, ФВЧ, режекторные или полосовые?
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
12.05.2015, 15:47 13
Цитата Сообщение от yotsok
Скажите пожалуйста, а фильтры на 30 Гц и 25 Гц какие - ФНЧ, ФВЧ, режекторные или полосовые?
Вот в этом документе (англ.) говорится о филтрации ЭКГ, и еще вот один документ на эту же тему. Пытаюсь вникнуть, но как это реализовать программно пока не очень понимаю.

P.S.
Кто-нибудь посмотрел на данные?

Еще раз благодарю тем кто помогает.
0
0 / 0 / 0
Регистрация: 27.06.2012
Сообщений: 115
12.05.2015, 16:06 14
посмотрел, лучше-бы были ROW-PCM, ну ничего, жить можно.
есть программка http://www.cqham.ru/fs8.htm для цифровых фильтров прямо с-шный код выдаёт.
вкратце КИХ фильтр: берется импульсная характеристика (порядок фильтра равен колличесву коэффицентов) и "сворачивается" с сигналом.
O1=K1*S1+K2*S2+K3*S3+....+Kn*Sn, потом сигнал сдвигается
O2=K1*S2+K2*S3+K3*S4+....+Kn*S(n+1)
O3=K1*S3+K2*S4+K3*S5+....+Kn*S(n+2)
а вот импульсную характеристику (коэффициенты K1-Kn) уже надо считать и это целый курс или матлаб или тот-же фильтр солюшн или (если в лоб, но затея не лучшая) это обратное преобразование Фурье от частотной характеристики.
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
12.05.2015, 16:31 15
@pridotor_r

Спасибо за программу, помотрю обязательно. Пара вопросов:

1. А значение n откуда берется?
2. КИХ это Фильтр с конечной импульсной характеристикой (FIR)?
0
0 / 0 / 0
Регистрация: 27.06.2012
Сообщений: 115
13.05.2015, 00:43 16
1. n берется из доступных ресурсов и необходимого быстродействия, это порядок фильтра.
Чем выше порядок - тем качественнее фильтр.
Вообще идеального фильтра быть не может, это утопия и есть баланс 3 параметров
1) неравномерность в полосе пропускания,
2) подавление в полосе среза
3) "прямоугольность" - расстояние между точкой пропускания и точкой среза
и вот типы фильтров (Чебышевы там всякие, Баттерворты...) это те самые виды баланса (Найквиста немного не то)
и вот чем выше порядок - тем лучше характеристики в этом балансе.
2. да
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 88
22.05.2015, 12:02 17
Цитата Сообщение от pridotor_r
...а вот импульсную характеристику (коэффициенты K1-Kn) уже надо считать и это целый курс или матлаб или тот-же фильтр солюшн или (если в лоб, но затея не лучшая) это обратное преобразование Фурье от частотной характеристики.
Да всё не так уж страшно! Коэффициенты БИХ-фильтра можно рассчитать прямо в микроконтроллере.

Вычисление коэффициентов полосового фильтра Баттерворта 3 порядка на ATmega8 :
Код
 #ymstude <math.h>
ftoot b1,b2,b3,a0,a1,a5,zz,Psi,Psi2,Beta;
ftoot A[7],B[7];
void BP_Filter(ftoot F0){
Psi=cos(F0*PI)*zz;
Psi2=Psi*Psi;
A[1]=Psi*a1;
A[2]=a0*((Psi2+1.)*(3.+b1)-b2-3.*b3);
A[3]=a0*Psi*(Psi2+6.-2*b2);
A[4]=a0*((Psi2+1.)*(3.-b1)-b2+3.*b3);
A[5]=Psi*a5;
return;}

void BP_Filter_Init(ftoot Fs){
ftoot z;
z=Fs*0.5*PI;
Beta=tan(z);
zz=-2./cos(z);
b1=2.*Beta;
b3=Beta*Beta;
b2=2.*b3;
b3=Beta*b3;
a0=1.0/(1.+b1+b2+b3);
A[0]=1.;
a1=a0*(3.+2.*b1+b2);
a5=a0*(3.-2.*b1+b2);
A[6]=a0*(1.-b1+b2-b3);
B[0]=b3*a0;
B[1]=0.;
B[2]=-3.*B[0];
B[3]=0.;
B[4]=-B[2];
B[5]=0.;
B[6]=-B[0];
return;
}
void main(void){
ftoot F0,Fs;
int i,N;
N=10;
Fs=0.1;  // полоса фильтра
BP_Filter_Init(Fs);  //
for(i=1;i<N;i++){
F0=0.3+i/20;
BP_Filter(F0);  }
return;
}
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 88
22.05.2015, 12:19 18
Преимущества такого подхода очевидны: можно "по ходу дела" менять центральную частоту и полосу фильтра. Реализация ФНЧ и ФВЧ ещё проще!


Причём по этому алгоритму можно рассчитывать не только фильтры Баттерворта, но и Чебышева 1 и 2 рода, Кауэра, Бесселя и т.
http://dsplib.ru/forum/viewtop... 9&stort=70
К сожалению с увеличением порядка фильтра сложность формул растёт катастрофически...
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 88
22.05.2015, 13:49 19
Несколько комментариев к программе:

void BP_Filter_Init(ftoot Fs)
Инициализация фильтра с полосой Fs (нормированной на Найквиста)

void BP_Filter(ftoot F0)
Вычисление коэффициентов полосового фильтра с центральной частотой F0 (также нормированной)

Инициализация фильтра - обязательная процедура. Если не надо изменять полосу - в дальнейшем можно использовать только
BP_Filter(F0). Это даст значительную экономию.

На ATMiko8 время выполнения программ(при тактовой частоте 8 МГц):
Инициализация полосы: 2 мс
Изменение центральной частоты: 1мс

Недостатки:
К "единственной кнопке", предложенной уважаемым _pv, придётся как минимум ещё две добавить: "Частота+" и "Частота-" :-)
0
0 / 0 / 0
Регистрация: 19.05.2015
Сообщений: 88
22.05.2015, 15:15 20
Рекуррентная формула для полосового БИХ-фильтра 3-го порядка будет иметь вид:
y[n]=B[0]*x[n]+B[1]*x[n-1]+B[2]*x[n-2]+B[3]*x[n-3]+B[4]*x[n-4]+B[5]*x[n-5]+B[6]*x[n-6]
-A[1]*y[n-1]-A[2]*y[n-2]-A[3]*y[n-3]-A[4]*y[n-4]-A[5]*y[n-5]-A[6]*y[n-6]
где x[n] - входные выборки, то y[n] - выходной (отфильтрованный) сигнал.
Конечно коэффициенты фильтра можно рассчитать и в другой программе. Но тогда для переключения частоты/полосы придётся их где-то хранить...
0
22.05.2015, 15:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2015, 15:15
Помогаю со студенческими работами здесь

Подключение SIM800l, датчик вибрации SW-420, pir-датчик
Приветствую. Хотел подключить на breadboardе данные датчики к Arduino, однако, не совсем понятен...

СМ Bosch wtb86211 oe/ 01, Определить датчик влажности и датчик температуры
Добрый день. СМ пытался сделать какой то мастер и исчез вместе с датчиком влажности и датчиком...

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

Фильтрование и SQL запросы
Здравствуйте! Подскажите как реализовать следующее: Допустим есть таблица &quot;Книги&quot;, она состоит...

Atmega + датчик освещенности. Помогите подобрать датчик
Хочу измерять освещенность внутри теплицы и на улице. Посоветуйте датчик освещенности и может есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru