How to calculate the peak-to-peak amplitude of a waveform?

138 views (last 30 days)
Hi All,
Sorry if I’m asking about the obvious, but could somebody please tell me how to calculate the peak-to-peak voltage of the following signal? I would like to know what the peak-to-peak amplitude of this signal is, and if I add random noise to it, how much the peak-to-peak amplitude will change. (fig file is attached)
Many thanks in advance.

Accepted Answer

Star Strider
Star Strider on 28 Aug 2022
Edited: Star Strider on 28 Aug 2022
Fortunately, there are complete P-T complexes in thei record, making the calculations easier.
Detrending is important here in order to get uniform values. This requires a degree polynomial to detrend it adequately, something that to me is a bit extreme, however I could not get any other detrending approach (highpass filtering for example_ to give a satisfactory result. As a general rule, the R-wave is measured from the previous P-R interval, since that is considdered to be an isoelectric reference. This measures the peak-to-peak amplitude between the R-deflection and the following S-deflection, since that is the greatest difference —
LD = openfig(websave('Fig','https://www.mathworks.com/matlabcentral/answers/uploaded_files/1110230/Fig.fig'));
Lines = findobj(LD, 'Type','line');
Xv = Lines.XData
Xv = 1×96918
0 0.0010 0.0020 0.0029 0.0039 0.0049 0.0059 0.0068 0.0078 0.0088 0.0098 0.0107 0.0117 0.0127 0.0137 0.0146 0.0156 0.0166 0.0176 0.0186 0.0195 0.0205 0.0215 0.0225 0.0234 0.0244 0.0254 0.0264 0.0273 0.0283
Yv = Lines.YData
Yv = 1×96918
-2756 -1795 -352 862 1680 2235 2610 2844 2987 3096 3180 3240 3274 3282 3287 3304 3321 3319 3310 3304 3308 3314 3322 3327 3325 3308 3284 3263 3251 3244
Fs = 1/(Xv(2)-Xv(1))
Fs = 1024
Yvf = detrend(Yv, 9);
Smin = islocalmin(Yvf, 'MinProminence',4000, 'MinSeparation',100);
Rmax = islocalmax(Yvf, 'MinProminence',5500);
Sdef = Yvf(Smin);
Rdef =Yvf(Rmax);
PtoP = Rdef - Sdef
PtoP = 1×126
1.0e+04 * 1.7004 1.6867 1.6795 1.7095 1.6755 1.6929 1.6930 1.6737 1.6954 1.6918 1.6742 1.7074 1.6843 1.6820 1.6982 1.6810 1.6881 1.6969 1.6653 1.6918 1.6900 1.6678 1.7032 1.6793 1.6807 1.7032 1.6761 1.6863 1.6948 1.6735
figure
plot(Xv, Yvf, 'DisplayName','Filtered EKG')
hold on
plot(Xv(Rmax), PtoP,'r+', 'DisplayName','P-P Values')
% plot(Xv(Rmax), Yvf(Rmax),'r^', 'DisplayName','R-Deflections')
% plot(Xv(Smin), Yvf(Smin), 'rv', 'DisplayName','S-Deflections')
hold off
grid
legend('Location','best')
xlim([0 5])
Make appropriate changes to get different results.
(Thanks again to @Karim, this time adapting his .mat file load approach to openfig.)
.
  16 Comments
Susan
Susan on 30 Aug 2022
@Star Strider Thank you so much for your time. I sincerely appreciate your help.

Sign in to comment.

More Answers (1)

Abderrahim. B
Abderrahim. B on 28 Aug 2022
Hi!
Use peak2peak function. Demo below:
load('ecgSignals.mat')
t = (1:length(ecgl))';
plot(t, ecgl)
peak2peak(ecgl)
ans = 2.1751
% You may need to detrend the ecg signal before finding peak to peak
% amplitude.
dt_ecgl = detrend(ecgl);
plot(t, dt_ecgl)
peak2peak(dt_ecgl)
ans = 2.0302

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!