以下のプログラムである点での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 件)

カテゴリ

ヘルプ センター および File ExchangeMATLAB Mobile についてさらに検索

質問済み:

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