質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

2回答

12027閲覧

matlabでピーク検出

mitan

総合スコア27

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2016/11/29 07:27

イメージ説明

上のような不安定な正弦波の信号があるとします。
この正弦波の最大ピークを見つけて、この最大ピークに次いで2番目に大きいピークを見つけるという作業を繰り返すプログラムが組みたいのですがうまくいきません。できれば4つの座標情報をワークスペースに記録もしたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

findpeaksを使うにはtoolboxが必要です。環境によっては使えない可能性があります。
全てのピークを見つけしかるべき順序付けするだけであれば自分で簡単に作れます。

離散的な時系列に対して、ある点が局所的に最大であるとは、
「その点の後ろの値との差分が正、前の値との差分が負」
と言い換えることができます。

プログラムは簡単です。
以下、境界点は局所最大でも最小でもないと仮定しています。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 信号の例
t = 0:1000;t=t(:);
y = sin(t/20)+2cos(t/6)-1/2sin(t/12)-cos(t/2000);
%y = randn(size(t));

% ピーク検出
dy = y(2:end)-y(1:end-1);
fd= [dy;0];% t(1),t(2),..,t(end-1),t(end)における前進差分.t(end)における前進差分は0と仮定
bd=[0;dy];%t(1),t(2),t(3),...,t(end)における後退差分を計算. t(1)における後退差分は0と仮定
idx =find( (fd < 0)&(bd > 0) );% local max = df<0 かつ bd>0

lt=t(idx);%局所最大点 を与える時刻を lt に保存
ly=y(idx);%局所最大点を保存

% ピークの並び替え
[ly, id] = sort(ly,'descend');%局所最大点を降順に並び替え
lt=lt(id);% ltの並び替え
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

正しい結果が得られているかグラフを書いて確認してください。
plot(t,y,'.-')
hold on
plot(lt, ly,'o')
% ついでのピークの順位も表示
for k=1:length(lt)
text(lt(k), ly(k)+0.1,num2str(k)) % ピークの上に順位を表示
end
hold off

ちなみに
idx =find( (fd > 0)&(bd < 0) );
とすれば局所最小点が求まります。

投稿2016/11/29 10:04

編集2016/11/29 13:14
WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitan

2016/11/30 05:07

findpeaksは使えます。その場合、このプログラムを簡単にすることはできますでしょうか?
WathMorks

2016/11/30 05:14

その場合、ピークを検出する部分が不要になります。 [ly, lt] = findpeaks(y);%ピークの場所ltと値lyを検出。 あとは同じ。 [ly, id] = sort(ly,'descend');%局所最大点lyを降順に並び替え lt=lt(id);% ltの並び替え
guest

0

findpeaksを使います。使用例がMATLABのページピーク解析にあります。

投稿2016/11/29 08:09

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問