Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

how to find local maxima and minima of a noisy ECG

Asked by Krish P on 5 Jan 2013

Is there an easy way to find all local minima of an noisy ecg signal(ecg+baseline wander)with out using function? After that all local maxima are to be connected by a cubic spline curve as the upper envelope e1(t), similarly all local minima by a spline curve as the lower envelope e2(t).Next step is to find the mean of the two envelope ie

m1(t)=  [e1(t)+e2(t)]/2.

PROGRAM UP TO GENERATION OF ECG NOISY SIGNAL

n=512;
fs=n/.83;
tp=.83*10;
x1=ecg(512);
t=0:1/fs:tp-1/fs;
z=repmat(x1,1,10);
subplot(231);
plot(t,z);
title('ecg signal');
xlabel('time');
ylabel('amplitude');
t2=0:1/512:10-(1/512);    
s1=.1*cos(2*pi*.5*t2);
s2=.1*cos(2*pi*.4*t2);
baseline=s1+s2;          
subplot(232);
plot(t2,baseline); %BASELINE WANDER
xlabel('time');
ylabel('amplitude');
y=z+baseline;           % NOISY ECG
disp(y);
subplot(233);
plot(t,y);              % NOISY ECG

0 Comments

Krish P

Products

No products are associated with this question.

1 Answer

Answer by Walter Roberson on 5 Jan 2013
Edited by Walter Roberson on 5 Jan 2013
Accepted answer
local_mins = find( signal(1:end-2) > signal(2:end-1) & signal(2:end-1) < signal(3:end) );
local_maxs = find( signal(1:end-2) < signal(2:end-1) & signal(2:end-1) > signal(3:end) );
e1 = spline( local_mins, signal(local_mins), 1:length(signal) );
e2 = spline( local_maxs, signal(local_maxs), 1:length(signal) );
m1 = (e1 + e2) / 2;

1 Comment

Krish P on 5 Jan 2013

Thank you so much Sir.

Walter Roberson

Contact us