Как найти относительные минимумы вектора (не минимальное значение) - PullRequest
0 голосов
/ 28 февраля 2019

Давайте предположим, что у меня есть вектор значений, представление которого следующее:

enter image description here

Вектор данных имеет 2000 элементов и, как вы видитеесть еще один вектор с градусами от -180º до 180º.Я хотел бы найти индексы каждого минимального пика, но я не знаю, как реализовать алгоритм.

В других случаях я устанавливал пороговое значение (например, -75 дБм) и считал минимальным любое значение ниже -75 дБм, но в этом случае есть пики выше -70 дБм, и я не могу увеличить порогзначение, так как мои измерения будут неправильными.

Я надеюсь, что кто-то может мне помочь.Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 28 февраля 2019

Для таких данных лучше всего сгладить их, а затем использовать findpeaks.

Например,

%% parameters to adjsut
%smoothing window length
smthwin=50;
%minimum peak prominence
mpp=0.01;

%% create some test data
x=(1:1000)/1000;
y=sin(3*x-0.5).*sin(5*x).*sin(9*x-0.1).*sin(15*x-0.3)+rand(size(x))/10;

%% smooth and findpeaks
%smooth it
%here I use a median filter, but smooth() is a great function too with lots of options 
ysmth=medfilt1(y,smthwin);

%use findpeaks on -y to find local minima
[pks,pks_loc]=findpeaks(-ysmth,'MinPeakProminence',mpp);
%the location of the local minima is 
mins=x(pks_loc);

%%plot to check
figure
plot(x,y)
hold on
plot(mins,-pks,'o','LineWidth',2)
...