Contents

adaptfilt.blmsfft

FIR adaptive filter that uses FFT-based BLMS

Syntax

ha = adaptfilt.blmsfft(l,step,leakage,blocklen,coeffs,
states)

Description

ha = adaptfilt.blmsfft(l,step,leakage,blocklen,coeffs,
states)
constructs an FIR block LMS adaptive filter object ha where l is the adaptive filter length (the number of coefficients or taps) and must be a positive integer. l defaults to 10. step is the block LMS step size. It must be a nonnegative scalar. The function maxstep may be helpful to determine a reasonable range of step size values for the signals you are processing. step defaults to 0.

leakage is the block LMS leakage factor. It must also be a scalar between 0 and 1. When leakage is less than one, the adaptfilt.blmsfft implements a leaky block LMS algorithm. leakage defaults to 1 (no leakage). blocklen is the block length used. It must be a positive integer such that

 blocklen + length(coeffs)

is a power of two; otherwise, an adaptfilt.blms algorithm is used for adapting. Larger block lengths result in faster execution times, with poor adaptation characteristics as the cost of the speed gained. blocklen defaults to l. Enter your initial filter coefficients in coeffs, a vector of length l. When omitted, coeffs defaults to a length l vector of all zeros. states contains a vector of initial filter states; it must be a length l vector. states defaults to a length l vector of all zeros when you omit the states argument in the calling syntax.

For information on how to run data through your adaptive filter object, see the Adaptive Filter Syntaxes section of the reference page for filter.

Properties

In the syntax for creating the adaptfilt object, the input options are properties of the object you create. This table lists the properties for the block LMS object, their default values, and a brief description of the property.

Property

Default Value

Description

Algorithm

None

Defines the adaptive filter algorithm the object uses during adaptation

FilterLength

Any positive integer

Reports the length of the filter, the number of coefficients or taps

Coefficients

Vector of elements

Vector containing the initial filter coefficients. It must be a length l vector where l is the number of filter coefficients. coefficients defaults to length l vector of zeros when you do not provide the argument for input.

States

Vector of elements of length l

Vector of the adaptive filter states. states defaults to a vector of zeros which has length equal to l

Leakage

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.

BlockLength

Vector of length l

Size of the blocks of data processed in each iteration

StepSize

0.1

Sets the block 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. Use maxstep to determine the maximum usable step size.

PersistentMemory

false or true

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. PersistentMemory returns to zero any state that the filter changes during processing. States that the filter does not change are not affected. Defaults to false.

Examples

Identify an unknown FIR filter with 32 coefficients using 512 iterations of the adapting algorithm.

x  = randn(1,512);       % Input to the filter
b  = fir1(31,0.5);       % FIR system to be identified
no  = 0.1*randn(1,512);  % Observation noise signal
d  = filter(b,1,x)+no;   % Desired signal
mu = 0.008;              % Step size
n  = 16;                 % Block length
ha = adaptfilt.blmsfft(32,mu,1,n);
[y,e] = filter(ha,x,d);
subplot(2,1,1); plot(1:500,[d(1:500);y(1:500);e(1:500)]);
title('System Identification of an FIR Filter');
legend('Desired','Output','Error'); xlabel('Time Index');
ylabel('Signal Value');
subplot(2,1,2); stem([b.',ha.coefficients.']);
legend('actual','estimated'); grid on;
xlabel('Coefficient #'); ylabel('Coefficient Value');

As a result of running the adaptation process, filter object ha now matches the unknown system FIR filter b, based on comparing the filter coefficients derived during adaptation.

References

Shynk, J.J., "Frequency-Domain and Multirate Adaptive Filtering," IEEE® Signal Processing Magazine, vol. 9, no. 1, pp. 14-37, Jan. 1992.

Was this topic helpful?