Peaks of a function
2 views (last 30 days)
Show older comments
I need to calculate the frequenzy of a vibrating system.
i plotted the function and now to calculate the frequenzy i need the time between two peaks of the function.
just like:
x = max(function)
x2 = secondmax(function)
something like that ^^.
thank you very much for your help
0 Comments
Answers (2)
Stephane
on 13 May 2023
Edited: KALYAN ACHARJYA
on 13 May 2023
There is a Matlab a function to detect peaks/local maxima: https://se.mathworks.com/help/signal/ref/findpeaks.html
You could also fit an exponentially decaying sinus if this is what you expect (https://se.mathworks.com/help/curvefit/fit.html) or do a Fourier analysis (https://se.mathworks.com/help/matlab/ref/fft.html).
2 Comments
Star Strider
on 13 May 2023
This is relatively straightforward —
F1 = openfig('Plot.fig', 'visible');
Lines = findobj(F1, 'Type','Line');
t = Lines.XData.';
s = Lines.YData.';
Ts = mean(diff(t));
Fs = 1/Ts;
Fn = Fs/2;
L = numel(t);
NFFT = 2^nextpow2(L);
FTs = fft((s-mean(s)).*hann(L), NFFT)/L;
Fv = linspace(0, 1, NFFT/2+1)*Fn;
Iv = 1:numel(Fv);
[pks,locs] = findpeaks(abs(FTs(Iv))*2, 'MinPeakProminence',1E-7);
figure
plot(Fv, abs(FTs(Iv))*2)
grid
xlabel('Frequency (Hz)')
ylabel('Magnitude (m)')
title('Fourier Transform')
text(Fv(locs), pks, sprintf('\\leftarrow Magnitude %.3f\\times10^{-6} m\n Freq = %.3f Hz', pks/1E-6, Fv(locs)))
.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!