用Matlab求FFT图中5次谐波的峰值

用Matlab求FFT图中5次谐波的峰值,matlab,plot,fft,Matlab,Plot,Fft,我有一个有几个峰值的FFT图。我需要matlab能够读取前5个峰值的峰值(我知道峰值位于50的倍数) 以下是我提出的伪代码: i=0; j=0; array[5]; for(i:n_samples){ if(FFT(i)rem50==0){ // FFT is a variable that has fft array[j]=FFT[i]; } i++; J++; if(j>5){ break; }

我有一个有几个峰值的FFT图。我需要matlab能够读取前5个峰值的峰值(我知道峰值位于50的倍数)

以下是我提出的伪代码:

i=0;
j=0;
array[5];

for(i:n_samples){
    if(FFT(i)rem50==0){   // FFT is a variable that has fft 
        array[j]=FFT[i];
    }

    i++;
    J++;

    if(j>5){
        break;
    }
}

但这是一种非常野蛮的方式。有没有更好的办法?可能有任何内置函数?

您的伪代码可以简化为:

FFT(1:50:250)

但我认为
findpeaks
会更稳健

比如说,找到前5个峰,最小高度为0.5,彼此之间的距离为10点

[pks, locs] = findpeaks(FFT, 'NPEAKS', 3, 'MINPEAKHEIGHT', 0.5, 'MINPEAKDISTANCE', 10);
然后,
pks
是您的
y
locs
是您的
x
与您的峰值的协调


希望对您有所帮助

您是否尝试过使用
findpeaks