4015 Ecg 2

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

close all;

clc;

load('04015m.mat');

ECGsignal = (val - 0) / 200;

Fs = 250;

t = (0:length(ECGsignal) - 1) / Fs; % Perbaikan perhitungan vektor waktu

%figure;

subplot(4,1,1)

plot(t,ECGsignal)

title ('ECG Signal');

%{

noise50 = 5*sin(2 * pi * 50 * t);

combined_signal = ECGsignal + noise50;

% Plot noise 50 Hz

subplot(4, 1, 2);

plot(t, combined_signal, 'r');

title('Data menit 22-23 + Noise 50 Hz')

%}

%{

% Melakukan FFT pada data EKG yang dipilih

NFFT = 2 ^ nextpow2(length(ECGsignal)); %compute FFT length depends on the signal length

Y = fft(ECGsignal, NFFT); %compute the fft of the noisy signal


Y = Y(1:NFFT/2); %we only need a one-sided fft plot

Y_abs = 1/NFFT * abs(Y); %calculate the magnitude and normalize the spectrum

f_fft = (0:NFFT/2-1) * Fs / NFFT; %scale the frequency axis and calculate the corresponding frequencies

%}

%-----------------Fast Fourier Transform (FFT) -------------------------

n = 2^nextpow2(length(ECGsignal));

Yfft = fft(ECGsignal,n);

P2 = abs(Yfft/length(ECGsignal));

P1 = P2(1:n/2);

%P1 = P2(1:n/2+1);

P1(1:end-1) = 2*P1(1:end-1);

% Plot spektrum frekuensi dari filter FFT

subplot(4, 1, 2);

plot(0:(Fs/n):(Fs/2-Fs/n),P1); % Plot spektrum frekuensi

%plot(0:(Fs/n):(Fs/2-Fs/n),P1(1:n/2)); % Plot spektrum frekuensi

title('FFT ECG Signal')

%-----------------IIR Digital Filter (Fcutoff LPF)-------------

%{

% Numerator LPF

b0=0.00213987911457475; b1=0.00855951645829900; b2=0.0128392746874485;


b3=0.00855951645829900; b4=0.00213987911457475;

%{
b0= 2.77985080473354e-05; b1= 0.000194589556331348; b2= 0.000583768668994044; b3=
0.000972947781656741;

b4= 0.000972947781656741; b5= 0.000583768668994044; b6= 0.000194589556331348; b7=


2.77985080473354e-05;

%}

% Denumerator LPF

a1=-2.70863110986887; a2=2.89695017888916; a3=-1.42302881402743;


a4=0.268947810840336;

%{

a1= -4.68014172708755; a2= 9.66362411908318; a3= -11.3452223868573;

a4= 8.14877066174978; a5= -3.57120948730174; a6= 0.882418571119847; a7= -0.0946815416761583;

%}

x4=0;x3=0;x2=0;x1=0;x0=0;

y4=0;y3=0;y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y4=y3;

y3=y2;

y2=y1;

y1=y;

x4=x3;

x3=x2;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4...


-a1*y1 - a2*y2 -a3*y3 -a4*y4;

yfilter(i)=y;

end

y = yfilter';

%}

%-----------------IIR Digital Filter (Fcutoff HPF)-------------

%{

% Numerator HPF

b0= 0.960143871399599; b1= -5.76086322839760; b2= 14.4021580709940; b3= -


19.2028774279920;b4= 14.4021580709940; b5= -5.76086322839760; b6= 0.960143871399599;

%b0=0.982815190819433; b1=-3.93126076327773; b2=5.89689114491660; b3=-


3.93126076327773; b4=0.982815190819433;

%b0=0.946013234720476; b1=-7.56810587776381; b2=26.4883705721733; b3=-


52.9767411443467; b4=66.2209264304333; b5=-52.9767411443467; b6=26.4883705721733;
b7=-7.56810587776381; b8=0.946013234720476;

% Denumerator HPF

a1= -5.91865792000774; a2= 14.5965912691856; a3= -19.1997011100419; a4= 14.2061363618572; a5=


-5.60624485469571; a6= 0.921876253786210;

%a1=-3.96533205768689; a2=5.89659584247457; a3=-3.89718945364403;


a4=0.965925699305438;

%a1=-7.88900560634635; a2=27.2291899846452; a3=-53.7058013745961;


a4=66.2063589201302; a5=-52.2360253030280; a6=25.7592040991794; a7=-
7.25886176025052; a8=0.894941040266299;

x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;

y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;
for i=1:(length(ECGsignal))

y6=y5;

y5=y4;

y4=y3;

y3=y2;

y2=y1;

y1=y;

x6=x5;

x5=x4;

x4=x3;

x3=x2;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6...

-a1*y1 - a2*y2 -a3*y3 -a4*y4 -a5*y5 -a6*y6;

yfilter(i)=y;

end

y = yfilter';

%}

%-----------------IIR Digital Filter (Bandpass Filter Spesific orde 2)-------------

% Numerator bandpass
b0=0.204300824300264; b1=0; b2=-0.204300824300264;

% Denumerator Stop

a1=-1.52763833421223; a2=0.591398351399471;

x2=0;x1=0;x0=0;

y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y2=y1;

y1=y;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2...

-a1*y1 - a2*y2;

yfilter(i)=y;

end

y = yfilter';

%-----------------IIR Digital Filter (Bandpass Filter orde 6)-------------


%{

% Numerator bandpass

%b0=0.00118535173986466; b1=0; b2=-0.00355605521959397; b3=0;


b4=0.00355605521959397; b5=0; b6=-0.00118535173986466;

b0=0.0104462641220721; b1=0; b2=-0.0313387923662162; b3=0;


b4=0.0313387923662162; b5=0; b6=-0.0104462641220721;

% Denumerator Stop

%a1=-5.43638078209196; a2=12.4250880264957; a3=-15.2830090780736;


a4=10.6709131373559; a5=-4.01052888376844; a6=0.633967000193037;

a1=-4.91935185184813; a2=10.1678229619753; a3=-11.3333488556506;


a4=7.19932944256773; a5=-2.47253949644016; a6=0.358103883509781;

x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;

y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y6=y5;

y5=y4;

y4=y3;

y3=y2;

y2=y1;

y1=y;

x6=x5;
x5=x4;

x4=x3;

x3=x2;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6...

-a1*y1 - a2*y2 -a3*y3 -a4*y4 -a5*y5 -a6*y6;

yfilter(i)=y;

end

y = yfilter';

%}

%-----------------IIR Digital Filter (Bandpass Filter orde 12)-------------

%{

% Numerator Bandpass

b0=1.56808780344346e-05; b1=0; b2=-9.40852682066075e-05; b3=0;


b4=0.000235213170516519; b5=0; b6=-0.000313617560688692; b7=0;
b8=0.000235213170516519; b9=0; b10=-9.40852682066075e-05; b11=0;
b12=1.56808780344346e-05;

%b0= 0.000102996585440376; b1= 0; b2= -0.000617979512642255; b3= 0; b4= 0.00154494878160564;


b5= 0; b6= -0.00205993170880752; b7= 0; b8= 0.00154494878160564; b9= 0; b10= -
0.000617979512642255; b11= 0; b12= 0.000102996585440376;

%b0=3.62659185414529e-05; b1=0; b2=-0.000217595511248717; b3=0;


b4=0.000543988778121793; b5=0; b6=-0.000725318370829058; b7=0;
b8=0.000543988778121793; b9=0; b10=-0.000217595511248717; b11=0;
b12=3.62659185414529e-05;

% Denumerator Bandpass
a1=-10.2508002855991; a2=48.5423091950078; a3=-140.421467758779;
a4=276.371744361259; a5=-389.890386225167; a6=404.276079945459; a7=-
310.449164978988; a8=175.232560396563; a9=-70.9058058096531;
a10=19.5247464999408; a11=-3.28530016839862; a12=0.255484912550536;

%a1=-10.0190156173305; a2=46.1217047929982; a3=-129.039221089959; a4=244.447109706557; a5=-


330.389846450890; a6=326.745877659035; a7=-238.268301300269; a8=127.159324204077; a9=-
48.4377807471251; a10=12.5010513389553; a11=-1.96265553150537; a12=0.141753035458084;

%a1=-10.3597397105903; a2=49.2957748030189; a3=-142.491555751827;


a4=278.699140979353; a5=-388.626497142327; a6=396.193683789725; a7=-
297.556601486994; a8=163.402721085251; a9=-63.9882805555087;
a10=16.9615907690610; a11=-2.73257680163777; a12=0.202340022475881;

x12=0;x11=0;x10=0;x9=0;x8=0;x7=0;x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;

y12=0;y11=0;y10=0;y9=0;y8=0;y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y12=y11;

y11=y10;

y10=y9;

y9=y8;

y8=y7;

y7=y6;

y6=y5;

y5=y4;

y4=y3;

y3=y2;

y2=y1;

y1=y;
%

x12=x11;

x11=x10;

x10=x9;

x9=x8;

x8=x7;

x7=x6;

x6=x5;

x5=x4;

x4=x3;

x3=x2;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6 + b7*x7 + b8*x8 + b9*x9 + b10*x10 +
b11*x11 + b12*x12...

-a1*y1 - a2*y2 -a3*y3 -a4*y4 - a5*y5 -a6*y6 -a7*y7 - a8*y8 -a9*y9 -a10*y10 - a11*y11 -a12*y12;

yfilter(i)=y;

end

y = yfilter';

%}

%-----------------IIR Digital Filter (Bandpass Filter rev2_rev4 orde 8)-------------

%{

% Numerator Stop
b0= 0.000410931183554443; b1= 0; b2= -0.00164372473421777; b3= 0; b4= 0.00246558710132666;

b5= 0; b6= -0.00164372473421777; b7= 0; b8= 0.000410931183554443;

% Denumerator Stop

a1= -7.15964579560663; a2= 22.4730227331432; a3= -40.3996185258062; a4= 45.5012574753422; a5=


-32.8812249099796;

a6= 14.8895473319969; a7= -3.86297286653953; a8= 0.439634558782482;

%}

% Numerator pass

%b0=0.000138869703014696; b1=0; b2=-0.000555478812058784; b3=0;


b4=0.000833218218088176; b5=0; b6=-0.000555478812058784; b7=0;
b8=0.000138869703014696;

%b0=0.000361436017875967; b1=0; b2=-0.00144574407150387; b3=0;


b4=0.00216861610725580; b5=0;b6=-0.00144574407150387; b7=0;
b8=0.000361436017875967;

%b0=0.000379252061717886; b1= 0; b2= -0.00151700824687155; b3= 0; b4=


0.00227551237030732; b5= 0;b6= -0.00151700824687155; b7=0; b8= 0.000379252061717886;

%b0=0.000618284984254212; b1=0; b2=-0.00247313993701685; b3=0;


b4=0.00370970990552527; b5=0;b6=-0.00247313993701685; b7=0;
b8=0.000618284984254212;

%b0=0.000173116221996394; b1=0; b2=-0.000692464887985575; b3=0;


b4=0.00103869733197836; b5=0;b6=-0.000692464887985575; b7=0;
b8=0.000173116221996394;

%b0=1.23873666334324e-05; b1=0; b2=-4.95494665337296e-05; b3=0;


b4=7.43241998005943e-05; b5=0; b6=-4.95494665337296e-05; b7=0;
b8=1.23873666334324e-05;

%b0=0.00764442556430291; b1=0; b2=-0.0305777022572117; b3=0;


b4=0.0458665533858175; b5=0; b6=-0.0305777022572117; b7=0;
b8=0.00764442556430291;
%b0=0.00384037959584348; b1=0; b2=-0.0153615183833739; b3=0;
b4=0.0230422775750609; b5=0; b6=-0.0153615183833739; b7=0;
b8=0.00384037959584348;

b0=0.000641665285340452; b1=0; b2=-0.00256666114136181; b3=0;


b4=0.00384999171204271; b5=0; b6=-0.00256666114136181; b7=0;
b8=0.000641665285340452;

% Denumerator pass

%a1=-7.37454670592380; a2=23.8244228868812; a3=-44.0428411472786;


a4=50.9608950453446; a5=-37.7943448530537; a6=17.5452164413542; a7=-
4.66148310698998; a8=0.542681439959208;

%a1=-7.16866018959957; a2=22.5451849672002; a3=-40.6356892463346;


a4=45.9173982069723; a5=-33.3123614849287; a6=15.1537154344572; a7=-
3.95198051792500; a8=0.452392843878766;

%a1= -7.17724856677203; a2= 22.5827941563256; a3= -40.6930680919529; a4=


45.9373652412886; a5= -33.2705143199681; a6= 15.0983511206086; a7= -
3.92530458990679; a8= 0.447625051721906;

%a1=-6.82415455497038; a2=20.6260642794524; a3=-36.0699128787646;


a4=39.9209115878123; a5=-28.6366513652202; a6=13.0033574852428; a7=-
3.41783205699469; a8=0.398236608345818;

%a1=-7.20840054802933; a2=22.8817260742161; a3=-41.7781189281862;


a4=47.9901890111719; a5=-35.5153112749385; a6=16.5370412134101; a7=-
4.42982633433870; a8=0.522702563420830;

%a1=-7.66820989040602; a2=25.7401796567187; a3=-49.4015104183176;


a4=59.2926914405124; a5=-45.5718921721035; a6=21.9043452409590; a7=-
6.01983633926748; a8=0.724232481936202;

%a1=-6.10361338842098; a2=16.3549593628498; a3=-25.2210767706607;


a4=24.5566548495837; a5=-15.4837775511007; a6=6.17374274952529; a7=-
1.42185004204534; a8=0.144960794360120;

%a1=-6.44754493534279; a2=18.2501534718809; a3=-29.6728825135923;


a4=30.3528420364625; a5=-20.0191475091090; a6=8.31539640697564; a7=-
1.98841176295709; a8=0.209594807604805;
a1=-7.06003514510076; a2=21.8518006516296; a3=-38.7391825234792;
a4=43.0342815630171; a5=-30.6796460566033; a6=13.7088096330001; a7=-
3.51045255137512; a8=0.394424429294687;

x8=0;x7=0;x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;

y8=0;y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y8=y7;

y7=y6;

y6=y5;

y5=y4;

y4=y3;

y3=y2;

y2=y1;

y1=y;

x8=x7;

x7=x6;

x6=x5;

x5=x4;

x4=x3;

x3=x2;

x2=x1;
x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6 + b7*x7 + b8*x8...

-a1*y1 - a2*y2 -a3*y3 -a4*y4 - a5*y5 -a6*y6 -a7*y7 - a8*y8;

yfilter(i)=y;

end

y = yfilter';

%-----------------IIR Digital Filter (Bandpass Filter rev3-rev5 orde 10)-------------

%{

% Numerator pass

%b0=0.000411933958562019; b1=0; b2=-0.00205966979281010; b3=0;


b4=0.00411933958562019; b5=0; b6=-0.00411933958562019; b7=0;
b8=0.00205966979281010; b9=0; b10=-0.000411933958562019;

%b0=0.000240956954647276; b1=0; b2=-0.00120478477323638; b3=0;


b4=0.00240956954647276; b5=0; b6=-0.00240956954647276; b7=0;
b8=0.00120478477323638; b9=0; b10=-0.000240956954647276;

%b0=0.000294296866289770; b1=0; b2=-0.00147148433144885; b3=0;


b4=0.00294296866289770; b5=0; b6=-0.00294296866289770; b7=0;
b8=0.00147148433144885; b9=0; b10=-0.000294296866289770;

%b0=0.000203749440227156; b1=0; b2=-0.00101874720113578; b3=0;


b4=0.00203749440227156; b5=0; b6=-0.00203749440227156; b7=0;
b8=0.00101874720113578; b9=0; b10=-0.000203749440227156;

%b0=0.000203749440227156; b1=0; b2=-0.00101874720113578; b3=0;


b4=0.00203749440227156; b5=0; b6=-0.00203749440227156; b7=0;
b8=0.00101874720113578; b9=0; b10=-0.000203749440227156;

b0=0.000210142526716869; b1=0; b2=-0.00105071263358434; b3=0;


b4=0.00210142526716869; b5=0; b6=-0.00210142526716869; b7=0;
b8=0.00105071263358434; b9=0; b10=-0.000210142526716869;
% Denumerator pass

%a1=-8.34532801584088; a2=31.4699924098913; a3=-70.6518993724751;


a4=104.619593908904; a5=-106.798265391510; a6=76.1292974361760; a7=-
37.4217506546186; a8=12.1401285542197; a9=-2.34712271595663;
a10=0.205353843825077;

%a1=-8.45682127058128; a2=32.3635363870595; a3=-73.8305786368060;


a4=111.217700754053; a5=-115.617445490858; a6=84.0101228640475; a7=-
42.1342723044911; a8=13.9597586326115; a9=-2.75901653566727;
a10=0.247015636893934;

%a1=-8.39451233549780; a2=31.8908773952880; a3=-72.2320614564719;


a4=108.052015913180; a5=-111.569029512672; a6=80.5410271121611; a7=-
40.1414590302618; a8=13.2194769817215; a9=-2.59760962574700;
a10=0.231274593387671;

%a1=-8.64285843347925; a2=33.6825896906028; a3=-77.9653980496178;


a4=118.728174696175; a5=-124.310447563812; a6=90.6378138308487; a7=-
45.4462481283345; a8=14.9974680131354; a9=-2.94146259793079;
a10=0.260368542416641; %Match exactly:stopband

%a1=-8.64285843347925; a2=33.6825896906028; a3=-77.9653980496178;


a4=118.728174696175; a5=-124.310447563812; a6=90.6378138308487; a7=-
45.4462481283345; a8=14.9974680131354; a9=-2.94146259793079;
a10=0.260368542416641; %Match exactly:passband

a1=-8.63366362355390; a2=33.6114074728995; a3=-77.7204380860293;


a4=118.236123361220; a5=-123.674372746704; a6=90.0888283895614; a7=-
45.1297862806460; a8=14.8799466750106; a9=-2.91594506822710;
a10=0.257899906472700;

x10=0;x9=0;x8=0;x7=0;x6=0;x5=0;x4=0;x3=0;x2=0;x1=0;x0=0;

y10=0;y9=0;y8=0;y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y=0;

for i=1:(length(ECGsignal))

y10=y9;

y9=y8;
y8=y7;

y7=y6;

y6=y5;

y5=y4;

y4=y3;

y3=y2;

y2=y1;

y1=y;

x10=x9;

x9=x8;

x8=x7;

x7=x6;

x6=x5;

x5=x4;

x4=x3;

x3=x2;

x2=x1;

x1=x0;

x0=ECGsignal(i);

y=b0*x0 + b1*x1 + b2*x2 + b3*x3 + b4*x4 + b5*x5 + b6*x6 + b7*x7 + b8*x8 + b9*x9 + b10*x10...

-a1*y1 - a2*y2 -a3*y3 -a4*y4 - a5*y5 -a6*y6 -a7*y7 - a8*y8 -a9*y9 - a10*y10;

yfilter(i)=y;

end

y = yfilter';
%}

% Plot data EKG yang dipilih

subplot(4, 1, 3); % Membagi jendela plot menjadi empat bagian

plot(t, y)

title('Filtered ECG Signal')

%{

noise50 = 5*sin(2 * pi * 50 * t);

combined_signalf = yfilter + noise50;

% Plot noise 50 Hz

%subplot(4, 1, 2);

%plot(t, combined_signalf, 'r');

%title('Data menit 22-23 + Noise 50 Hz')

%}

%-----------------Fast Fourier Transform (FFT) -------------------------

n = 2^nextpow2(length(yfilter));

Yfft = fft(yfilter,n);

P2 = abs(Yfft/length(yfilter));

P1 = P2(1:n/2);

%P1 = P2(1:n/2+1);

P1(1:end-1) = 2*P1(1:end-1);
%{

% Melakukan FFT pada hasil filter EKG yang dipilih

NFFTfil = 2 ^ nextpow2(length(yfilter)); %compute FFT length depends on the signal length

Y = fft(yfilter, NFFTfil); %compute the fft of the noisy signal

Y = Y(1:NFFTfil/2); %we only need a one-sided fft plot

Y_abs = 1/NFFTfil * abs(Y); %calculate the magnitude and normalize the spectrum

f_fft = (0:NFFTfil/2-1) * Fs / NFFTfil; %scale the frequency axis and calculate the corresponding
frequencies

%}

% Plot spektrum frekuensi dari filter FFT

subplot(4, 1, 4);

plot(0:(Fs/n):(Fs/2-Fs/n),P1); % Plot spektrum frekuensi

%plot(0:(Fs/n):(Fs/2-Fs/n),P1(1:n/2)); % Plot spektrum frekuensi

title('FFT Filtered ECG Signal')

% Label sumbu pada plot spektrum frekuensi

xlabel('Frekuensi (Hz)')

ylabel('Amplitudo')

% Menampilkan hanya data dalam rentang frekuensi 0-100 Hz (opsional)

xlim([0, 100])

% Menampilkan hasil plot

sgtitle('Data EKG dan Spektrum Frekuensi dari 11.46 hingga 11.47')

%}

You might also like