2017-01-24 10 views
0

Я работаю над обработкой сигналов ЭКГ. Я использую базу данных аритмии MIT-BIH found here.Маркировка пиков в сигнале ЭКГ

После загрузки сигнала я правильно отметил пики R. Затем я пытался извлечь QRS-комплекс, но не смог.

Я хочу, чтобы сделать отметки на пиках, как на этой картинке:

. , , , , , , signal

Вот мой код:

clear all; 
    clc; 
    close all; 
    load ('G:\1.Thesis\data set\100\100m') 
    %% Remove base & gain 
    %%figure (1) 
    val = (val - 1024)/200;  
    ECGsignal = val(1,1:3600); 
    SAMPLES2READ = 3600;  
    time = (0:length(ECGsignal)-1)/SAMPLES2READ; 
    plot(time,ECGsignal); title('ECG Signal') 

    %% Finding Maxima or Peaks 
    figure (2) 
    [pks,locs] = findpeaks(ECGsignal); 
    plot(time,ECGsignal,time(locs),pks,'rv','MarkerFaceColor','r'); grid on 
    xlabel('Time'); ylabel('Voltage') 
    title('Find All Peaks'); legend('ECG Signal','Peaks') 

    %% Measuring Distance Between Peaks 
    %Find R peaks 
    figure (3) 
    [pks_Rwave,locs_Rwave] = findpeaks(ECGsignal,'MinPeakHeight',0.5,'MinPeakDistance',200); 
    fprintf('locs_Rwave = \n'); 
    disp (locs_Rwave) 
    pks_Rwave1 = pks_Rwave*100; 
    fprintf('pks_Rwave = \n'); 
    disp (pks_Rwave1) 
    plot(time,ECGsignal,time(locs_Rwave),pks_Rwave,'rv','MarkerFaceColor','r'); grid on 
    xlabel('Time'); ylabel('Voltage'); 
    title('Find Prominent Peaks'); 

%% Q wave  
    ECG_inverted = -ECGsignal; 
    [pks_Qwave,locs_Qwave] = findpeaks(ECG_inverted,'MinPeakHeight',0.2,'MinPeakDistance',200); 
    k = 1:length(ECGsignal); 
    figure(5) 
    hold on 
    plot(k,ECGsignal); 
    plot(locs_Qwave,ECGsignal(locs_Qwave),'rs','MarkerFaceColor','g'); 
    plot(locs_Rwave,ECGsignal(locs_Rwave),'rv','MarkerFaceColor','r'); 
    grid on 
    axis([50 400 -0.8 2]); 
    legend('ECG signal','Q-wave','R-wave','S-wave'); 
    xlabel('Samples'); ylabel('Voltage(mV)') 
    title('Q-wave , R-wave and S-wave'); 
+0

Что именно _QRS_? Не все здесь - врач или биомедицинский/электротехник ... Я думаю, что иллюстрации того, что вы хотите достичь, могут быть полезны здесь. –

+0

Я обновил вопрос с изображением, которое иллюстрирует сигнал ЭКГ и QRS. – aast

+0

Есть ли большая версия этого изображения? Я до сих пор не понимаю, что именно вы подразумеваете под «QRS complex»? Вы хотите «x» значения Q, R и S? Их значения «y»? ** Редактировать: ** Nevermind .. Наконец я увидел, что «QRS complex» - это расстояние между началом падения Q до тех пор, пока S не повысится ... –

ответ

0

Я не уверен, что я правильно вас понял, но вот один из способов, чтобы получить маркировку как на графике вы показали:

rng(41826521); 
sig = 1.6*randn(100,1); % Y-vector 
smpl_id = 1:numel(sig); % X-vector; Or you can use find(idx) instead of smpl_id(idx). 

figure(); plot(sig); grid on; hold on; grid minor; 
idx = 2 < sig;    plot(smpl_id(idx),sig(idx),'rv','MarkerFaceColor','r'); 
idx = -2.5 < sig & sig < -2; plot(smpl_id(idx),sig(idx),'rs','MarkerFaceColor','g'); 
idx = sig < -2.5;    plot(smpl_id(idx),sig(idx),'rs','MarkerFaceColor','b'); 

Это дает :

enter image description here