2012-04-26 10 views
2

私は、Matlabで作成されたパワースペクトル密度プロットで最大ピークを見つけようとしています。私はプロットを作成することはできますが、正しく表示するのは難しいです。 find peaksとmax関数を使って見つけることができますが、Matlabはそれを正しくマークできません。それは正しい高さを見つけますが、それを左または右に少しマークします。コードは次のとおりです。Matlabを使用してパワースペクトル解析プロットの最大ピークを検出してマークしますか?

data = load ('EEGData(test1).txt', '-ascii'); 
figure(1) 
plot(data) 

Y =fft(data,251); 

Pyy = Y.*conj(Y)/251; 

f = 1000/251*(0:127); 

figure(2) 
plot(f,Pyy(1:128)) 
title('Power spectral density') 
xlabel('Frequency (Hz)') 

[a,b] = findpeaks(Pyy(1:128)); 
MAX = max(a); 
hold on 
plot(f(b), MAX,'or') 

ご協力いただければ幸いです。

data=randn(251,1); 

でデータを交換することであると私はあなたのコードをテストしたとき

答えて

5

...私は赤いOマーカーで示される局所ピークの位置が正しい位置にあったことがわかりました。最大ピークの高さですべてのピークがマークされたということだけでした。

私はあなたが何をしようとしているかを100%確信していませんが、最大のピークを見つけようとしているかのように見えます。この場合、findpeaks関数は必要ありません。あなたのコードの最後の数行を次のように置き換えてください。

[MAX, MAXidx] = max(Pyy(1:128)); 
hold on 
plot(f(MAXidx), MAX,'or') 
+0

これはまさに私がやろうとしていたものでした。本当にありがとう! – user1359861

+1

偉大な、その後、受け入れボタンを押してください。 – learnvst

関連する問題