Partitioned block unconstrained frequencydomain adaptive filter
adaptfilt.pbufdaf
will be removed in a
future release.
ha = adaptfilt.pbufdaf(l,step,leakage,delta,lambda,
blocklen,...offset,coeffs,states)
ha = adaptfilt.pbufdaf(l,step,leakage,delta,lambda,
constructs
a partitioned block unconstrained frequencydomain FIR adaptive filter
blocklen,...offset,coeffs,states)ha
with
bin step size normalization.
For information on how to run data through your adaptive filter
object, see the Adaptive Filter Syntaxes section of the reference
page for filter
.
Entries in the following table describe the input arguments
for adaptfilt.pbufdaf
.
Input Argument  Description 

 Adaptive filter length (the number of coefficients or taps) and it must be a positive integer. L defaults to 10. 
 Step size of the adaptive filter. This is a scalar and
should lie in the range (0,1]. 
 Leakage parameter of the adaptive filter. When you set
this argument to a value between zero and one, a leaky version of
the PBFDAF algorithm is implemented. 
 Initial common value of all of the FFT input signal powers. Its initial value should be positive. delta defaults to 1. 
 Averaging factor used to compute the exponentially windowed
FFT input signal powers for the coefficient updates. 
 Block length for the coefficient updates. This must
be a positive integer such that ( 
 Offset for the normalization terms in the coefficient
updates. This can be useful to avoid divide by zeros conditions,
or dividing by very small numbers, if any of the FFT input signal
powers become very small. 
 Initial timedomain coefficients of the adaptive filter.
It should be a vector of length 
 Specifies the filter initial conditions. 
Since your adaptfilt.pbufdaf
filter is an
object, it has properties that define its behavior in operation. Note
that many of the properties are also input arguments for creating adaptfilt.pbufdaf
objects.
To show you the properties that apply, this table lists and describes
each property for the filter object.
Name  Range  Description 

 None  Defines the adaptive filter algorithm the object uses during adaptation 
 Averaging factor used to compute the exponentially windowed
FFT input signal powers for the coefficient updates.  
 Block length for the coefficient updates. This must
be a positive integer such that (  
 Any positive integer  Reports the length of the filter, the number of coefficients or taps 
 Stores the discrete Fourier transform of the filter coefficients
in  
 States for the FFT operation.  
 0 to 1  Leakage parameter of the adaptive filter. When you set
this argument to a value between zero and one, a leaky version of
the PBFDAF algorithm is implemented. 
 Offset for the normalization terms in the coefficient
updates. This can be useful to avoid divide by zeros conditions,
or dividing by very small numbers, if any of the FFT input signal
powers become very small.v  

 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. 
 2*  A vector of 2* 
 0 to 1  Step size of the adaptive filter. This is a scalar and
should lie in the range (0,1]. 
Demonstrating Quadrature Phase Shift Keying (QPSK) adaptive equalization using a 32coefficient FIR filter. To perform the equalization, this example runs for 1000 iterations.
D = 16; % Number of samples of delay b = exp(1j*pi/4)*[0.7 1]; % Numerator coefficients of channel a = [1 0.7]; % Denominator coefficients of channel ntr= 1000; % Number of iterations s = sign(randn(1,ntr+D))+1j*sign(randn(1,ntr+D)); % Baseband QPSK signal n = 0.1*(randn(1,ntr+D) + 1j*randn(1,ntr+D)); % Noise signal r = filter(b,a,s)+n; % Received signal x = r(1+D:ntr+D); % Input signal (received signal) d = s(1:ntr); % Desired signal (delayed QPSK signal) del = 1; % Initial FFT input powers mu = 0.1; % Step size lam = 0.9; % Averaging factor N = 8; % Block size ha = adaptfilt.pbufdaf(32,mu,1,del,lam,N); [y,e] = filter(ha,x,d); subplot(2,2,1); plot(1:ntr,real([d;y;e])); title('InPhase Components'); legend('Desired','Output','Error'); xlabel('Time Index'); ylabel('Signal Value'); subplot(2,2,2); plot(1:ntr,imag([d;y;e])); title('Quadrature Components'); legend('Desired','Output','Error'); xlabel('Time Index'); ylabel('Signal Value'); subplot(2,2,3); plot(x(ntr100:ntr),'.'); axis([3 3 3 3]); title('Received Signal Scatter Plot'); axis('square'); xlabel('Real[x]'); ylabel('Imag[x]'); grid on; subplot(2,2,4); plot(y(ntr100:ntr),'.'); axis([3 3 3 3]); title('Equalized Signal Scatter Plot'); axis('square'); xlabel('Real[y]'); ylabel('Imag[y]'); grid on;
You can compare this algorithm to another, such as the pbfdaf
version.
Use the same example of QPSK adaptation. The following figure shows
the results.
So, J.S. and K.K. Pang, "Multidelay Block Frequency Domain Adaptive Filter," IEEE^{®} Trans. Acoustics, Speech, and Signal Processing, vol. 38, no. 2, pp. 373376, February 1990
Paez Borrallo, J.M. and M.G. Otero, "On The Implementation of a Partitioned Block Frequency Domain Adaptive Filter (PBFDAF) for Long Acoustic Echo Cancellation," Signal Processing, vol. 27, no. 3, pp. 301315, June 1992