如何在matlab中找到主峰(fft)

tgu*_*926 2 matlab signal-processing fft

我无法在此图中找到4个主要峰值

图形

信号值非常紧张,因为它们上升然后下降,使得很难找到最大值和它的索引.

function [peaks, locations] = findMaxs (mag, threshold)
len = length(mag);

prev = 1;
cur = 2;
next = 3;
k = 1; %number of peaks
while next < len
    if mag(cur) - mag(prev) > threshold
        if mag(cur) > mag(next)
            peaks(k) = mag(cur);
            fprintf('peak at %d\n', cur);
            k = k + 1;
        end
    end
    prev = cur;
    cur = next;
    next = next + 1;
end

end
Run Code Online (Sandbox Code Playgroud)

findpeaks()给了我太多结果,所以我正在使用这个功能.但是,如果我将阈值设置得太低,我会得到太多结果,如果我将它设置得太高,我会错过其中一个主要峰值.

我怎样才能做到这一点?

ben*_*ben 5

如果您的主要峰值与您包含的图表中的分离一样,那么有一个参数findpeaks()可以帮助很多.尝试:

findpeaks(x, 'MINPEAKDISTANCE', dist);
Run Code Online (Sandbox Code Playgroud)

x成为您幅度和dist作为一个距离,你可以假设为2个峰之间TE最小距离.这可能会让你看到两个2*dist彼此之间的错误,如果是这样的话,可以考虑添加一个小的阈值'MINPEAKHEIGHT'

另一个选项是动态地计算阈值,例如通过计算平均值m和标准偏差sigma并通过仅计算n*sigma高于上面的峰值来设置阈值m.