1

MATLAB Figure のピークの x 座標を取得しようとしています (例を添付)。を使用してきましたがfindpeaks、線ではなく点をプロットしているという事実が気に入らないようです。

いつも 2 つのピークがあるとは限りません。3つ持つときもあれば、1つ持つときもあります。複数のピークは常に x の範囲の少なくとも 1/4 で区切られ、ピークは常にノイズ レベルの少なくとも 2 倍になります。

これが私が期待するものです:

[pks,locs] = findpeaks(yData,...
                       'SortStr','descend',...
                       'MinPeakDistance',floor(range(xData)/4),...
                       'MinPeakHeight',floor(max(yData)/2)...
                       )

2 つのピークを取得する代わりに、4 つのすべてが最初のピークの周りにまとめられています。

>> locs

locs =

    6774      166785      326792      486799
>> xData(locs)

ans = 

-96780.787939025         -96770.1800919265   
-96770.8959353367        -96771.6117787468

MinPeakDistance は、データ自体ではなく xData インデックスで動作していると思います。ピークのインデックス間の距離ではなく、ピーク間の距離を使用するにはどうすればよいですか?

ここに画像の説明を入力

4

2 に答える 2

0

私はモリーの答えを受け入れましたが、少し手間がかかりませんが、エレガントではありません。

  %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);
于 2013-08-07T16:36:08.427 に答える