Matlab 如何找到向量的相对最小值(不是最小值)
让我们假设我有一个值向量,其表示形式如下: 数据向量有2000个元素,如您所见,还有一个向量的角度介于-180º和180º之间。我想找到每个最小峰值的指数,但我不知道如何实现该算法 在其他情况下,我设置了一个阈值(例如-75dBm),并考虑了-75dBm以下的最小值,但在这种情况下,峰值在-70dBm以上,我不能增加阈值,因为我的测量结果将是错误的Matlab 如何找到向量的相对最小值(不是最小值),matlab,octave,Matlab,Octave,让我们假设我有一个值向量,其表示形式如下: 数据向量有2000个元素,如您所见,还有一个向量的角度介于-180º和180º之间。我想找到每个最小峰值的指数,但我不知道如何实现该算法 在其他情况下,我设置了一个阈值(例如-75dBm),并考虑了-75dBm以下的最小值,但在这种情况下,峰值在-70dBm以上,我不能增加阈值,因为我的测量结果将是错误的 我希望有人能帮助我。感谢您的回复。对于这样的数据,您最好的办法是平滑它,然后使用FindPeak 例如 %% parameters to adjs
我希望有人能帮助我。感谢您的回复。对于这样的数据,您最好的办法是平滑它,然后使用FindPeak 例如
%% 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)
使用卡尔曼/低通滤波器(因为数据看起来有噪声),然后使用内置函数
islocalmin
。我有Matlab 2015,函数islocalmin
似乎没有实现,因此您可以以相同的方式使用idy=findpeaks(-filtered_y)
当我过滤数据时,一些最小值太轻,以至于findpeaks
功能无法找到它们。有两种选择:1)改进过滤器2)不要应用过滤器并检测所有实际最小值(但你会得到很多最小值)。我不认为对数据进行平滑处理的笼统建议是最佳做法。。。您的峰值可能与原始数据中的峰值不一致。您最好使用findpeaks
的额外输出,并在高度和/或宽度阈值上限制已识别的峰值,如我在问题上所述,或者使用mpp
。