Hi everyone,
This is my first time posting here and wanted to see if I could get some help with this matlab project. I created an ECG signal and added noise and a baseline drift. The trouble I'm having is when I try to reduce the effects of the baseline drift using a high pass filter. My result is just a plot of a straight line which is wrong. The equation in the for loop was derived from the differential equation, dg(t)/dt + ag(t)= df(t)/dt, which describes the filter. The a is just a constant.
Can anyone point out to me what I am doing wrong. Thanks
The following is my code so far.
t1=0:.005:.595;
y1=0*t1;
t2=.6:.005:0.7;
y2=0.2*sin(2*(pi)*5*t2);
t3=.7:.005:.8;
y3=0*t3;
t4=.8:0.005:.85;
y4 =1*sin(2*(pi)*10*t4);
t5 = .85:0.005:1;
y5 = 0*t5;
t6 = 1:0.005:1.2;
y6 =.5*sin(2*(pi)*(-2.5)*t6);
t7 = 1.2:0.005:1.5;
y7 = 0*t7;
yn=[y1 y2 y3 y4 y5 y6 y7];
x= [t1 t2 t3 t4 t5 t6 t7];
sn=[yn yn yn yn];
t=[x x+1.5 x+3 x+4.5];
figure(1);
plot(t,sn);
%dc value
snavg=mean(sn)
%pure discrete time ECG signal
son=sn-snavg;
%60Hz Contamination
cn=.35*sin(2*pi*60*t);
%baseline drift
dn=.5*sin(2*pi*.5*t);
%nosie
nn=cn+dn;
%noisy ECG signal
xn=son+nn;
%passing drift through high pass filter
Ts=(1/200);
Ahp=2*pi;
c=((1/Ts)/((1/Ts)+Ahp));
g(1)=c*dn(1);
for n=2:1200
g(n)=(c*(g(n-1)))+(c*dn(n))-(c*(dn(n-1)));
end
figure(2);
plot(t,g(n));
Again I have trouble at the end, getting results from the high pass filter. I know there may be commands to do this a lot easier but I was instructed to go about it this way. I don't know if i was clear, so if any other info is needed let me know. Thanks again.
This is my first time posting here and wanted to see if I could get some help with this matlab project. I created an ECG signal and added noise and a baseline drift. The trouble I'm having is when I try to reduce the effects of the baseline drift using a high pass filter. My result is just a plot of a straight line which is wrong. The equation in the for loop was derived from the differential equation, dg(t)/dt + ag(t)= df(t)/dt, which describes the filter. The a is just a constant.
Can anyone point out to me what I am doing wrong. Thanks
The following is my code so far.
t1=0:.005:.595;
y1=0*t1;
t2=.6:.005:0.7;
y2=0.2*sin(2*(pi)*5*t2);
t3=.7:.005:.8;
y3=0*t3;
t4=.8:0.005:.85;
y4 =1*sin(2*(pi)*10*t4);
t5 = .85:0.005:1;
y5 = 0*t5;
t6 = 1:0.005:1.2;
y6 =.5*sin(2*(pi)*(-2.5)*t6);
t7 = 1.2:0.005:1.5;
y7 = 0*t7;
yn=[y1 y2 y3 y4 y5 y6 y7];
x= [t1 t2 t3 t4 t5 t6 t7];
sn=[yn yn yn yn];
t=[x x+1.5 x+3 x+4.5];
figure(1);
plot(t,sn);
%dc value
snavg=mean(sn)
%pure discrete time ECG signal
son=sn-snavg;
%60Hz Contamination
cn=.35*sin(2*pi*60*t);
%baseline drift
dn=.5*sin(2*pi*.5*t);
%nosie
nn=cn+dn;
%noisy ECG signal
xn=son+nn;
%passing drift through high pass filter
Ts=(1/200);
Ahp=2*pi;
c=((1/Ts)/((1/Ts)+Ahp));
g(1)=c*dn(1);
for n=2:1200
g(n)=(c*(g(n-1)))+(c*dn(n))-(c*(dn(n-1)));
end
figure(2);
plot(t,g(n));
Again I have trouble at the end, getting results from the high pass filter. I know there may be commands to do this a lot easier but I was instructed to go about it this way. I don't know if i was clear, so if any other info is needed let me know. Thanks again.