+ All Categories
Home > Documents > Ecg Extraction Code

Ecg Extraction Code

Date post: 28-Apr-2015
Category:
Upload: abdkabeer-akande
View: 76 times
Download: 3 times
Share this document with a friend
12
Contents n ZERO CROSSING REMOVAL n DETECT R_PEAK n Calculate R in the actual Signal n After R Peak Tracking ... DETCET OTHERS n ONSET n P Peak n Q Detection n S Detection n T Peak n END OF T % Load original 1D signal. clc; clear all; close all; ELEVATED=[]; [fname path]=uigetfile('*.mat'); fname=strcat(path,fname); load(fname ); z=zeros(100,1); A=val(1,:); v1=val(1,:)-val(1,1); A=v1; A=A'; zc=A(1); A=[z;A;z]; % Plot Actual Signal s = A(1:1:400); s = A; ls = length(s); figure(1) plot(s); title('Original Signal'),grid on % Perform decomposition at level 8 of s using db4 [c,l]=wavedec(s,8,'db4'); ca1=appcoef(c,l,'db4',1); ca2=appcoef(c,l,'db4',2); ca3=appcoef(c,l,'db4',3); ca4=appcoef(c,l,'db4',4); ca5=appcoef(c,l,'db4',5); ca6=appcoef(c,l,'db4',6); ca7=appcoef(c,l,'db4',7); ca8=appcoef(c,l,'db4',8); %Plot the coefficient figure(2) plot(c),title('decomposed signal'),grid on figure(3) subplot(4,2,1) Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only.
Transcript
Page 1: Ecg Extraction Code

Contents

n ZERO CROSSING REMOVAL

n DETECT R_PEAK

n Calculate R in the actual Signal

n After R Peak Tracking ... DETCET OTHERS

n ONSET

n P Peak

n Q Detection

n S Detection

n T Peak

n END OF T

% Load original 1D signal.

clc;

clear all;

close all;

ELEVATED=[];

[fname path]=uigetfile('*.mat');

fname=strcat(path,fname);

load(fname );

z=zeros(100,1);

A=val(1,:);

v1=val(1,:)-val(1,1);

A=v1;

A=A';

zc=A(1);

A=[z;A;z];

% Plot Actual Signal s = A(1:1:400);

s = A;

ls = length(s);

figure(1)

plot(s);

title('Original Signal'),grid on

% Perform decomposition at level 8 of s using db4

[c,l]=wavedec(s,8,'db4');

ca1=appcoef(c,l,'db4',1);

ca2=appcoef(c,l,'db4',2);

ca3=appcoef(c,l,'db4',3);

ca4=appcoef(c,l,'db4',4);

ca5=appcoef(c,l,'db4',5);

ca6=appcoef(c,l,'db4',6);

ca7=appcoef(c,l,'db4',7);

ca8=appcoef(c,l,'db4',8);

%Plot the coefficient

figure(2)

plot(c),title('decomposed signal'),grid on

figure(3)

subplot(4,2,1)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 2: Ecg Extraction Code

plot(ca1),title('1st level approximation'),grid on

subplot(4,2,2)

plot(ca2),title('2nd level approximation'),grid on

subplot(4,2,3)

plot(ca3),title('3rd level approximation'),grid on

subplot(4,2,4)

plot(ca4),title('4th level approximation'),grid on

subplot(4,2,5)

plot(ca5),title('5th level approximation'),grid on

subplot(4,2,6)

plot(ca6),title('6th level approximation'),grid on

subplot(4,2,7)

plot(ca7),title('7th level approximation'),grid on

subplot(4,2,8)

plot(ca8),title('8th level approximation'),grid on

% Extract detail coefficients at levels

% 1, 2 and 3, from wavelet decomposition

% structure [c,l].

[cd1,cd2,cd3,cd4,cd5,cd6,cd7,cd8] = detcoef(c,l,[1 2 3 4 5 6 7 8]);

figure(4)

subplot(4,2,1)

plot(cd1),title('detail coeff: level 1 cd1'),grid on

subplot(4,2,2)

plot(cd2),title('detail coeff: level 2 cd2'),grid on

subplot(4,2,3)

plot(cd3),title('detail coeff: level 3 cd3'),grid on

subplot(4,2,4)

plot(cd4),title('detail coeff: level 4 cd4'),grid on

subplot(4,2,5)

plot(cd5),title('detail coeff: level 5 cd5'),grid on

subplot(4,2,6)

plot(cd6),title('detail coeff: level 6 cd6'),grid on

subplot(4,2,7)

plot(cd7),title('detail coeff: level 7 cd7'),grid on

subplot(4,2,8)

plot(cd8),title('detail coeff: level 8 cd8'),grid on

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 3: Ecg Extraction Code

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 4: Ecg Extraction Code

ZERO CROSSING REMOVAL

base_corrected=ca2;

y=base_corrected-zc;

figure(5)

plot(y),grid on

title('Noise Free signal')

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 5: Ecg Extraction Code

DETECT R_PEAK

y1=y;

m1=max(y1)-max(y1)*.60;

P=find(y1>=m1);

% it will give two two points ... remove one point each

P1=P;

P2=[];

last=P1(1);

P2=[P2 last];

for(i=2:1:length(P1))

if(P1(i)>(last+10))

last=P1(i);

P2=[P2 last];

end

end

Rt=y1(P2);

figure(6)

plot(y1),grid on,hold on

plot(P2,Rt,'*');

title('Rpos in downsampled signal');

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 6: Ecg Extraction Code

C� � � � � � te R � n t� e � � t� � � S� � n� �

P3=P2*4;

Rpos=[];

for( i=1:1:length(P3))

range= [P3(i)-20:P3(i)+20];

m=max(A(range));

l=find(A(range)==m);

pos=range(l);

Rpos=[Rpos pos];

end

Ramp=A(Rpos);

figure(7)

plot(A),grid on,hold on

plot(Rpos,Ramp,'*');

title('Detected R peak in actual Signal');

R_peaks = length(Rpos)

%disp([num2str(R_peaks) ' peaks'])

R_peaks =

13

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 7: Ecg Extraction Code

A� ter R Pe� � Tr� � � � n� � � � DETCET OT� ERS

ONSET

X=Rpos;

y1=A;

for(i=1:1:1)

for(j=1:1:length(X))

a=X(j)-100:X(j)-50;

m=max(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

fnd=0;

for k=b-20:+1:b

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b-20:+1:b;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 8: Ecg Extraction Code

P Pe� �

� Dete� t� on

RON(i,j)=qon1(1);

fnd;

for k=b:+1:b+20

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b:+1:b+20;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

ROF(i,j)=qon1(1);

a=Rpos(i,j)-100:Rpos(i,j)-10;

m=max(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

Ppos(i,j)=b;

Pamp(i,j)=m;

end

a=Rpos(i,j)-50:Rpos(i,j)-10;

m=min(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

Qpos(i,j)=b;

Qamp(i,j)=m;

%%%%% ONSET

fnd=0;

for k=b-20:+1:b

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b-20:+1:b;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

QON(i,j)=qon1(1);

fnd;

for k=b:+1:b+20

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 9: Ecg Extraction Code

S Dete� t� on

T Pe� �

fnd=1;

break

end

end

if(fnd==0)

Qrange=b:+1:b+20;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

QOF(i,j)=qon1(1);

a=Rpos(i,j)+5:Rpos(i,j)+50;

m=min(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

Spos(i,j)=b;

Samp(i,j)=m;

%%%% onset off

fnd=0;

for k=b-5:+1:b

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b-20:+1:b;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

SON(i,j)=qon1(1);

fnd=0;

for k=b:+1:b+20

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b:+1:b+20;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

SOFF(i,j)=qon1(1);

a=Rpos(i,j)+25:Rpos(i,j)+100;

m=max(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 10: Ecg Extraction Code

END O� T

Tpos(i,j)=b;

Tamp(i,j)=m;

%%%% onset off

fnd=0;

for k=b-20:+1:b

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b-20:+1:b;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

TON(j,i)=qon1(1);

fnd=0;

for k=b:+1:b+20

if((y1(k)<=0) && (y1(k-1)>0))

qon1=k;

fnd=1;

break

end

end

if(fnd==0)

Qrange=b:+1:b+20;

qon1=find(y1(Qrange)==max(y1(Qrange)));

qon1=Qrange(qon1);

end

TOFF(j,i)=qon1(1);

if(Tamp(i,j)<Pamp(i,j))

a=Rpos(i,j)+25:Rpos(i,j)+70;

m=min(y1(a));

b=find(y1(a)==m);

b=b(1);

b=a(b);

Tpos(i,j)=b;

Tamp(i,j)=m;

ELEVATED=[ELEVATED j];

end

end

figure;

k=1;

for(i=1:1:1)

%subplot(6,1,k);

plot(y1), hold on;

plot(Rpos(i,:),Ramp(i,:),'*'),hold on;

plot(Qpos(i,:),Qamp(i,:),'+'),hold on;

plot(Spos(i,:),Samp(i,:),'+'),hold on;

plot(Ppos(i,:),Pamp(i,:),'.'), hold on

plot(Tpos(i,:),Tamp(i,:),'^')

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 11: Ecg Extraction Code

legend('Ramp','Qamp','Samp','Pamp','Tamp')

grid on;

k=k+1;

if(k>6)

k=1;

figure;

end

end

% Detected no of peaks

R_peaks = length(Rpos)

P_peaks = length(Ppos)

T_peaks = length(Tpos)

S_peaks = length(Spos)

Q_peaks = length(Qpos)

clc;

flag=0;

if(length(ELEVATED)>ceil(.8*length(Rpos)))

disp('T inverted (MI Detected) with T inverted Logic')

return;

else

flag=1;

end

R_peaks = length(Rpos)

P_peaks = length(Ppos)

T_peaks = length(Tpos)

S_peaks = length(Spos)

Q_peaks = length(Qpos)

R_peaks =

13

P_peaks =

13

T_peaks =

13

S_peaks =

13

Q_peaks =

13

R_peaks =

13

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 12: Ecg Extraction Code

Published with MATLAB® 7.14

P_peaks =

13

T_peaks =

13

S_peaks =

13

Q_peaks =

13

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.


Recommended