| Purpose |
| Sample per sample filtering and coefficient update using the Transform Domain LMS algorithm. Filtering and coefficient update are performed in T-domain. |
| Syntax |
[W,w,y,e,p] = aspttdlms(x,W,d,mu,p,b,T)
|
| Description |
aspttdlms() implements the Transform Domain LMS adaptive algorithm used to update transversal adaptive filters. TDLMS performs filtering and coefficient update in the transform domain, T. Normalization of the step size by the input signal power is also performed in T-domain in each band, which is usually improves the convergence behavior compared to the conventional LMS when T is an orthogonal transformation.
The block diagram of the TDLMS is shown in Fig. 4.20. aspttdlms() takes an input samples delay line aspttdlms() to update each T-domain coefficient is given by
aspttdlms() for an FIR adaptive filter of
Input Parameters [Size]::
x : input samples delay line [L x 1]
W : previous T-domain coef. vector W(n-1) [L x 1]
d : desired output d(n) [1 x 1]
mu : adaptation constant
p : last estimated power of x, p(n-1) [L 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)
w : updated time-domain coef. vector w(n), only
calculated if this output argument is given.
|
| Example |
% TDLMS used in a simple system identification application. % By the end of this script the adaptive filter w should % have the same coefficients as the unknown filter h. % iter = 5000; % Number of samples to process % Complex unknown impulse response h = [.9 + i*.4; 0.7+ i*.2; .5; .3+i*.1; .1]; xn = 2*(rand(iter,1)-0.5); % Input signal, zero mean random. % although xn is real, dn will be complex since h is complex dn = osfilter(h,xn); % Unknown filter output en = zeros(iter,1); % vector to collect the error % Initialize the TDLMS algorithm with a filter of 10 coef. [W,w,x,d,y,e,p]=init_tdlms(10); %% Processing Loop for (m=1:iter) x = [xn(m); x(1:end-1)]; % update the input delay line d = dn(m,:) + 1e-3*rand; % additive noise of var = 1e-6 % call TDLMS to calculate the output, estimation error % and update the coefficients. [W,y,e,p,w] = aspttdlms(x,W,d,0.05,p,0.98,'fft'); % save the last error sample to plot later en(m) = e; 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 ));grid |
Running the above script will produce the graph shown in Fig. 4.21. 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, which is usually called the learning curve. 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).
|
| Remarks |
The TDLMS algorithm solves the eigenvalue spread problem by first decorrelating the input signal samples using the transformation T and then normalizing the transformed data by its power in each band. This is equivalent to using a time varying step size in each band, the value of which is inversely proportional to the power of the input in this band. This will speed the convergence of the slow modes (those excited with relatively small input power) and improves the total convergence behavior of the adaptive filter. Note also that
|
| Algorithm |
aspttdlms() performs the following operations
|
| Resources |
The resources required to implement the TDLMS algorithm for a transversal adaptive FIR filter of
|
| See Also |
| INIT_ TDLMS, MODEL_ TDLMS, ASPTLMS, ASPTNLMS, ASPTVSSLMS. |
| Reference |
| [11], [4], and [2] for extensive analysis of the LMS and the steepest-descent search method. |