fft — fast Fourier transform.
x=fft(a ,-1) or x=fft(a) x=fft(a,1) or x=ifft(a) x=fft(a,-1,dim,incr) x=fft(a,1,dim,incr)
real or complex vector. Real or complex matrix (2-dim fft)
real or complex vector, matrix or multidimensionnal array.
integer
integer
x=fft(a,-1) or x=fft(a) gives a
direct transform.
If a is a vector a single variate direct FFT
is computed that is:
x(k)=sum over m from 1 to n of a(m)*exp(-2i*pi*(m-1)*(k-1)/n)
for k varying from 1 to n (n=size of vector
a).
(the -1 argument refers to the sign of the
exponent..., NOT to "inverse"),
If a is a matrix or or a multidimensionnal
array a multivariate direct FFT is performed.
a=fft(x,1) or a=ifft(x)performs the
inverse transform normalized by 1/n.
If a is a vector a single variate inverse FFT
is computed
If a is a matrix or or a multidimensionnal
array a multivariate inverse FFT is performed.
x=fft(a,-1,dim,incr) allows to perform an
multidimensional fft.
If a is a real or complex vector implicitly indexed by
j1,j2,..,jp i.e. a(j1,j2,..,jp) where
j1 lies in 1:dim(1), j2 in
1:dim(2),... one gets a p-variate FFT by calling p times
fft as follows
incrk=1; x=a; for k=1:p x=fft(x ,-1,dim(k),incrk) incrk=incrk*dim(k) end
where dimk is the dimension of the current variable
w.r.t which one is integrating and incrk is the increment
which separates two successive jk elements in
a.
In particular,if a is an mxn matrix,
x=fft(a,-1) is equivalent to the two instructions:
a1=fft(a,-1,m,1) and
x=fft(a1,-1,n,m).
//Comparison with explicit formula //---------------------------------- a=[1;2;3];n=size(a,'*'); norm(1/n*exp(2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,1)) norm(exp(-2*%i*%pi*(0:n-1)'.*.(0:n-1)/n)*a -fft(a,-1)) //Frequency components of a signal //---------------------------------- // build a noides signal sampled at 1000hz containing to pure frequencies // at 50 and 70 Hz sample_rate=1000; t = 0:1/sample_rate:0.6; N=size(t,'*'); //number of samples s=sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4)+grand(1,N,'nor',0,1); y=fft(s); //the fft response is symmetric we retain only the first N/2 points f=sample_rate*(0:(N/2))/N; //associated frequency vector n=size(f,'*') clf() plot2d(f,abs(y(1:n)))