如何找到向量的相对最小值(不是最小值)

时间:2019-02-28 10:59:18

标签: matlab octave

让我们假设我有一个值的向量,其表示形式如下:

enter image description here

数据向量有2000个元素,如您所见,还有另一个向量的度在-180º和180º之间。我想找到每个最小峰的索引,但是我不知道如何实现该算法。

在其他情况下,我设置了一个阈值(例如-75dBm),并认为-75dBm以下的任何最小值,但是在这种情况下,存在-70dBm以上的峰值,并且由于我测量将是错误的。

我希望有人能帮助我。谢谢您的回复。

1 个答案:

答案 0 :(得分:0)

对于这样的数据,最好的选择是将其平滑,然后使用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)