• No results found

adaptfilt.tdafdft 0 200 400 600 800

−3 −2 −1 0 1 2 3 In−Phase Components Time Index Signal Value Desired Output Error 0 200 400 600 800 1000 −3 −2 −1 0 1 2 3 Quadrature Components Time Index Signal Value Desired Output Error −2 0 2 −3 −2 −1 0 1 2 3

Received Signal Scatter Plot

Real[x] Imag[x] −2 0 2 −3 −2 −1 0 1 2 3

Equalized Signal Scatter Plot

Real[y]

Imag[y]

See Also

adaptfilt.tdafdct,adaptfilt.fdaf,adaptfilt.blms

Purpose

FIR adaptive filter that uses unconstrained frequency-domain with quantized step size normalization

Syntax

ha = adaptfilt.ufdaf(l,step,leakage,delta,lambda,blocklen, offset,coeffs,states)

Description

ha = adaptfilt.ufdaf(l,step,leakage,delta,lambda,blocklen, offset,coeffs,states)

constructs an unconstrained frequency-domain FIR adaptive filterha

with quantized step size normalization.

Input Arguments

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. ldefaults

to 10.

step Adaptive filter step size. It must be a nonnegative

scalar. stepdefaults 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. leakagedefaults 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.

adaptfilt.ufdaf

Input

Argument Description

lambda Specifies the averaging factor used to compute the

exponentially-windowed FFT input signal powers for the coefficient updates. lambdashould lie in

the range (0,1]. For default UFDAF filter objects,

lambdadefaults 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 tol.

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 lengthlvector. 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 byblocklen.

states Adaptive filter states. statesdefaults to a zero

vector with length equal tol.

Properties

Since youradaptfilt.ufdaffilter is an object, it has properties that

define its behavior in operation. Note that many of the properties are also input arguments for creatingadaptfilt.ufdafobjects. 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.

AvgFactorshould lie in the

range (0,1]. For default UFDAF filter objects,

AvgFactordefaults 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 tol.

FFTCoefficients Stores the discrete Fourier

transform of the filter coefficients incoeffs. FFTStates States for the FFT operation. FilterLength Any positive

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

adaptfilt.ufdaf

Name Range Description

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.

leakagedefaults 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 falseortrue 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 tofalse.

Name Range Description

Power 2*l element

vector A vector of 2*each initialized with thelelements, valuedeltafrom the input

arguments. As you filter data,

Powergets updated by the

filter process.

StepSize 0 to 1 Adaptive filter step size.

It must be a nonnegative scalar. You can usemaxstep

to determine a reasonable range of step size values for the signals being processed.

stepdefaults to 0.

Examples

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(j*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))+j*sign(randn(1,ntr+D));% Baseband QPSK signal

n = 0.1*(randn(1,ntr+D) + j*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

ha = adaptfilt.ufdaf(32,mu,1,del,lam); [y,e] = filter(ha,x,d);

adaptfilt.ufdaf

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;

0 200 400 600 800 1000 −3 −2 −1 0 1 2 3 In−Phase Components Time Index Signal Value 0 500 1000 1500 −3 −2 −1 0 1 2 Quadrature Components Time Index Signal Value −2 0 2 −3 −2 −1 0 1 2 3

Received Signal Scatter Plot

Real[x] Imag[x] −2 0 2 −3 −2 −1 0 1 2 3

Equalized Signal Scatter Plot

Real[y] Imag[y] Desired Output Error Desired Output Error

See Also

adaptfilt.fdaf, adaptfilt.pbufdaf, adaptfilt.blms, adaptfilt.blmsfft

References

Shynk, J.J.,“Frequency-domain and Multirate Adaptive Filtering,” IEEE Signal Processing Magazine, vol. 9, no. 1, pp. 14-37, Jan. 1992