## FFE

**Description:** feed-forward equalizer

**Library:** Numeric, Communications

**Class:** SDFFFE

##### Parameters

Name | Description | Default | Unit | Type | Range |
---|---|---|---|---|---|

NumFFtaps | number of feed-forward taps | 5 | int | ||

FFinitial | feed-forward filter taps are initialized by users or not: NO, YES | NO | enum | ||

FFtaps | initial feed-forward filter taps (only valid when FFinitial is YES) | {0, 0, 0, 0, 0} | real array | ||

EquAlgorithm | adaptive algorithm: None, LMS, RLS, ZF | LMS | enum | ||

TrainSeqLen | length of training sequence | 1000 | int | ||

Fraction | number of samples per symbol at input, range [1, 16]. Fraction=1: symbol-spaced equalizer; Fraction=2~16: fractionally spaced equalizer | 1 | int | ||

RefTap | index of reference tap for LMS and RLS algorithms, range [1, NumFFtaps] | 3 | int | ||

Alpha | step size for LMS algorithm | 1e-3 | real | ||

Lambda | weighting factor for RLS algorithm | 0.999 | real | (0.0, 1.0) | |

Delta | small positive constant for RLS algorithm | 0.001 | real | (0.0, 10.0] | |

TargetMSE | reference MSE in dB for stopping updating coefficients when RLS equalizer reaches this MSE | -40 | dB | real | (-100, 100] |

SaveTapsFile | filename in which to save final tap values | string |

##### Pin Inputs

Pin | Name | Description | Signal Type |
---|---|---|---|

1 | input | input signal before equalizer | real |

2 | TrainSeq | input training sequence for equalizer | real |

##### Pin Outputs

Pin | Name | Description | Signal Type |
---|---|---|---|

3 | output | output signal after decision feedback equalizer | real |

##### Notes/Equations

- Time-dispersive channels can cause intersymbol interference (ISI). For example, in a multipath scattering environment, the receiver sees delayed versions of a symbol transmission, which can interfere with other symbol transmissions. An equalizer attempts to mitigate ISI and thus improve the receiver's performance. This model is a Feed-Forward Equalization (FFE), and it operates with training sequence. In each firing, the input consumes
*Fraction*input token and TrainSeq consumes one input token, while produces one output token. - A block diagram of the equalizer is shown in Block Diagram of the FFE. This equalizer works in training sequence mode.

###### Block Diagram of the FFE

- If the parameter
*EquAlgorithm*is set to ZF, RLS or LMS, the equalizer works in training and tracking modes. In the training mode, the training sequence (from Pin TrainSeq) is used as training sequence. The number of training sequence is TrainSeqLen. The error signal*e*is from the training signal:_{k}

is the input training sequence.

is the equalized output sequence.

After the training mode, the decision feedback equalizer coefficient is converged and the equalizer enters into the tracking mode. When the parameter*EquAlgorithm*is set to ZF, LMS or RLS, the ZF, LMS or RLS adaptive algorithm is used in tracking mode correspondingly. The error signal*e*is from the decision signal of the equalized signal:_{k}

where

is the detected output sequence for binary case:

If the parameter*EquAlgorithm*is set to NONE, the equalizer works in non-adaptive mode with fixed coefficients.

**LMS Algorithm**

The criterion most commonly used in the optimization of the equalizer coefficients is the minimization of the mean square error (MSE) between the desired equalizer output and the actual equalizer output.

MSE minimization can be accomplished recursively by use of the stochastic gradient algorithm introduced by Widrow, called the LMS algorithm. This algorithm is described by the coefficient update equation

where

*C*_{k}is the vector of the equalizer coefficients at the kth iteration*X*_{k}represents the signal vector.

α is parameter*Alpha*.

**RLS Algorithm**

The convergence rate of the LMS algorithm is slow because a single parameter α controls the rate of adaptation. A fast converging algorithm is obtained if a recursive least squares (RLS) criterion is adopted for adjustment of the equalizer coefficients.

The RLS iteration algorithm follows.

Calculate output:

Calculate Kalman gain vector:

Update inverse of the correlation matrix:

Update coefficients:

is parameter Lamda.

is a diagonal matrix with initial value Delta*I (here I is a diagonal matrix).

Delta is parameter*Delta*.

The updating of coefficients in RLS algorithm will be halted when the MSE averaged over 100 consecutive symbols is less than a reference MSE defined by*TargetMSE*.

**ZF Algorithm**

The zero-forcing (ZF) solution is achieved by forcing the cross-correlation between the error sequence

and the desired information sequence {Ik} to be zero.

When in the training mode, the coefficients are updated as:

When in the tracking mode, the coefficients are updated as:

where

is the detected output sequence. - For LMS and RLS algorithms, the total delay caused by the equalizer is equal to (RefTap-1)/Fraction. Usually the reference tap is set to the center tap in a linear equalizer, or the center tap of the forward filter in a DFE equalizer.

For ZF algorithm, no delay is introduced by this equalizer after the equalizer has converged. Note that ZF algorithm has a condition that the input signal needs to have the eye open prior to equalization. That is, the convergence of ZF algorithm requires

L is the number of ISI affected symbols and the impulse response {*f*_{n}} are coefficients of the linear filter model which causes ISI. - Parameter Details:
*NumFFtaps*specifies the number of feed-forward taps.*FFinitial*indicates whether the feed-forward filter taps are initialized by users or not. If users don't want to set FFtaps, FFinitial is selected as NO and the FFtaps are generated in code automatically.*FFtaps*specifies the initial value of feed-forward filter taps if FFinitial is YES.*EquAlgorithm*selects the equalizer algorithm.*TrainSeqLen*specifies the length of training sequence.*Fraction*specifies the number of samples per symbol at input, range [1, 16].*RefTap*specifies the index of reference tap for LMS and RLS algorithms, ranged from 1 to NumFFtaps.*Alpha*specifies the step size for tap adjustment.*Lambda*specifies weighting factor for RLS algorithm.*Delta*specifies a small positive constant for RLS algorithm.*TargetMSE*specifies the reference MSE in dB for RLS algorithm. RLS equalizer will stop updating coefficients when the MSE averaged over 100 consecutive symbols is less than this reference.*SaveTapsFile*specifies the filename in which to save final feed-forward tap values. If the SaveTapsFile string is non-null, a file will be created with the name given by that string, and the final tap values will be stored there after the run has completed.

##### References

- John G. Proakis, Digital Communications, Third Edition, McGraw-Hill, 1995.
- Dimitris G. Manolakis et.al, Statistical and Adaptive Signal Processing, McGraw-Hill, 2000.