www.mathworks.com
wform = ecg(500);
x = wform' + 0.25*randn(500,1);
d = designfilt('lowpassfir',
'PassbandFrequency',0.15,'StopbandFrequency',0.2,
'PassbandRipple',1,'StopbandAttenuation',60,
'DesignMethod','equiripple');
y = filtfilt(d,x);
y1 = filter(d,x);
subplot(2,1,1)
plot([y y1])
title('Filtered Waveforms')
legend('Zero-phase Filtering','Conventional Filtering')
subplot(2,1,2)
plot(wform)
title('Original Waveform')
function x = ecg(L)
a0 = [0,1,40,1,0,-34,118,-99,0,2,21,2,0,0,0];
d0 = [0,27,59,91,131,141,163,185,195,275,307,339,357,390,440];
a = a0 / max(a0);
d = round(d0 * L / d0(15));
d(15)=L;
for i=1:14,
m = d(i) : d(i+1) - 1;
slope = (a(i+1) - a(i)) / (d(i+1) - d(i));
x(m+1) = a(i) + slope * (m - d(i));
end
end