Peaks of a function
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(2 个)
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 个评论
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)))
.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Spectral Measurements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!