| Purpose |
| Sample per sample filtering and coefficients update using the Second Order Volterra Variable Step Size Least Mean Squares Adaptive filter algorithm. |
| Syntax |
[w,g,mu,y,e,xb] = asptsovvsslms(xn,xb,w,g,d,mu,L1,L2,roh)
[w,g,mu,y,e,xb] = asptsovvsslms(xn,xb,w,g,d,mu,L1,L2,roh,
ssa,mu_min,mu_max)
|
| Description |
asptsovvsslms() implements the second order Volterra variable
step size LMS adaptive filter (SOVVSSLMS).
The SOVVSSLMS algorithm calculates the filter output The filter coefficients vector init_sovvsslms().
The input and output parameters of asptsovvsslms() for an FIR adaptive filter of
linear memory length Input Parameters [size] :: xn : new input sample [1 x 1] xb : buffer of input samples [L1 + sum(1:L2) x 1] w : vector of filter coefficients [L1 + sum(1:L2) x 1] g : gradient vector [L1 + sum(1:L2) x 1] d : desired output [1 x 1] mu : step size vector [L1 + sum(1:L2) x 1] L1 : memory length of linear part of w L2 : memory length of non-linear part of w roh : mu step size [1 x 1] ssa : if 1, the sign-sign algorithm is used to update mu. mu_min : lower bound for mu [1 x 1] mu_max : higher bound for mu [1 x 1] Output parameters :: w : updated filter coefficients w(n) g : updated gradient vector g(n) mu : updated vector of step sizes mu(n) y : filter output y(n) e : error signal; e(n) = d(n) - y(n) xb : updated vector of input samples |
| Example |
% SOVVSSLMS used in a simple system identification application.
% By the end of this script the adaptive filter w should have
% the same coefficients as the nonlinear unknown filter h.
iter = 5000; % Number of samples to process
L1 = 4;
L2 = 4;
% The nonlinear unknown plant transfer function
% y(n) = x(n) - x(n-1) - .125x(n-2) + .3125x(n-3)
% +x(n)x(n) -.3x(n)x(n-1) + .2x(n)x(n-2) -.5x(n)x(n-3)
% +.5x(n-1)x(n-1) -.3x(n-1)x(n-2) -.6x(n-1)x(n-3)
% -.6x(n-2)x(n-2) +.5x(n-2)x(n-3) -.1x(n-3)x(n-3)
h =[1;-1;-0;.125;.3125;1;-.3;.2;-.5;.5;-.3;-.6;-.6;.5;-.1];
xn =2*(rand(iter,1)-0.5); % Input signal, zero mean random.
dn =sovfilt(h,xn,4,4); % Unknown filter output
en =zeros(iter,1); % vector to collect the error
mu0 =0.05*ones(L1+sum(1:L2),1); % initial step size
muv =zeros(iter,1); % Evolution of mu(1)
% Initialize the SOVVSSLMS algorithm
[w,xb,d,y,e,g,mu] = init_sovvsslms(L1,L2,[],[],[],mu0);;
%% Processing Loop
for (m=1:iter)
d = dn(m) + .001 * rand ; % additive noise of var = 1e-6
% call SOVVSSLMS to calculate the filter output, estimation
% error and update the coefficients.
[w,g,mu,y,e,xb]= asptsovvsslms(xn(m),xb,w,g,...
d,mu,L1,L2,.001,1,1e-6,.99);
en(m,:) = e; % save the last error
muv(m) = mu(1); % save mu(1) to display
end;
% display the results
subplot(3,3,1);stem(w); grid;
eb = filter(0.1,[1 -0.9], en .* conj(en));
subplot(3,3,2);plot(10*log10(eb ) );grid
subplot(3,3,3);plot(muv); grid;
Running the above script will produce the graph shown in Fig. 8.5.
The left side graph of the figure shows the adaptive filter coefficients
after convergence. The middle graph shows the square error in dB versus time during
the adaptation process. The right side graph shows the evolution of the first element
of the step size vector during the adaptation process.
|
| Algorithm |
The current implementation of asptsovvsslms() performs the following operations
|
| Remarks |
SOVVSSLMS uses the regular VSSLMS algorithm to update both the linear (asptsovvsslms() also,
|
| Resources |
The resources required to implement a SOVVSSLMS filter of
linear memory length
|
| See Also |
| INIT_ SOVVSSLMS, ASPTVSSLMS, ASPTMVSSLMS, ASPTVFFRLS. |
| Reference |
| [11] and [4] for extensive analysis of the LMS and the steepest-descent search method and [7] for an introduction to the adaptive Volterra filters. |