如何找到最高峰的x& y坐标并将数据存储到变量

时间:2018-06-13 14:00:01

标签: matlab

首先,如果这看起来像是一个非常基本的问题,我很抱歉,但我刚刚开始学习Matlab,而且我遇到了一个我似乎找不到在线解决方案的问题。

我执行了信号的fft并绘制了幅度与频率的关系图。我还使用Savitsky Golay滤镜来平滑情节,这样会更容易。

我的问题是,我想找到最大峰值的X和Y坐标,并将数据存储在变量中。峰的位置显示在附图中。我试图用findpeaks()函数找到一种方法,但没有成功。我可能一直在使用它。

Image of fft plot

我还添加了迄今为止我能够做到的代码。

num = xlsread('C:\UTwente\Q4\Structural Health and Condition monitoring\Case Roadbridge (Zwartewaterbrug)\00001 Cars 03-23-17 09.29.07 AM.xlsx','Measurement data');

sig = num(:,16);
sig = sig - mean(sig);                                      % Remove d-c Offset
L = length(sig);
Fs = 1000;                                                  % Sampling Frequency
Fn = Fs/2;                                                  % Nyquist Frequency
FTsig = fft(sig)/L;
Fv = linspace(0, 1, fix(length(FTsig)/2)+1)*Fn;             % Frequency Vector
Iv = 1:length(Fv);                                          % Index Vector
FTsiga = double(abs(FTsig(Iv))*2);                          % Truncate, Magnitude, Convert To Double
sgf_sm = sgolayfilt(FTsiga, 5, 501);                        % Create ‘sgolayfilt’ Filtered FFT
figure(1)
plot(Fv, FTsiga)
hold on
plot(Fv, sgf_sm, '-r', 'LineWidth',2)
hold off
grid
xlabel('Frequency')
ylabel('Amplitude')
legend('Original Spectrum', 'Smoothed & Filtered Spectrum')

1 个答案:

答案 0 :(得分:1)

我相信你正在寻找findpeaks()功能。它用于查找局部最大值,但您可以通过更改其参数来找到绝对最大值:

[peaks, locations] = findpeaks(Y,X,'NPeaks',1,'sortstr','descend');

此处是Y,X是您的FTsigaFv数组。“NPeaks”显示您想要多少个本地峰值,而'sortstr'显示您想要如何对它们进行排序。