Main Content

serdes.DFE

Minimize intersymbol interference (ISI) at clock sampling times

Since R2023a

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:

  1. Create the serdes.DFE object and set its properties.

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

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

dfe = serdes.DFE(Name=Value) sets properties using one or more name-value arguments. For example, dfe = serdes.DFE(Mode=1) returns a DFE object that applies the specified DFE tap weights to the input waveform.

Properties

expand all

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.

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 ValueDFE ModeDFE Operation
0OffThe object bypasses DFE and the input waveform remains unchanged.
1FixedThe object applies the DFE tap weights specified in TapWeights to the input waveform.
2AdaptThe object determines the optimum DFE tap weights and applies them to the input waveform.

Data Types: double

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

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

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

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

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

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

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

Data Types: double

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

Data Types: double

Modulation scheme, specified as 2, 3 or 4.

Modulation ValueModulation Scheme
2Non-return to zero (NRZ)
3Three-level pulse amplitude modulation (PAM3)
4Four-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

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

Description

example

y = dfe(x)

Input Arguments

expand all

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

expand all

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.

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)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

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

expand all

Version History

Introduced in R2023a