局所最小値の並び替えを行いたい
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
yuta
am 6 Jul. 2022
Kommentiert: yuta
am 9 Jul. 2022
局所的最大値のドキュメンテーションに以下の説明があります。
x = linspace(0,1,1000);
Pos = [1 2 3 5 7 8]/10;
Hgt = [3 4 4 2 2 3];
Wdt = [2 6 3 3 4 6]/100;
for n = 1:length(Pos)
Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
end
PeakSig = sum(Gauss);
[psor,lsor] = findpeaks(PeakSig,x,'SortStr','descend');
psor
lsor
局所的最小値でも同様に並び替えが可能でしょうか?
lsorの様に局所的最小値のx軸の数値も抽出したいのですが、うまくいきません。
何か良い方法があればご教示いただければ幸いです。
0 Kommentare
Akzeptierte Antwort
Shunichi Kusano
am 7 Jul. 2022
上下をひっくり返せば局所最小値→局所最大値になりますので、検出が可能です。
この場合はベース(元のゼロ値)が最大値になるので、プロミネンスを上手く設定するなどして、所望の結果を得ることができるかと思います。
下記がサンプルになります。ゼロのところでの検出を除きたい場合、psor<-0.05等適当にフィルタリングする必要があります。
x = linspace(0,1,1000);
Pos = [1 2 3 5 7 8]/10;
Hgt = [3 4 4 2 2 3];
Wdt = [2 6 3 3 4 6]/100;
for n = 1:length(Pos)
Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
end
PeakSig = sum(Gauss);
[psor,lsor] = findpeaks(-PeakSig,x,'SortStr','descend','MinPeakProminence',0.3);
psor
lsor
% オプション(0付近の最小値を除きたい場合)
wantedIdx = psor<-0.05;
psor = psor(wantedIdx);
lsor = lsor(wantedIdx);
% 可視化
figure;
plot(x,PeakSig);
hold on;
plot(lsor,-psor,'ro');
text(lsor+.02,-psor,num2str((1:numel(psor))'))
2 Kommentare
Shunichi Kusano
am 7 Jul. 2022
回答してから気付きましたが、islocalmin関数を使ってもいいですね。
x = linspace(0,1,1000);
Pos = [1 2 3 5 7 8]/10;
Hgt = [3 4 4 2 2 3];
Wdt = [2 6 3 3 4 6]/100;
for n = 1:length(Pos)
Gauss(n,:) = Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);
end
PeakSig = sum(Gauss);
lminIdx = find(islocalmin(PeakSig)); % 局所最小値のインデックスを取得
lminValues = PeakSig(lminIdx); % 局所最小値を取得
[~,sortIdx] = sort(lminValues); % 小さい順に並び替えを取得
lminIdx = lminIdx(sortIdx); % 並べ替え
lsor = x(lminIdx);
psor = PeakSig(lminIdx);
% オプション(0付近の最小値を除きたい場合)
wantedIdx = psor>0.05;
psor = psor(wantedIdx);
lsor = lsor(wantedIdx);
% 可視化
figure;
plot(x,PeakSig);
hold on;
plot(lsor,psor,'ro');
text(lsor+.02,psor,num2str((1:numel(psor))'))
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu 信号の生成と前処理 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!