FIR adaptive filter that uses adjoint LMS algorithm
adaptfilt.adjlms
will be removed in a future
release.
ha = adaptfilt.adjlms(l,step,leakage,pathcoeffs,pathest,...
errstates,pstates,coeffs,states)
Note:

ha = adaptfilt.adjlms(l,step,leakage,pathcoeffs,pathest,...
constructs object
errstates,pstates,coeffs,states)ha
,
an FIR adjoint LMS adaptive filter. l
is the adaptive
filter length (the number of coefficients or taps) and must be a positive
integer. l
defaults to 10 when you omit the argument. step
is
the adjoint LMS step size. It must be a nonnegative scalar. When you
omit the step
argument, step
defaults
to 0.1.
leakage
is the adjoint LMS leakage factor.
It must be a scalar between 0 and 1. When leakage
is
less than one, you implement a leaky version of the adjlms
algorithm
to determine the filter coefficients. leakage
defaults
to 1 specifying no leakage in the algorithm.
pathcoeffs
is the secondary path filter model.
This vector should contain the coefficient values of the secondary
path from the output actuator to the error sensor.
pathest
is the estimate of the secondary
path filter model. pathest
defaults to the values
in pathcoeffs
.
errstates
is a vector of error states of
the adaptive filter. It must have a length equal to the filter order
of the secondary path model estimate. errstates
defaults
to a vector of zeros of appropriate length. pstates
contains
the secondary path FIR filter states. It must be a vector of length
equal to the filter order of the secondary path model. pstates
defaults
to a vector of zeros of appropriate length. The initial filter coefficients
for the secondary path filter compose vector coeffs
.
It must be a length l
vector. coeffs
defaults
to a length l
vector of zeros. states
is
a vector containing the initial filter states. It must be a vector
of length l
+ne
1, where ne
is
the length of errstates
. When you omit states
,
it defaults to an appropriate length vector of zeros.
For information on how to run data through your adaptive filter
object, see the Adaptive Filter Syntaxes section of the reference
page for filter
.
In the syntax for creating the adaptfilt
object,
the input options are properties of the object created. This table
lists the properties for the adjoint LMS object, their default values,
and a brief description of the property.
Property  Default Value  Description 

 None  Specifies the adaptive filter algorithm the object uses during adaptation 
 Length l vector with zeros for all elements  Adjoint LMS FIR filter coefficients. Should be initialized
with the initial coefficients for the FIR filter prior to adapting.
You need 
 [0,...,0]  A vector of the error states for your adaptive filter, with length equal to the order of your secondary path filter. 
 10  The number of coefficients in your adaptive filter. 
 1  Specifies the leakage parameter. Allows you to implement a leaky algorithm. Including a leakage factor can improve the results of the algorithm by forcing the algorithm to continue to adapt even after it reaches a minimum value. Ranges between 0 and 1. 
 No default  A vector that contains the coefficient values of your secondary path from the output actuator to the error sensor. 

 An estimate of the secondary path filter model. 
 Length of the secondary path filter. All elements are zeros.  The states of the secondary path filter, the unknown system 
 l+ne+1, where ne is  Contains the initial conditions for your adaptive filter
and returns the states of the FIR filter after adaptation. If omitted,
it defaults to a zero vector of length equal to l+ne+1. When you use 
 0.1  Sets the adjoint LMS algorithm step size used for each iteration of the adapting algorithm. Determines both how quickly and how closely the adaptive filter converges to the filter solution. 

 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. 
Demonstrate active noise control of a random noise signal that runs for 1000 samples.
x = randn(1,1000); % Noise source g = fir1(47,0.4); % FIR primary path system model n = 0.1*randn(1,1000); % Observation noise signal d = filter(g,1,x)+n; % Signal to be canceled (desired) b = fir1(31,0.5); % FIR secondary path system model mu = 0.008; % Adjoint LMS step size ha = adaptfilt.adjlms(32,mu,1,b); [y,e] = filter(ha,x,d); plot(1:1000,d,'b',1:1000,e,'r'); title('Active Noise Control of a Random Noise Signal'); legend('Original','Attenuated'); xlabel('Time Index'); ylabel('Signal Value'); grid on;
Reviewing the figure shows that the adaptive filter attenuates the original noise signal as you expect.
Wan, Eric., "Adjoint LMS: An Alternative to FilteredX LMS and Multiple Error LMS," Proceedings of the International Conference on Acoustics, Speech, and Signal Processing (ICASSP), pp. 18411845, 1997