Adaptive filter that uses discrete Fourier transform
adaptfilt.tdafdft
will be removed in a
future release.
ha = adaptfilt.tdafdft(l,step,leakage,offset,
delta,lambda,...coeffs,states)
ha = adaptfilt.tdafdft(l,step,leakage,offset,
constructs a transformdomain
adaptive filter object
delta,lambda,...coeffs,states)ha
using a discrete Fourier
transform.
For information on how to run data through your adaptive filter
object, see the Adaptive Filter Syntaxes section of the reference
page for filter
.
Entries in the following table describe the input arguments
for adaptfilt.tdafdft
.
Input Argument  Description 

 Adaptive filter length (the number of coefficients or
taps) and it must be a positive integer. 
 Adaptive filter step size. It must be a nonnegative scalar.
You can use 
 Leakage parameter of the adaptive filter. When you set
this argument to a value between zero and one, you are implementing
a leaky version of the TDAFDFT algorithm. 
 Offset for the normalization terms in the coefficient
updates. You can use this argument to avoid dividing by zeros or by
very small numbers when any of the FFT input signal powers become
very small. 
 Initial common value of all of the transform domain powers.
Its initial value should be positive. 
 Averaging factor used to compute the exponentiallywindowed
estimates of the powers in the transformed signal bins for the coefficient
updates. 
 Initial time domain coefficients of the adaptive filter.
Set it to be a length 
 Initial conditions of the adaptive filter. 
Since your adaptfilt.tdafdft
filter is an
object, it has properties that define its behavior in operation. Note
that many of the properties are also input arguments for creating adaptfilt.tdafdft
objects.
To show you the properties that apply, this table lists and describes
each property for the transform domain filter object.
Name  Range  Description 

 None  Defines the adaptive filter algorithm the object uses during adaptation 
 Averaging factor used to compute the exponentiallywindowed
estimates of the powers in the transformed signal bins for the coefficient
updates.  
 Vector of elements  Vector containing the initial filter coefficients. It
must be a length 
 Any positive integer  Reports the length of the filter, the number of coefficients or taps 
 0 to 1  Leakage parameter of the adaptive filter. When you set
this argument to a value between zero and one, you are implementing
a leaky version of the TDAFDFT algorithm. 
 Offset for the normalization terms in the coefficient
updates. You can use this argument to avoid dividing by zeros or by
very small numbers when any of the FFT input signal powers become
very small.  

 Determines whether the filter states get restored to
their starting values for each filtering operation. The starting values
are the values in place when you create the filter. 
 2*  A vector of 2* 
 Vector of elements, data type double  Vector of the adaptive filter states. 
 0 to 1  Step size. It must be a nonnegative scalar, greater than
zero and less than or equal to 1. 
Quadrature Phase Shift Keying (QPSK) adaptive equalization using a 32coefficient FIR filter (1000 iterations).
D = 16; % Number of samples of delay b = exp(1j*pi/4)*[0.7 1]; % Numerator coefficients of channel a = [1 0.7]; % Denominator coefficients of channel ntr= 1000; % Number of iterations s = sign(randn(1,ntr+D)) + 1j*sign(randn(1,ntr+D));% Baseband QPSK signal n = 0.1*(randn(1,ntr+D) + 1j*randn(1,ntr+D)); % Noise signal r = filter(b,a,s)+n; % Received signal x = r(1+D:ntr+D); % Input signal (received signal) d = s(1:ntr); % Desired signal (delayed QPSK signal) L = 32; % filter length mu = 0.01; % Step size ha = adaptfilt.tdafdft(L,mu); [y,e] = filter(ha,x,d); subplot(2,2,1); plot(1:ntr,real([d;y;e])); title('InPhase Components'); legend('Desired','Output','Error'); xlabel('Time Index'); ylabel('Signal Value'); subplot(2,2,2); plot(1:ntr,imag([d;y;e])); title('Quadrature Components'); legend('Desired','Output','Error'); xlabel('Time Index'); ylabel('Signal Value'); subplot(2,2,3); plot(x(ntr100:ntr),'.'); axis([3 3 3 3]); title('Received Signal Scatter Plot'); axis('square'); xlabel('Real[x]'); ylabel('Imag[x]'); grid on; subplot(2,2,4); plot(y(ntr100:ntr),'.'); axis([3 3 3 3]); title('Equalized Signal Scatter Plot'); axis('square'); xlabel('Real[y]'); ylabel('Imag[y]'); grid on;
All of the time domain adaptive filter reference pages use this QPSK example. By comparing the results for each variation you get an idea of the differences in the way each one performs.
This figure demonstrates the results of running the example code shown.
Haykin, S.,Adaptive Filter Theory, 3rd Edition, Prentice Hall, N.J., 1996