0% found this document useful (0 votes)
23 views

Help - FFT - Functions (MATLAB®)

The discrete Fourier transform (DFT) is used to convert a signal from its original domain (often time) to the frequency domain. The fast Fourier transform (FFT) algorithm provides an efficient way to compute the DFT, breaking down the computation into smaller pieces. The fft function in MATLAB implements the FFT to compute the DFT of a vector or matrix. It returns the frequency spectrum of the input signal, which can be used to identify its underlying frequency components.

Uploaded by

Verdi bob
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views

Help - FFT - Functions (MATLAB®)

The discrete Fourier transform (DFT) is used to convert a signal from its original domain (often time) to the frequency domain. The fast Fourier transform (FFT) algorithm provides an efficient way to compute the DFT, breaking down the computation into smaller pieces. The fft function in MATLAB implements the FFT to compute the DFT of a vector or matrix. It returns the frequency spectrum of the input signal, which can be used to identify its underlying frequency components.

Uploaded by

Verdi bob
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

fft

Discrete Fourier transform

Syntax
Y = fft(X)
Y = fft(X,n)
Y = fft(X,[],dim)
Y = fft(X,n,dim)

Definition
The functions Y=fft(x) and y=ifft(X) implement the transform and inverse
transform pair given for vectors of length by:

where

is an th root of unity.

Description
Y = fft(X) returns the discrete Fourier transform (DFT) of vectorX, computed with a
fast Fourier transform (FFT) algorithm.
If X is a matrix, fft returns the Fourier transform of each column of the matrix.
If X is a multidimensional array, fft operates on the first nonsingleton dimension.

Y = fft(X,n) returns the n-point DFT. If the length of X is less than n, X is padded
with trailing zeros to length n. If the length of X is greater than n, the sequence X is
truncated. When X is a matrix, the length of the columns are adjusted in the same
manner.
Y = fft(X,[],dim) and Y = fft(X,n,dim) applies the FFT operation across
the dimension dim.

Examples
A common use of Fourier transforms is to find the frequency components of a signal
buried in a noisy time domain signal. Consider data sampled at 1000 Hz. Form a signal
containing a 50 Hz sinusoid of amplitude 0.7 and 120 Hz sinusoid of amplitude 1 and
corrupt it with some zero-mean random noise:

Fs = 1000; % Sampling frequency


T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t)); % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

It is difficult to identify the frequency components by looking at the original signal.


Converting to the frequency domain, the discrete Fourier transform of the noisy signal y
is found by taking the fast Fourier transform (FFT):

NFFT = 2^nextpow2(L); % Next power of 2 from length of y


Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);

% Plot single-sided amplitude spectrum.


plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
The main reason the amplitudes are not exactly at 0.7 and 1 is because of the noise.
Several executions of this code (including recomputation of y) will produce different
approximations to 0.7 and 1. The other reason is that you have a finite length signal.
Increasing L from 1000 to 10000 in the example above will produce much better
approximations on average.

Algorithm
The FFT functions (fft, fft2, fftn, ifft, ifft2, ifftn) are based on a library
called FFTW [3],[4]. To compute an -point DFT when is composite (that is, when
), the FFTW library decomposes the problem using the Cooley-Tukey
algorithm [1], which first computes transforms of size , and then computes
transforms of size . The decomposition is applied recursively to both the - and
-point DFTs until the problem can be solved using one of several machine-generated
fixed-size "codelets." The codelets in turn use several algorithms in combination,
including a variation of Cooley-Tukey [5], a prime factor algorithm [6], and a split-radix
algorithm [2]. The particular factorization of is chosen heuristically.

When is a prime number, the FFTW library first decomposes an -point problem
into three ( )-point problems using Rader's algorithm [7]. It then uses the
Cooley-Tukey decomposition described above to compute the ( )-point DFTs.
For most , real-input DFTs require roughly half the computation time of complex-input
DFTs. However, when has large prime factors, there is little or no speed difference.
The execution time for fft depends on the length of the transform. It is fastest for
powers of two. It is almost as fast for lengths that have only small prime factors. It is
typically several times slower for lengths that are prime or which have large prime
factors.

Note You might be able to increase the speed of fft using the utility
function fftw, which controls the optimization of the algorithm used to
compute an FFT of a particular size and dimension.

Data Type Support


fft supports inputs of data types double and single. If you call fft with the syntax
y = fft(X, ...) , the output y has the same data type as the input X.

See Also
fft2, fftn, fftw, fftshift , ifft
dftmtx, filter, and freqz in the Signal Processing Toolbox

References
[1] Cooley, J. W. and J. W. Tukey, "An Algorithm for the Machine Computation of the
Complex Fourier Series,"Mathematics of Computation, Vol. 19, April 1965, pp. 297-301.
[2] Duhamel, P. and M. Vetterli, "Fast Fourier Transforms: A Tutorial Review and a State
of the Art," Signal Processing, Vol. 19, April 1990, pp. 259-299.
[3] FFTW (http://www.fftw.org )

[4] Frigo, M. and S. G. Johnson, "FFTW: An Adaptive Software Architecture for the
FFT,"Proceedings of the International Conference on Acoustics, Speech, and Signal
Processing, Vol. 3, 1998, pp. 1381-1384.
[5] Oppenheim, A. V. and R. W. Schafer, Discrete-Time Signal Processing ,
Prentice-Hall, 1989, p. 611.
[6] Oppenheim, A. V. and R. W. Schafer, Discrete-Time Signal Processing ,
Prentice-Hall, 1989, p. 619.
[7] Rader, C. M., "Discrete Fourier Transforms when the Number of Data Samples Is
Prime," Proceedings of the IEEE , Vol. 56, June 1968, pp. 1107-1108.

Was this topic helpful? Yes No

© 1984-2010 The MathWorks, Inc. Terms of Use Patents Trademarks


Acknowledgments

You might also like