Signal Processing Toolbox |
FFT-based FIR filtering using overlap-add method
Syntax
Description
fftfilt
filters data using the efficient FFT-based method of overlap-add, a frequency domain filtering technique that works only for FIR filters.
y
filters the data in vector =
fftfilt(b,x)
x
with the filter described by coefficient vector b
. It returns the data vector y
. The operation performed by fftfilt
is described in the time domain by the difference equation:
An equivalent representation is the z-transform or frequency domain description:
By default, fftfilt
chooses an FFT length and data block length that guarantee efficient execution time.
If x
is a matrix, fftfilt
filters its columns. If b
is a matrix, fftfilt
applies the filter in each column of b
to the signal vector x
. If b
and x
are both matrices with the same number of columns, the i-th column of b
is used to filter the i-th column of x
.
y
uses n to determine the length of the FFT. See the Algorithm section below for information. =
fftfilt(b,x,n)
fftfilt
works for both real and complex inputs.
Comparison to FILTER function
When the input signal is relatively laree, it is advantageous to use fftfilt
instead of filter
. filter
performs N multiplications for each sample in x
, where N is the filter length. fftfilt
performs 2 FFT operations -- the FFT of the signal block of length L plus the inverse FT of the product of the FFTs -- at the cost of
where L is the block length. It then performs L pointwise multiplications for a total cost of
multiplcations. The cost ratio is therefore
which is approximately log2(L)/N.
Therefore, fftfilt
becomes advantageous when log2(L) is less than N.
Examples
Show that the results from fftfilt
and filter
are identical:
Algorithm
fftfilt
uses fft
to implement the overlap-add method [1], a technique that combines successive frequency domain filtered blocks of an input sequence. fftfilt
breaks an input sequence x
into length L
data blocks, where L must be greater than the filter length N.
and convolves each block with the filter b
by
where nfft
is the FFT length. fftfilt
overlaps successive output sections by n-1
points, where n
is the length of the filter, and sums them.
fftfilt
chooses the key parameters L
and nfft
in different ways, depending on whether you supply an FFT length n
and on the lengths of the filter and signal. If you do not specify a value for n
(which determines FFT length), fftfilt
chooses these key parameters automatically:
length(x)
is greater than length(b)
, fftfilt
chooses values that minimize the number of blocks times the number of flops per FFT.
length(b)
is greater than or equal to length(x)
, fftfilt
uses a single FFT of length
If you supply a value for n
, fftfilt
chooses an FFT length, nfft
, of 2^nextpow2(n)
and a data block length of nfft
- length(b)
+ 1
. If n
is less than length(b)
, fftfilt
sets n
to length(b)
.
See Also
conv
, dfilt.fftfir
, filter
, filtfilt
References
[1] Oppenheim, A.V., and R.W. Schafer, Discrete-Time Signal Processing, Prentice-Hall, 1989.
fft2 | fftshift |
© 1994-2005 The MathWorks, Inc.