# serdes.DFE

## Description

The `serdes.DFE`

System object™ modifies a baseband signal to minimize the ISI at the clock sampling times. The
decision feedback equalizer (DFE) samples data at each clock sample time and adjusts the
amplitude of the waveform with a correction voltage.

To modify the input signal using a DFE:

Create the

`serdes.DFE`

object and set its properties.Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

## Creation

### Description

returns a DFE object that
modifies an input waveform with the DFE to minimize the intersymbol interference
(ISI).`dfe`

= serdes.DFE

sets properties using one or more name-value arguments. For example, `dfe`

= serdes.DFE(`Name`

=`Value`

)```
dfe =
serdes.DFE(Mode=1)
```

returns a DFE object that applies the specified DFE tap
weights to the input waveform.

## Properties

Unless otherwise indicated, properties are *nontunable*, which means you cannot change their
values after calling the object. Objects lock when you call them, and the
`release`

function unlocks them.

If a property is *tunable*, you can change its value at
any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

`Mode`

— DFE operating mode

`2`

(default) | `0`

| `1`

DFE operating mode, specified as `0`

, `1`

, or
`2`

. The operating mode you select determines the DFE tap weights
values that the object applies to the input waveform.

Mode Value | DFE Mode | DFE Operation |
---|---|---|

`0` | Off | The object bypasses DFE and the input waveform remains unchanged. |

`1` | Fixed | The object applies the DFE tap weights specified in
`TapWeights` to the input waveform. |

`2` | Adapt | The object determines the optimum DFE tap weights and applies them to the input waveform. |

**Data Types: **`double`

`TapWeights`

— Initial DFE tap weights

`[0 0 0 0]`

(default) | row vector

Initial DFE tap weights, specified as a row vector in volts. The length of the vector determines the number of taps. The vector elements signify the tap weights or tap strength. Set the tap weight to zero to initialize the tap.

**Data Types: **`double`

`MinimumTap`

— Minimum value of adapted tap weights

`-1`

(default) | real scalar | real-valued row vector

Minimum value of the adapted tap weights, specified as a real scalar or a
real-valued row vector in volts. Specify as a scalar to apply to apply the same minimum
value to all the DFE taps, or specify as a vector that has the same length as the
`TapWeights`

.

**Data Types: **`double`

`MaximumTap`

— Maximum value of adapted tap weights

`1`

(default) | nonnegative real scalar | nonnegative real-valued row vector

Maximum value of the adapted tap weights, specified as a nonnegative real scalar or
a nonnegative real-valued row vector in volts. Specify as a scalar to apply the same
maximum value to all the DFE taps, or specify as a vector that has the same length as
the `TapWeights`

.

**Data Types: **`double`

`EqualizationGain`

— Controls for update rate of tap weights

`9.6e-5`

(default) | positive real scalar

Controls for update rate of tap weights, specified as a unitless nonnegative real scalar. Increase the value of this property for the DFE adaptation to converge faster at the expense of more noise in the DFE tap values.

**Data Types: **`double`

`EqualizationStep`

— DFE adaptive step resolution

`1e-6`

(default) | nonnegative real scalar | nonnegative real-valued row vector

DFE adaptive step resolution, specified as a nonnegative real scalar or a
nonnegative real-valued row vector in volts. Specify as a scalar to apply the same value
to all the DFE taps, or specify as a vector that has the same length as
`TapWeights`

.

`EqualizationStep`

specifies the minimum change in DFE taps from
one time step to the next to mimic hardware limitations. Setting
`EqualizationStep`

to zero yields DFE tap values without any
resolution limitation.

**Data Types: **`double`

`Taps2x`

— Multiply DFE tap weights by a factor of two

false (default) | true

Multiply DFE tap weights by a factor of two, specified as true or false. Set this property to true

The output of the slicer in the `serdes.DFE`

System object from the SerDes Toolbox™ is [-0.5 0.5]. But some industry applications require the slicer output to
be [-1 1]. `Taps2x`

allows you to quickly double the DFE tap weights
to change the slicer reference.

**Advanced**

`SymbolTime`

— Time of single symbol duration

`1e-10`

(default) | real scalar

Time of a single symbol duration, specified as a real scalar in seconds (s).

**Data Types: **`double`

`SampleInterval`

— Uniform time step of waveform

`6.25e-12`

(default) | real scalar

Uniform time step of the waveform, specified as a real scalar in seconds (s).

**Data Types: **`double`

`Modulation`

— Modulation scheme

`2`

(default) | `3`

| `4`

Modulation scheme, specified as `2`

, `3`

or
`4`

.

Modulation Value | Modulation Scheme |
---|---|

`2` | Non-return to zero (NRZ) |

`3` | Three-level pulse amplitude modulation (PAM3) |

`4` | Four-level pulse amplitude modulation (PAM4) |

**Note**

IBIS does not support a PAM3 modulation scheme, so you cannot export the System object to IBIS-AMI model if you set the modulation scheme to PAM3.

**Data Types: **`double`

`WaveType`

— Input waveform type

`'Sample'`

(default) | `'Impulse'`

Input waveform type, specified as one of these:

`'Sample'`

— A sample-by-sample input signal.`'Impulse'`

— An impulse-response input signal.

**Data Types: **`char`

## Usage

### Syntax

### Input Arguments

`x`

— Input baseband signal

scalar | vector

Input baseband signal, specified as a scalar or vector. If you set the
`WaveType`

property to `'Sample'`

, then the
input signal is a sample-by-sample signal specified as a scalar. If you set the
`WaveType`

property to `'Impulse'`

, the input
signal is an impulse-response vector signal.

### Output Arguments

`y`

— Modified channel output

scalar | vector

Modified channel output, returned as a scalar or vector. If the input signal is a sample-by-sample signal specified as a scalar, then the output signal is also a scalar. If the input signal is an impulse-response signal specified as a vector, then the output signal is also a vector.

`TapWeights`

— Estimated DFE tap weight values

vector

Estimated DFE tap weight values, returned as a vector.

## Object Functions

To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named `obj`

, use
this syntax:

release(obj)

## Examples

### Equalize Baseband Signal Using DFE System Object

This example shows how to equalize a baseband signal using standalone DFE and CDR System objects. Use a symbol time of 80 ps and 8 samples per symbol. Set the channel loss to 8 dB, modulation scheme to NRZ, and number of DFE taps to 1.

N = 6000; %Number of symbols to simulate SymbolTime = 80e-12; SamplesPerSymbol = 8; ChannelLoss = 8; Modulation = 2; %Number of modulation levels nDFEtaps = 1; %Number of DFE taps

Define the system stimulus using a `serdes.Stimulus`

System object.

dt = SymbolTime/SamplesPerSymbol; %sample interval F = 1/SymbolTime/2; %Fundamental frequency Stimulus = serdes.Stimulus(SampleInterval=dt,SymbolTime=SymbolTime,... Modulation=Modulation);

Define the channel model System object.

```
channelModel = serdes.ChannelLoss(Loss=ChannelLoss,dt=dt,...
TargetFrequency= F);
```

Create the CDR System object.

CDR = serdes.CDR(SymbolTime=SymbolTime,... SampleInterval=dt,Step=1/64,... Modulation=Modulation);

Create the DFE System object.

DFE = serdes.DFE(SymbolTime=SymbolTime,... SampleInterval=dt,TapWeights=zeros(1,nDFEtaps),... EqualizationGain=2e-3,Modulation=Modulation);

Initialize the signals.

waveIn = zeros(N*SamplesPerSymbol,1); waveOut = zeros(N*SamplesPerSymbol,1); phase = zeros(size(waveIn)); tapsOut = zeros(N*SamplesPerSymbol,nDFEtaps);

Simulate the system with the CDR and DFE System objects.

for ii = 1:length(waveIn) %Create the input signal waveIn(ii) = channelModel(step(Stimulus)); %Apply clock data recovery to the waveform [phase(ii),clkAMI,details]=CDR(waveIn(ii)); %Pass the waveform, clock, and recovered data to the DFE [waveOut(ii),tapsOut(ii,:)]=DFE(waveIn(ii),clkAMI.clockValidOnRising,details.symbolRecovered); end

Visualize the waveform, eye diagram, CDR phase, and DFE tap weight adaptation.

t = dt*(0:length(waveIn)-1); w = waveOut(end-50*SamplesPerSymbol+1:end); M = reshape(w,SamplesPerSymbol,[]); figure subplot(221) plot(t(1:length(w)),w) xlabel('s') ylabel('V') title('Equalized Waveform') subplot(222) plot(t,phase) xlabel('s') ylabel('Fraction of Symbol Time') title('CDR Phase') subplot(223) plot(t(1:SamplesPerSymbol),M,'b') xlabel('s') ylabel('V') title('Eye Diagram') subplot(224) plot(t,tapsOut) xlabel('s') ylabel('V') title('DFE Tap Weight')

## More About

### Adapt Operating Mode

The Init subsystem calls to the `serdes.DFE`

. The
`serdes.DFE`

finds the optimum DFE tap values for the best eye height
opening for statistical analysis. During time domain simulation, DFE uses the adapted values
as the starting point and applies them to the input waveform. For more information about the
Init subsystem, see Statistical Analysis in SerDes Systems

## Version History

**Introduced in R2023a**

## See Also

`serdes.CDR`

| `serdes.DFECDR`

| DFECDR | CDR

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)