Как найти координаты x & y наивысшего пика и сохранить данные в переменной - PullRequest
0 голосов
/ 13 июня 2018

Во-первых, я прошу прощения, если это может показаться очень простым вопросом, но я только начинаю изучать Matlab, и я столкнулся с проблемой, которая, как мне кажется, не может найти решение онлайн.

Я выполнил БПФ сигнала и построил график зависимости амплитуды от частоты.Я также использовал фильтр Савицкого Голея для сглаживания графика, чтобы было проще.

Моя проблема в том, что я хочу найти координаты X и Y наибольшего пика и сохранить данные в переменной.Расположение вершины показано на рисунке, который прикреплен.Я пытался найти способ сделать это с помощью функции findpeaks (), но безуспешно.Возможно, я использовал это неправильно.

Изображение 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 голосов
/ 14 июня 2018

Я полагаю, вы ищете функцию findpeaks().он используется для поиска локальных максимумов, но вы можете найти абсолютные максимумы, изменив его аргументы:

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

здесь Y, а X - ваши FTsiga и Fv массивы. 'NPeaks' показывает, сколько изместные пики, которые вы хотите, и 'sortstr' показывает, как вы хотите отсортировать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...