Question
I am having trying to plot the fft and its peaks on the same plot. I have read that passing the frequency vector in findpeaks will allow the second argument to be in frequency so i have done that in the code i provided below on line 13. However, I am having a hard time plotting the peaks and the fft on the same plot. If someone could point out how to plot this that would be appreciated. %take the fourier transform xdft = fft(x); xdft = xdft(1:length(x)/2+1); % create a frequency vector freq = 0:Fs/length(x):Fs/2; % plot magnitude figure(2) semilogx(freq,20*log10(abs(xdft))); xlabel('f(Hz)'); title('FFT of signal'); %locs is now in frequency [pks,frqs] = findpeaks(abs(X),freq); figure(3) plot(xdft(locs), pks, 'or')
Related Questions
Expert Answer
Prashant Kumar
PhD Expert
Answered Nov 20, 2025
You did not provide ‘x’ or any of the parameters (such as ‘Fs’) so it is not possible to run your code, and you could easily have posted your code as an attachment here instead of pastebin.
That aside, try this:
[pks,locs] = findpeaks(20*log10(abs(xdft));
figure(2)
semilogx(freq,20*log10(abs(xdft)))
hold on
plot(freq(locs), pks, 'or')
hold off
xlabel('f(Hz)');
title('FFT of signal')
It is necessary to use the same values in the plot as in the findpeaks arguments.
Have a different question? Ask here