Having trouble to calculate the area under curve for each peaks and display the area under curve in graph?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Keshasni Earichappan
le 10 Août 2021
Commenté : Star Strider
le 11 Août 2021
Hi there.I am new to mathlab and having trouble to calculate the area under curve for each peaks and display the area under curve in graph? i have attached the file over here.Hope someone can help me. thanks in advance.
2 commentaires
Scott MacKenzie
le 10 Août 2021
It's not clear what you are trying to do; i.e, what precisely do you mean by "peak"? Running your data through findpeaks indicates 18,015 peaks. With some smoothing... Well, let me just illustrate my point as follows:
f = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/708072/time%20vs%20Muscle%20contraction.txt';
M = readmatrix(f);
x = M(:,1);
y = M(:,2);
tiledlayout('flow');
nexttile;
plot(x,y);
nexttile;
y2 = smoothdata(y);
plot(x,y2);
[pks, loc] = findpeaks(y);
[pks2, loc2] = findpeaks(y2);
[length(pks) length(pks2)]
Réponse acceptée
Star Strider
le 10 Août 2021
It depends entirely on what the definition of ‘peak’ is, and if the data first need to be detrended.
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/708072/time%20vs%20Muscle%20contraction.txt', 'VariableNamingRule','preserve')
t = T1.TIME;
v = T1.('MC[v]');
Ts = mean(diff(t),'omitnan');
Fs = 1/Ts;
Fn = Fs/2;
figure
plot(t, v)
grid
xlabel('t')
ylabel('v')
title('Original Data')
vfilt = highpass(v, 1E-4, Fs, 'ImpulseResponse','iir');
zxi = find(diff(sign(vfilt)));
for k = 1:numel(zxi)
idxrng = max(1, zxi(k)-1) : min(numel(v),zxi(k)+1);
tzc(k) = interp1(vfilt(idxrng),t(idxrng),0);
end
tzc = unique(tzc);
for k = 1:numel(tzc)-1
Lv = (t>=tzc(k) & t<=tzc(k+1));
tv{k} = t(Lv);
vv{k} = vfilt(Lv);
if (numel(vv{k}) > 1)
Area(k) = trapz(tv{k},vv{k});
else
Area(k) = 0;
end
tvm(k) = mean(tv{k});
maxvv = max(vv{k});
if (~isempty(maxvv))
pkv(k) = maxvv;
else
pkv(k) = NaN;
end
end
figure
plot(t, vfilt)
hold on
plot(tzc, zeros(size(tzc)), 'xr')
hold off
grid
xlabel('t')
ylabel('v')
title('Original Data (Detrended)')
legend('Data', 'Zero-Crossings', 'Location','best')
% text(tvm,pkv, compose('\\leftarrow %.3f',Area), 'Horiz','center', 'Vert','bottom', 'Rotation',90)
.
2 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Spectral Estimation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!