fftfilt() - Signal Processing
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:y(n)=b(1)x(n)+b(2)x(n−1)+⋯+b(nb+1)x(n−nb)An equivalent representation is the Z-transform or frequency
domain description:Y(z)=(b(1)+b(2)z−1+⋯+b(nb+1)z−nb)X(z)By default, fftfilt chooses an FFT length
and a 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 ith column
of b is used to filter the ith
column of x.y = fftfilt(b,x,n) uses n to
determine the length of the FFT. See Algorithms for information.y = fftfilt(d,x) filters the data in vector x with
a digitalFilter object, d.
Use designfilt to generate d based
on frequency-response specifications.y = fftfilt(d,x,n) uses n to
determine the length of the FFT.y = fftfilt(gpuArrayb,gpuArrayX,n) filters
the data in the gpuArray object, gpuArrayX,
with the FIR filter coefficients in the gpuArray, gpuArrayb.
See Establish Arrays on a GPU for
details on gpuArray objects. Using fftfilt with gpuArray objects
requires Parallel Computing Toolbox™ software and a CUDA-enabled
NVIDIA GPU with compute capability 1.3 or above. See http://www.mathworks.com/products/parallel-computing/requirements.html for
details. The filtered data, y, is a gpuArray object.
See Overlap-Add Filtering on the GPU for
example of overlap-add filtering on the GPU.fftfilt works for both real and complex inputs.Comparison to filter functionWhen the input signal is relatively large, it is advantageous
to use fftfilt instead of filter,
which 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½Llog2Lwhere L is the block length. It then performs L point-wise
multiplications for a total cost ofL + Llog2L = L(1 + log2L)multiplications. The cost ratio is thereforeL(1+log2L) / (NL) = (1 + log2L)/Nwhich is approximately log2L / N.Therefore, fftfilt becomes advantageous when
log2Lis less than N.
y = fftfilt(b,x)y = fftfilt(b,x,n)y = fftfilt(d,x)y = fftfilt(d,x,n)y = fftfilt(gpuArrayb,gpuArrayX,n)
y = ifft(fft(x(i:i+L-1),nfft).*fft(b,nfft));
Output / Return Value
Alternatives / See Also