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()给了我太多结果,所以我正在使用这个功能.但是,如果我将阈值设置得太低,我会得到太多结果,如果我将它设置得太高,我会错过其中一个主要峰值.
我怎样才能做到这一点?
如果您的主要峰值与您包含的图表中的分离一样,那么有一个参数findpeaks()可以帮助很多.尝试:
findpeaks(x, 'MINPEAKDISTANCE', dist);
Run Code Online (Sandbox Code Playgroud)
与x成为您幅度和dist作为一个距离,你可以假设为2个峰之间TE最小距离.这可能会让你看到两个2*dist彼此之间的错误,如果是这样的话,可以考虑添加一个小的阈值'MINPEAKHEIGHT'
另一个选项是动态地计算阈值,例如通过计算平均值m和标准偏差sigma并通过仅计算n*sigma高于上面的峰值来设置阈值m.