我试图在MATLAB图形中得到峰值的x坐标(例子附后)。我一直在使用findpeaks,但它似乎不喜欢我正在绘制点而不是线条的事实。
我不会总是有两个高峰。有时我会有三个,有时我会有一个。多个峰值总是至少以x范围的1/4分开,而峰值总是至少是噪声水平的两倍。
以下是我所期望的效果:
[pks,locs] = findpeaks(yData,...
'SortStr','descend',...
'MinPeakDistance',floor(range(xData)/4),...
'MinPeakHeight',floor(max(yData)/2)...
)我没有得到两个峰,而是在第一个峰周围捆绑了四个:
>> locs
locs =
6774 166785 326792 486799
>> xData(locs)
ans =
-96780.787939025 -96770.1800919265
-96770.8959353367 -96771.6117787468我假设MinPeakDistance正在处理in xData索引,而不是数据本身。我如何使它使用之间的距离,峰之间的距离,而不是之间的指数的峰值?

发布于 2013-08-07 16:15:41
findpeaks对x坐标和你所绘制的坐标一无所知。您需要根据索引指定MinPeakDistance。下面是一个例子:
xData = -100:1:-1;
yData = rand(1,100);
yData(10) = 100; % peak
yData(11) = 99; % not a peak
yData(50) = 100; % peak
yData(51) = 99; % not a peak
[pks,locs] = findpeaks(yData,...
'SortStr','descend',...
'MinPeakDistance',floor(length(yData)/4),...
'MinPeakHeight',floor(max(yData)/2)...
);
xLocs = xData(locs);
pks =
100 100
locs =
10 50发布于 2013-08-07 16:36:08
虽然我接受了莫莉的回答,但我发现我自己的答案稍微少了一些,但不那么优雅:
%find all peaks significantly above noise floor
[pks,locs] = findpeaks(yData,'SortStr','descend','MinPeakHeight',floor(max(yData)/2));
xLocs = xData(locs);
%find number of peak clusters
numPeaks = length(unique(round(xLocs/100)));
%find locations of numPeaks peaks
[pks,locs] = findpeaks(yData,'SortStr','descend','npeaks',numPeaks);https://stackoverflow.com/questions/18107695
复制相似问题