Find the nonzero maximum frequency corresponding to FFT graph.

3 Ansichten (letzte 30 Tage)
I want to find the maximum corresponding frequency for the ftt graph. The graph shows the maximum frequency at zero frequency, this is not what I want. I am expecting to have a value around 664 Hz.
The codes:
so=dat.data(:,2); %original signal
t=dat.data(:,1); %time
dt=t(2)-t(1);
Fs=1/dt; %sampling frequency
f=linspace(0,Fs,length(t));
%Fourier Transform
SO=fft(so);
SOa=abs(SO);
F_fake=f(find(SOa(1:round(length(SOa)/2))==max(SOa))); % I am getting zero instead of 663.9 Hz.
I want a value which is nonzero. How to eliminate the zero Hz frequency ?
FFT graph.

Akzeptierte Antwort

David Goodmanson
David Goodmanson am 27 Apr. 2023
Bearbeitet: David Goodmanson am 27 Apr. 2023
Hi Zahra,
the peak at zero frequency is because your signal does not have average value of zero, but has a DC offset. To eliminate the zero freq peak you can remove the offset by subracting the mean off of the signal. So you can use not fft(signal) but rather fft(signal-mean(signal)). (This assumes that the DC offset is not of interest in this case).
  2 Kommentare
Zahra
Zahra am 27 Apr. 2023
Thank you. Would you please explain more about what does DC offset mean?
David Goodmanson
David Goodmanson am 28 Apr. 2023
DC offset is a bit of a slang term in the sense that it refers to electrical voltage or current signals, not the most general possible signal. Suppose you have a complicated signal and take the fft. The zero frequency term from the fft corresponds to a constant value in the time domain. Now consider a simple example of constant term of value 3 and just one nonzero frequency of amplitude 10. In terms of voltage this is modeled as a 10V cosine signal in series with a 3V battery, 10*cos(2*pi*f) + 3. The cosine term of course has mean value of 0 and the constant term, 3, is called the DC offset.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Paul
Paul am 27 Apr. 2023
Bearbeitet: Paul am 27 Apr. 2023
If the DC offset is of interest (or even if it isn't)
[maxSOa,index] = max(SOa(2:end)); % ignores first point a f=0
F_fake = f(index+1)
This approach will find the the frequency corresponding to the first maximum value in SOa(2:end) should there be multiple occurrences of the maximum value.

Kategorien

Mehr zu Fourier Analysis and Filtering finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by