【问题标题】:Detect and mark maximum peak on power spectral analysis plot using Matlab?使用Matlab检测并标记功率谱分析图上的最大峰值?
【发布时间】:2013-05-03 21:12:27
【问题描述】:

我试图在 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')

任何帮助将不胜感激。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    当我通过替换数据来测试您的代码时

    data=randn(251,1);
    

    ...我发现红色 o 标记指示的局部峰值位置在正确的位置。只是所有的峰都标记在最大峰的高度。

    我不能 100% 确定您要做什么,但看起来您似乎只是想找到最大峰值。如果是这种情况,那么您不需要 findpeaks 函数。只需将代码的最后几行替换为以下...

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

    【讨论】:

    • 这正是我想要做的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多