Peaks of a function

2 次查看(过去 30 天)
Aaron Rosenberger
Aaron Rosenberger 2023-5-13
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

回答(2 个)

Stephane
Stephane 2023-5-13
编辑:KALYAN ACHARJYA 2023-5-13
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 个评论
Aaron Rosenberger
Aaron Rosenberger 2023-5-13
Thank you very much ! :).
The "findpeaks" function works for me
KALYAN ACHARJYA
KALYAN ACHARJYA 2023-5-13
You may accept the answer, if the answer helps to solve the issue.

请先登录,再进行评论。


Star Strider
Star Strider 2023-5-13
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)))
.

Community Treasure Hunt

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

Start Hunting!

Translated by