Syntax
y = fftfilt(b,x)
y = fftfilt(b,x,n)
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 = fftfilt(b,x) filters the data in vector 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:
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 = fftfilt(b,x,n) uses n to determine the length of the FFT. See Algorithm for information.
1/2*L*log2(L)
where L is the block length. It then performs L pointwise multiplications for a total cost of
L+L*log2(L) = L*(1+log2(L))
L*(1+log2(L))/(N*L) = (1+log2(L))/N
Examples
Show that the results from fftfilt and filter are identical:
b = [1 2 3 4];
x = [1 zeros(1,99)]';
norm(fftfilt(b,x) - filter(b,1,x))
ans =
9.5914e-15
Algorithm
1 of 2 7/13/2010 6:29 PM
fftfilt :: Functions (Signal Processing Toolbox) text://1
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.
y = ifft(fft(x(i:i+L-1),nfft).*fft(b,nfft));
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:
If length(x)is greater than length(b), fftfilt chooses values that minimize the number of blocks times the
number of flops per FFT.
If length(b) is greater than or equal to length(x), fftfilt uses a single FFT of length
2^nextpow2(length(b) + length(x) - 1)
y = ifft(fft(B,nfft).*fft(X,nfft))
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).
References
[1] Oppenheim, A.V., and R.W. Schafer. Discrete-Time Signal Processing, Prentice-Hall, 1989.
See Also
conv, dfilt.fftfir, filter, filtfilt
2 of 2 7/13/2010 6:29 PM