2017-01-24 3 views
0

Je travaille sur le traitement du signal ECG. J'utilise la base de données MIT-BIH Arythmie found here. Après le chargement du signal, j'ai marqué les crêtes R correctement. Ensuite, j'essayais d'extraire le complexe QRS, mais je ne pouvais pas.Marquage des pics dans un signal ECG

Je veux faire des marques sur des pics comme dans cette image:

. . . . . . . signal

Voici mon code:

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

Qu'est-ce exactement _QRS_? Tout le monde ici n'est pas un médecin ou un ingénieur biomédical/électrique ... Je pense que des illustrations de ce que vous voulez réaliser pourraient être utiles ici. –

+0

J'ai mis à jour la question avec une image qui illustre le signal ECG et QRS. – aast

+0

Y at-il une plus grande version de cette image? Je ne comprends toujours pas ce que vous entendez exactement par "complexe QRS"? Voulez-vous les valeurs "x" de Q, R et S? Leurs valeurs "y"? ** Edit: ** Nevermind .. J'ai enfin vu que "complexe QRS" est la distance entre le début de la baisse de Q jusqu'à la hausse de S ... –

Répondre

0

Je ne suis pas sûr que je vous ai bien compris, mais voici une façon d'obtenir des marques comme dans le graphique que vous montriez:

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'); 

Cela donne :

enter image description here