2

Matlab で作成されたパワー スペクトル密度プロットで最大ピークを見つけようとしています。プロットは問題なく作成できますが、正しくマークするのに苦労しています。find peaks と max 関数を使用して見つけましたが、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')

どんな助けでも大歓迎です。

4

1 に答える 1

6

データを置き換えてコードをそのままテストしたとき

data=randn(251,1);

...赤い o マーカーで示されたローカル ピーク位置が正しい位置にあることがわかりました。すべてのピークが最大ピークの高さでマークされただけです。

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

[MAX, MAXidx] = max(Pyy(1:128));
hold on
plot(f(MAXidx), MAX,'or')
于 2012-04-26T22:55:31.380 に答える