Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.70/27: Рейтинг темы: голосов - 27, средняя оценка - 4.70
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
1

Обработка сигнала экг

27.09.2014, 19:09. Просмотров 5273. Ответов 24
Метки нет (Все метки)

как обработать этот сигнал?
написал код что-бы прочитать сам файл
;
Matlab M
1
2
FID = fopen('verew','r');  
A = fread(FID);
тут в принципе всё понятно

как построить графики, если частота дискретизации 130 Гц?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2014, 19:09
Ответы с готовыми решениями:

Анализ сигнала ЭКГ в Matlab
Доброго времени суток, друзья! На данный момент я пытаюсь написать программу для анализа одного...

Обработка ЭКГ
Добрый день, у меня возник такой вопрос: как демодулировать сигнал ЭКГ(частотной модуляцией),...

Обработка сигнала
Вот собственно задания. V=1 1. Ввести функцию f(t) = sin(Vt) + cos(10Vt)/V. 2. Построить...

обработка сигнала
Здравствуйте!помогите решить одну задачу. Дан сигнал(любой).Для него нужно определить мат...

Как можно дать характеристики графикам [цифровая обработка сигнала]
1)ФЧХ 2)Переходная характеристика 3)Импульсная характеристика Просто описать их можно...

24
S_el
2293 / 1726 / 363
Регистрация: 15.12.2013
Сообщений: 6,941
27.09.2014, 20:17 2
Цитата Сообщение от Dveans Посмотреть сообщение
как построить графики, если частота дискретизации 130 Гц?
Также как и при других частотах дискретизации.Сформулируйте вопрос конкретнее.
1
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
27.09.2014, 20:31  [ТС] 3
S_el, мы записывали результаты экг в файл и нам нужно его считать и построить графики того, что было на экране прибора
0
S_el
2293 / 1726 / 363
Регистрация: 15.12.2013
Сообщений: 6,941
27.09.2014, 20:35 4
Dveans, посмотрите тему:
Вейвлет анализ электрокардиограмм
там тоже нужно было построить ЭКГ по данным из файла.
1
27.09.2014, 20:35
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
27.09.2014, 20:41  [ТС] 5
S_el, спасибо)
0
Зосима
5025 / 3377 / 336
Регистрация: 02.04.2012
Сообщений: 6,305
Записей в блоге: 16
Завершенные тесты: 1
28.09.2014, 17:54 6
Лучший ответ Сообщение было отмечено Dveans как решение

Решение

Цитата Сообщение от Dveans Посмотреть сообщение
как построить графики, если частота дискретизации 130 Гц?
это информация, чтобы правильно составить массив времени, следи за руками
Matlab M
1
2
3
4
5
6
7
8
FID = fopen('verew','r');  
A = fread(FID);
fd = 130; % частота дискретизации
td = 1/fd; % период дискретизации
t = 0:dt:(length(A)-1)*dt; % массив времени
plot(t, A)
xlabel('t, c')
fclose all
1
RefSol
502 / 246 / 74
Регистрация: 31.10.2010
Сообщений: 735
30.09.2014, 16:17 7
Цитата Сообщение от Зосима Посмотреть сообщение
Matlab M
1
td = 1/fd; % период дискретизации
В четвёртой строке (расчёт временного шага) ошибка вместо dt написано td.
2
Зосима
30.09.2014, 17:16
  #8

Не по теме:

да, прошляпил :pardon:

0
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 11:01  [ТС] 9
Зосима, RefSol, чего такое получается, а перед этим на графике был синий прямоугольник
0
Миниатюры
Обработка сигнала экг  
Зосима
5025 / 3377 / 336
Регистрация: 02.04.2012
Сообщений: 6,305
Записей в блоге: 16
Завершенные тесты: 1
02.10.2014, 11:08 10
Dveans, ты бы файл с данными выложил (в архиве)
1
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 11:13  [ТС] 11
Зосима, вот он
0
Вложения
Тип файла: zip verew.zip (42.6 Кб, 86 просмотров)
RefSol
502 / 246 / 74
Регистрация: 31.10.2010
Сообщений: 735
02.10.2014, 11:20 12
Цитата Сообщение от Зосима Посмотреть сообщение
Dveans, ты бы файл с данными выложил (в архиве)
,
или по крайней мере посмотрел, какого вида массив
у тебя формируется в результате операций (это можно сделать в окне Workspace)
там отображается тип данных (например: double, int и др.), размерность массива (например: 2x100 - двухмерный, 3x3X50 - трёхмерный, одномерные обычно имеют две размерности одна из которых единица) м max min значения в массиве.
Matlab M
1
2
FID = fopen('verew','r'); 
A = fread(FID);

Вобще все данные в MatLab есть массивы, от сюда название Matrix Laboratory (матричная лаборатория).
Так же при помощи окна Workspace можно построить графики выбрав из выпадающего списка (сверху в этом же окне) подходящий тип графика для соответствующих данных.
1
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 11:24  [ТС] 13
RefSol, нам говорили, что тип данных должен быть int16
0
RefSol
502 / 246 / 74
Регистрация: 31.10.2010
Сообщений: 735
02.10.2014, 11:25 14
Данные в бинарном виде, MatLab не может их корректно прочесть, т.к. не знает формат данных (float, double, long double или int8, int16, int32, int64) т.е. не знает сколько байт на число и какая форма записи.
Необходимо узнать формат данных (там где ты получил данные) или провести эксперимент по определению формата данных.
1
Зосима
5025 / 3377 / 336
Регистрация: 02.04.2012
Сообщений: 6,305
Записей в блоге: 16
Завершенные тесты: 1
02.10.2014, 11:28 15
Dveans, гляди, похоже на правду?
Matlab M
1
2
3
4
5
6
7
8
9
10
clear, clc
 
FID = fopen('verew','r');  
A = fread(FID,'int16');
fd = 130; % частота дискретизации
dt = 1/fd; % период дискретизации
t = 0:dt:(length(A)-1)*dt; % массив времени
plot(t(1:100), A(1:100)) % первые 100 точек
xlabel('t, c')
fclose all
Обработка сигнала экг
1
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 11:33  [ТС] 16
RefSol, "Частота дискретизации сигналов равна 130.51 Гц в каждом канале , формат данных int16 . В бинарном файле отсчеты отведений расположены по строкам. Каждая строка соответствует отдельному отводу ; сигналы отводов расположены в полученной матрице в следующем порядке: ECG I , ECG II , ECG III , ECG AVR , ECG AVL , ECG AVF , ECG V , SpO2 , RESP"
это из задания

Добавлено через 4 минуты
Зосима, вроде бы похоже, а каким образом должно получится 9 графиков? ECG I , ECG II , ECG III , ECG AVR , ECG AVL , ECG AVF , ECG V , SpO2 , RESP
0
RefSol
502 / 246 / 74
Регистрация: 31.10.2010
Сообщений: 735
02.10.2014, 11:41 17
Тогда укажи формат в команде
A = fread(fileID, sizeA, precision, skip, machineformat)

'int16'

A = fread(fileID, sizeA, precision, skip, machineformat)

полное описание команды fread можно получить по F1
размер массива = (размер файла байт)/(размер единицы данных)
размер массива = 109386/4 = 27346,5 (судя по тому, что нацело не делится либо фактический формат другой, либо файл содержит кроме самих данных ещё какую-то информацию, либо файл оборван, либо комбинации этих причин).
Укажи размер с запасом 27347 потом отбрось последний элемент (например, сделай его равным предпоследнему).

Добавлено через 7 минут
Укажи размер данных, получишь размерность массива в соответствии с числом каналов

Matlab M
1
2
3
4
5
6
7
8
9
10
clear, clc
 
FID = fopen('verew','r');  
A = fread(FID, [9 3038], 'int16');
fd = 130; % частота дискретизации
dt = 1/fd; % период дискретизации
t = 0:dt:(length(A)-1)*dt; % массив времени
plot(t(1:100), A(1:100)) % первые 100 точек
xlabel('t, c')
fclose all
1
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 11:48  [ТС] 18
RefSol, теперь нужно subplot использовать или оно должно само построить?
0
Зосима
5025 / 3377 / 336
Регистрация: 02.04.2012
Сообщений: 6,305
Записей в блоге: 16
Завершенные тесты: 1
02.10.2014, 12:17 19
Сделал неоптимально, но наглядно можно все загнать в цикл и сделать подписи
(правда 9 графиков не очень хорошо смотрятся вместе)
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
clear, clc
 
FID = fopen('verew','r');  
A = fread(FID,'int16');
fclose(FID);
 
N = length(A)/9;
 
fd = 130; % частота дискретизации
dt = 1/fd; % период дискретизации
t = 0:dt:(N-1)*dt; % массив времени
 
ECG_I = A(1:N);
ECG_II = A(N+1:2*N); 
ECG_III = A(2*N+1:3*N);
ECG_AVR = A(3*N+1:4*N);
ECG_AVL = A(4*N+1:5*N);
ECG_AVF = A(5*N+1:6*N);
ECG_V = A(6*N+1:7*N);
SpO2 = A(7*N+1:8*N);
RESP = A(8*N+1:9*N);
 
subplot(911),plot(t, ECG_I)
%xlabel('t, c')
subplot(912),plot(t, ECG_II)
%xlabel('t, c')
subplot(913),plot(t, ECG_III)
%xlabel('t, c')
subplot(914),plot(t, ECG_AVR)
%xlabel('t, c')
subplot(915),plot(t, ECG_AVL)
%xlabel('t, c')
subplot(916),plot(t, ECG_AVF)
%xlabel('t, c')
subplot(917),plot(t, ECG_V)
%xlabel('t, c')
subplot(918),plot(t, SpO2)
%xlabel('t, c')
subplot(919),plot(t, RESP)
xlabel('t, c')
Обработка сигнала экг
0
Dveans
1 / 1 / 0
Регистрация: 31.12.2012
Сообщений: 76
02.10.2014, 12:25  [ТС] 20
Зосима, а можете объяснить
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
N = length(A)/9;
 
 
t = 0:dt:(N-1)*dt; % массив времени
 
ECG_I = A(1:N);
ECG_II = A(N+1:2*N); 
ECG_III = A(2*N+1:3*N);
ECG_AVR = A(3*N+1:4*N);
ECG_AVL = A(4*N+1:5*N);
ECG_AVF = A(5*N+1:6*N);
ECG_V = A(6*N+1:7*N);
SpO2 = A(7*N+1:8*N);
RESP = A(8*N+1:9*N);
эту часть, то есть как Вы поняли, что надо именно так сделать , а то разобраться хочется и лабу дальше без помощи делать
0
02.10.2014, 12:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2014, 12:25

Обработка сигнала. Построить частотные характеристики для всех 4 отведений
Здравствуйте! Дан сигнал ЭЭГ. Нужно построить частотные характеристики для всех 4 отведений, затем...

ЭКГ данные
У меня выпускная работа заключается в анализе данных ЭКГ - и это планируется сделать в MatLab ибо в...

Моделирование ЭКГ зубцов
Здравствуйте! Нужна помощь в моделировании ЭКГ зубцов при помощи Gaussian Mesa Function и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru