MATLAB Answers

Krish P

how to find local maxima and minima of a noisy ECG

Asked by Krish P
on 5 Jan 2013
Latest activity Commented on by Image Analyst
on 6 Dec 2014

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

Tags

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;

  3 Comments

Krish P
on 5 Jan 2013

Thank you so much Sir.

saleema
on 6 Dec 2014

sir, i want a matlab codes for finding local maxima and local minima and after their envelop by using spline interpolation

Image Analyst
on 6 Dec 2014

Post a new question, and say if you have the Image Processing Toolbox (so you can use imdilate and imerode to get the local max and min).


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today