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

### Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

# 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
```

## Products

No products are associated with this question.

Answer by Walter Roberson on 5 Jan 2013
Edited by Walter Roberson on 5 Jan 2013
```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.