Finding the main frequency after fft
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I've got these blocks in simulink:
Sine Wave -> Buffer -> Matrix sum -> Matlab function.
I have to find the frequency of the input, so I wrote some code in Matlab function (by the http://www.mathworks.com/help/techdoc/ref/fft.html) :
{
function [freq, amp] = fcn(u)
%#codegen
Fs=2000;
T=1/Fs;
L=length(u);
t = (0:L-1)*T;
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(u,NFFT);
f = Fs/2*linspace(0,1,NFFT/2+1);
amp = abs(max(Y));
}
It's working properly, I'm getting the maximum value, but I can't get from code frequency of maxium value :/ how Can I get it? Thank You for response.
Best regards, Pawel
0 Kommentare
Akzeptierte Antwort
Wayne King
am 17 Sep. 2011
Hi, You have to find the corresponding index in a frequency vector. For example:
Fs = 1e3;
t = 0:.001:1-0.001;
x = cos(2*pi*100*t)+randn(size(t));
xdft = fft(x);
[~,index] = max(abs(xdft(1:length(x)/2+1)));
freq = 0:(Fs/length(x)):Fs/2;
% freq(index)
fprintf('Maximum occurs at %2.3f Hz\n',freq(index))
Wayne
0 Kommentare
Weitere Antworten (1)
Pawel Burzynski
am 17 Sep. 2011
3 Kommentare
Wayne King
am 23 Sep. 2011
Can you please provide code? It is hard to say the source of the error without a coded example.
Siehe auch
Kategorien
Mehr zu Spectral Measurements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!