以下のプログラムである点での3時間おきの気温をフーリエ変換しプロットしました。 次に添付のようにピークを検出しそのピーク値を出力し図示するようにしたいのですが、以下のプログラムでは図示できません。 図示し、ピーク値の大きい順に番号をふり、何番目までを出力と制限できればと考えています。 サイトをやって見たのですが、うまくいかず、何かアドバイス頂けると幸いです。
以下プログラムです
filename =('1.txt');
x = load(filename);
[pxx,w] = periodogram(x);
plot(w,10*log10(pxx))
pks = findpeaks(pxx);
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')

 채택된 답변

mizuki
mizuki 2016년 11월 9일

2 개 추천

ピーク値の数を定めるには 'NPeaks' オプションを使用します。
また、ピーク値をソートするには 'SortStr' オプションを使用します。
これらオプションについては、 findpeaks のドキュメントの入力引数 > 名前/値のペアの引数 の項目に詳細が記載されています。
例えば、ピーク値の大きいものから5番目までを抽出したい場合は、以下のようなコードになります。
filename =('1.txt');
x = load(filename);
[pxx,w] = periodogram(x);
plot(w,10*log10(pxx))
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
[psor,lsor] = findpeaks(10*log10(pxx), w, 'NPeaks', 5, 'SortStr','descend');
findpeaks(10*log10(pxx), w, 'NPeaks', 5)
text(lsor+.02,psor,num2str((1:numel(psor))'))
最後のtextコマンドの部分は、ドキュメントの例 "ピークとその位置の検索" にあるものを使用しました。

댓글 수: 3

mizuki
mizuki 2016년 11월 10일
すみません。添付資料を見逃していました。
ピークの数指定 NPeaks と合わせて、ピークごとの最小間隔 MinPeakDistance を調節してピークを取ることができます。
[psor,lsor] = findpeaks(10*log10(pxx), w, 'NPeaks', 5, 'SortStr','descend');
findpeaks(10*log10(pxx), w, 'NPeaks', 5, 'MinPeakDistance',0.5)
Naoki Ishibashi
Naoki Ishibashi 2016년 11월 10일
ご丁寧にご回答頂き、本当にありがとうございます。 ご教授頂いた方法でうまくいきました。
mizuki
mizuki 2016년 11월 10일
Ishibashi さん、ご希望どおりで良かったです!
またわからない点がありましたらどんどんご質問してくださいね。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

질문:

2016년 11월 9일

댓글:

2016년 11월 10일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by