| Purpose |
| Sample per sample filtering and coefficient update using the Second Order Volterra Transform Domain Least Mean Squares Adaptive algorithm. Filtering and coefficients update of both the linear and non-linear coefficients are performed in the transform-domain (T). |
| Syntax |
[W,y,e,p,xb,w] = asptsovtdlms(xn,xb,W,d,mu,L1,L2,p,b,T)
|
| Description |
asptsovtdlms() implements the second order Volterra
transform domain LMS filter (SOVTDLMS).
The SOVTDLMS algorithm calculates the filter output The filter coefficients vector init_sovtdlms().
The input and output parameters of asptsovtdlms() 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 : previous T-domain coef. vector W(n-1) [L1 + sum(1:L2) x 1]
d : desired output d(n) [1 x 1]
mu : adaptation constants [1 x 1]
L1 : memory length of linear part of w
L2 : memory length of non-linear part of w
p : last estimated power of x p(n-1) [L1 + sum(1:L2) x 1]
b : AR pole for recursive calculation of p
T : The transform to be used {fft|dct|dst|...}
user defined transforms are also supported.
use transform T and its inverse iT.
Output parameters::
W : updated T-domain coef. vector
y : filter output y(n)
e : error signal; e(n) = d(n)-y(n)
p : new estimated power of x p(n)
xb : updated buffer of input samples
w : updated t-domain coef. vector w(n), only
calculated if this output argument is given.
|
| Example |
% SOVTDLMS 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 [W,w,xb,d,y,e,p]=init_sovtdlms(L1,L2); % Initialize SOVTDLMS %% Processing Loop for (m=1:iter) d = dn(m,:) + .001 * rand ; % additive noise of var = 1e-6 % call SOVNLMS to calculate the filter output, estimation error % and update the coefficients. [W,y,e,p,xb,w] = asptsovtdlms(xn(m),xb,W,d,.05,L1,L2,p,.98,'fft'); en(m,:) = e; % save the last error sample end; % display the results % note that w converges to conj(h) for complex data subplot(2,2,1);stem([real(w) imag(conj(w))]); grid; subplot(2,2,2);eb = filter(.1,[1 -.9], en .* conj(en)); plot(10*log10(eb ));gridRunning the above script will produce the graph shown in Fig. 8.4. The left side graph of the figure shows the adaptive filter coefficients after convergence which are almost identical to the unknown filter h. The right side graph shows the square error in dB versus time during the adaptation process. The lower limit of the error signal power in the learning curve is defined here by the additive white noise added at the filter output (-60 dB).
|
| Algorithm |
The current implementation of asptsovtdlms() performs the following operations
|
| Remarks |
SOVTDLMS uses the regular TDLMS algorithm to update both the linear (asptsovtdlms also,
|
| Resources |
The resources required to implement a SOVTDLMS filter of
linear memory length
|
| See Also |
| INIT_ SOVTDLMS, ASPTTDLMS. |
| 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. |