Adaptive filter that uses discrete cosine transform
adaptfilt.tdafdct
will be removed in a
future release.
ha = adaptfilt.tdafdct(l,step,leakage,offset,delta,lambda,
coeffs,states)
ha = adaptfilt.tdafdct(l,step,leakage,offset,delta,lambda,
constructs a transformdomain
adaptive filter ha object that uses the discrete cosine transform
to perform filter adaptation.
coeffs,states)
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.tdafdct
.
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 TDAFDCT algorithm. 
 Offset for the normalization terms in the coefficient
updates. You can use this argument to avoid dividing by zero 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.tdafdct
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.tdafdct
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.  

 Determine 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. You can use 
For checking the values of properties for an adaptive filter
object, use get(ha)
or enter the object name, without
a trailing semicolon, at the MATLAB prompt.
Using 1000 iterations, perform a Quadrature Phase Shift Keying (QPSK) adaptive equalization using a 32coefficient FIR filter.
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)); %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.tdafdct(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'); grid on; axis('square'); xlabel('Real[y]'); ylabel('Imag[y]');
Compare the plots shown in this figure to those in the other time domain filter variations. The comparison should help you select and understand how the variants differ.
Haykin, S.,Adaptive Filter Theory, 3rd Edition, Prentice Hall, N.J., 1996.