Documentation |
FIR adaptive filter that uses unconstrained frequency-domain with quantized step size normalization
ha = adaptfilt.ufdaf(l,step,leakage,delta,lambda,blocklen,
offset,coeffs,states)
ha = adaptfilt.ufdaf(l,step,leakage,delta,lambda,blocklen,
offset,coeffs,states) constructs an unconstrained
frequency-domain FIR adaptive filter ha with quantized
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.ufdaf.
Input Argument | Description |
---|---|
l | Adaptive filter length (the number of coefficients or taps) and it must be a positive integer. l defaults to 10. |
step | Adaptive filter step size. It must be a nonnegative scalar. step defaults to 0. |
leakage | Leakage parameter of the adaptive filter. When you set this argument to a value between zero and one, you are implementing a leaky version of the UFDAF algorithm. leakage defaults to 1 — no leakage. |
delta | Initial common value of all of the FFT input signal powers. the initial value of delta should be positive, and it defaults to 1. |
lambda | Specifies the averaging factor used to compute the exponentially-windowed FFT input signal powers for the coefficient updates. lambda should lie in the range (0,1]. For default UFDAF filter objects, lambda defaults to 0.9. |
blocklen | Block length for the coefficient updates. This must be a positive integer. For faster execution, (blocklen l) should be a power of two. blocklen defaults to l. |
offset | Offset for the normalization terms in the coefficient updates. This can help you avoid divide by zero conditions, or divide by very small numbers conditions, when any of the FFT input signal powers become very small. Default value is zero. |
coeffs | Initial time-domain coefficients of the adaptive filter. It should be a length l vector. The filter object uses these coefficients to compute the initial frequency-domain filter coefficients via an FFT computed after zero-padding the time-domain vector by blocklen. |
states | Adaptive filter states. states defaults to a zero vector with length equal to l. |
Since your adaptfilt.ufdaf 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.ufdaf objects. To show you the properties that apply, this table lists and describes each property for the filter object.
Name | Range | Description |
---|---|---|
Algorithm | None | Defines the adaptive filter algorithm the object uses during adaptation |
AvgFactor | Specifies the averaging factor used to compute the exponentially-windowed FFT input signal powers for the coefficient updates. AvgFactor should lie in the range (0,1]. For default UFDAF filter objects, AvgFactor defaults to 0.9. Note that AvgFactor and lambda are the same thing — lambda is an input argument and AvgFactor a property of the object. | |
BlockLength | Block length for the coefficient updates. This must be a positive integer. For faster execution, (blocklen + l) should be a power of two. blocklen defaults to l. | |
FFTCoefficients | Stores the discrete Fourier transform of the filter coefficients in coeffs. | |
FFTStates | States for the FFT operation. | |
FilterLength | Any positive integer | Reports the length of the filter, the number of coefficients or taps |
Leakage | 0 to 1 | Leakage parameter of the adaptive filter. When you set this argument to a value between zero and one, you are implementing a leaky version of the UFDAF algorithm. leakage defaults to 1 — no leakage. |
Offset | Offset for the normalization terms in the coefficient updates. This can help you avoid divide by zero conditions, or divide by very small numbers conditions, when any of the FFT input signal powers become very small. Default value is zero. | |
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. |
Power | 2*l element vector | A vector of 2*l elements, each initialized with the value delta from the input arguments. As you filter data, Power gets updated by the filter process. |
StepSize | 0 to 1 | Adaptive filter step size. It must be a nonnegative scalar. You can use maxstep to determine a reasonable range of step size values for the signals being processed. step defaults to 0. |
Show an example of Quadrature Phase Shift Keying (QPSK) adaptive equalization using a 32-coefficient adaptive filter. For fidelity, use 1024 iterations. The figure that follows the code provides the information you need to assess the performance of the equalization process.
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= 1024; % 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)); 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 ha = adaptfilt.ufdaf(32,mu,1,del,lam); [y,e] = filter(ha,x,d); subplot(2,2,1); plot(1:1000,real([d(1:1000);y(1:1000);e(1:1000)])); title('In-Phase 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(ntr-100: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(ntr-100:ntr),'.'); axis([-3 3 -3 3]); title('Equalized Signal Scatter Plot'); axis('square'); xlabel('Real[y]'); ylabel('Imag[y]'); grid on;
Shynk, J.J.,"Frequency-domain and Multirate Adaptive Filtering," IEEE^{®} Signal Processing Magazine, vol. 9, no. 1, pp. 14-37, Jan. 1992
adaptfilt.blms | adaptfilt.blmsfft | adaptfilt.fdaf | adaptfilt.pbufdaf