Help with Fourier transform fft

18 vues (au cours des 30 derniers jours)
aurc89
aurc89 le 18 Sep 2014
Modifié(e) : Rick Rosson le 20 Sep 2014
I need to use the matlab function 'fft' to perform a Fourier transform, but the problem is that it always gives me a double-sided signal, while I would like to have a one-side signal. I sometimes use this function :
function four=FourierDir(t,s,nu)
% number of points in the time domain
N=length(t);
Nf=length(nu);
% sampling step in the time domain
Dt=diff(t);
Dt(N)=Dt(N-1);
four=zeros(1,Nf);
for ii=1:Nf
four(ii)=sum(Dt.*s.*exp(-1i*2*pi.*t.*nu(ii)));
end;
Can you suggest me an equivalent one made with fft , given as input t, s and nu ? Thanks so much.
  2 commentaires
Mikhail
Mikhail le 18 Sep 2014
Please explain, what do you mean by double-sided signal and one-side signal
Rick Rosson
Rick Rosson le 19 Sep 2014
Modifié(e) : Rick Rosson le 20 Sep 2014
The Discrete Fourier Transform of a real-valued signal is conjugate symmetric. The double-sided spectrum shows the spectrum as a function of both positive and negative frequencies on the range [-Fs/2,+Fs/2), whereas the single-sided spectrum shows the spectrum for positive frequencies only, on [0,+Fs/2).

Connectez-vous pour commenter.

Réponse acceptée

Rick Rosson
Rick Rosson le 19 Sep 2014
Modifié(e) : Rick Rosson le 19 Sep 2014
function [ X,f,t ] = mydft(x,Fs)
% Assumes x is an N x 1 column vector
% and Fs is the sampling rate.
N = size(x,1);
dt = 1/Fs;
t = dt*(0:N-1)';
dF = Fs/N;
f = dF*(0:N/2-1)';
X = fft(x)/N;
X = X(1:N/2);
X(2:end) = 2*X(2:end);
figure;
plot(f,abs(X));
end

Plus de réponses (2)

Youssef  Khmou
Youssef Khmou le 18 Sep 2014
Generally fft is two sided , you just need to truncate it :
F=f(1:floor(end/2));

Shravankumar P
Shravankumar P le 18 Sep 2014

Community Treasure Hunt

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

Start Hunting!

Translated by