Help with Fourier transform fft

조회 수: 23 (최근 30일)
aurc89
aurc89 2014년 9월 18일
편집: Rick Rosson 2014년 9월 20일
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
Mikhail
Mikhail 2014년 9월 18일
Please explain, what do you mean by double-sided signal and one-side signal
Rick Rosson
Rick Rosson 2014년 9월 19일
편집: Rick Rosson 2014년 9월 20일
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).

댓글을 달려면 로그인하십시오.

채택된 답변

Rick Rosson
Rick Rosson 2014년 9월 19일
편집: Rick Rosson 2014년 9월 19일
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

추가 답변 (2개)

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

Shravankumar P
Shravankumar P 2014년 9월 18일

카테고리

Help CenterFile Exchange에서 Discrete Fourier and Cosine Transforms에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by