Main Content

serdes.FFE

Models a feed-forward equalizer

Description

Theserdes.FFESystem object™ applies a feed-forward equalizer (FFE) as a symbol-spaced finite-impulse response (FIR) filter. Apply the equalizer to a sample-by-sample input signal or an impulse response vector input signal to reduce distortions due to channel loss impairments.

To equalize the baseband signal:

  1. Create theserdes.FFEobject and set its properties.

  2. Call the object with arguments, as if it were a function.

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

Creation

Description

ffe= serdes.FFEreturns an FFE object that modifies an input waveform according to the finite impulse response (FIR) transfer function defined in the object.

ffe= serdes.FFE(Name,Value)sets properties using one or more name-value pairs. Enclose each property name in quotes. Unspecified properties have default values.

Example:ffe = serdes.FFE('Mode',1)returns an FFE object that applies specified tap weights to the input waveform.

Properties

expand all

Unless otherwise indicated, properties arenontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and thereleasefunction unlocks them.

If a property istunable, you can change its value at any time.

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

Main

FFE operating mode, specified as0or1.Modedetermines whether FFE is bypassed or not.

Mode Value FFE Mode FFE Operation
0 Off serdes.FFEis bypassed and the input waveform remains unchanged.
1 Fixed serdes.FFEapplies input FFE tap weights, specified inTapWeights, to input waveform.

Data Types:

FFE tap weights, specified as a row vector in V. The length of the vector specifies the number of taps. Each vector element's value specifies the strength of the tap at that position. The tap with the largest magnitude is the main tap and therefore defines the number of pre- and post-cursor taps.

Data Types:

Normalize tap weight vectors, specified astrueorfalse. When set totrue, the object scales theTapWeightsvector elements so that the sum of their absolute values is 1.

Data Types:logical

Advanced

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

Data Types:

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

Data Types:

Input waveform type:

  • 'Sample'— A sample-by-sample input signal

  • 'Impulse'— An impulse response input signal

Data Types:char

Usage

Syntax

Description

y= ffe(x)

Input Arguments

expand all

Input baseband signal. If theWaveTypeis set to'Sample', the input signal is a sample-by-sample signal specified as a scalar. If theWaveTypeis set to'Impulse', the input signal must be an impulse response vector signal.

Output Arguments

expand all

Filtered channel output. If the input signal is a sample-by-sample signal specified as a scalar, the output is also scalar. If the input signal is an impulse response vector signal, the output is also 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 namedobj, use this syntax:

release(obj)

expand all

step RunSystem objectalgorithm
release Release resources and allow changes toSystem objectproperty values and input characteristics
reset Reset internal states ofSystem object

Examples

collapse all

This example shows how to process impulse response of a channel usingserdes.FFESystem object™.

Use a symbol time of 100 ps and 16 samples per symbol. The channel has 16 dB loss.

SymbolTime = 100e-12; SamplesPerSymbol = 16; dbloss = 16;

Calculate the sample interval.

dt = SymbolTime/SamplesPerSymbol;

Create the FFE object with fixed mode of operation.

TapWeights = [0 0.7 -0.2 -0.10]; FFEMode = 1; FFE1 = serdes.FFE('SymbolTime',SymbolTime,'SampleInterval',dt,...“模式”,FFEMode,'WaveType','Impulse',...'TapWeights',TapWeights);

Create the channel impulse response.

channel = serdes.ChannelLoss('Loss',dbloss,“dt”,dt,...'TargetFrequency',1/SymbolTime/2); impulseIn = channel.impulse;

Process the impulse response with FFE.

impulseOut = FFE1(impulseIn);

Convert the impulse responses to pulse, waveform and eye diagram data for visualization in later steps. Initialize the pseudorandom binary sequence (PRBS).

ord = 6; dataPattern = prbs(ord,2^ord-1)-0.5; pulseIn = impulse2pulse(impulseIn,SamplesPerSymbol,dt); waveIn = pulse2wave(pulseIn,dataPattern,SamplesPerSymbol); eyeIn = reshape(waveIn,SamplesPerSymbol,[]); pulseOut = impulse2pulse(impulseOut,SamplesPerSymbol,dt); waveOut = pulse2wave(pulseOut,dataPattern,SamplesPerSymbol); eyeOut = reshape(waveOut,SamplesPerSymbol,[]);

Create the time vectors.

t = dt*(0:length(pulseOut)-1)/SymbolTime; teye = t(1:SamplesPerSymbol); t2 = dt*(0:length(waveOut)-1)/SymbolTime;

情节的脉冲响应比较,佤邦veform comparison, and input and output eye diagrams.

figure plot(t,pulseIn,t,pulseOut) legend('Input','Output') title('Pulse Response Comparison') xlabel('SymbolTimes'),ylabel('Voltage') gridonaxis([47 60 -0.1 0.4])

Figure contains an axes object. The axes object with title Pulse Response Comparison contains 2 objects of type line. These objects represent Input, Output.

figure plot(t2,waveIn,t2,waveOut) legend('Input','Output') title('Waveform Comparison') xlabel('SymbolTimes') ylabel('Voltage') gridon

Figure contains an axes object. The axes object with title Waveform Comparison contains 2 objects of type line. These objects represent Input, Output.

图次要情节(211),情节(teye eyeIn,'b') ax = axis; xlabel('SymbolTimes') ylabel('Voltage') gridontitle('Input Eye Diagram') subplot(212),plot(teye,eyeOut,'b') axis(ax); xlabel('SymbolTimes') ylabel('Voltage') gridontitle('Output Eye Diagram')

Figure contains 2 axes objects. Axes object 1 with title Input Eye Diagram contains 63 objects of type line. Axes object 2 with title Output Eye Diagram contains 63 objects of type line.

This example shows how to process impulse response of a channel one sample at a time usingserdes.FFESystem object™.

Use a symbol time of 100 ps with 16 samples per symbol. The channel has 16 dB loss.

SymbolTime = 100e-12; SamplesPerSymbol = 16; dbloss = 16;

Calculate the sample interval.

dt = SymbolTime/SamplesPerSymbol;

Create the FFE object with fixed mode.

FFEMode = 1; TapWeights = [0 0.7 -0.2 -0.1]; FFE = serdes.FFE('SymbolTime',SymbolTime,'SampleInterval',dt,...“模式”,FFEMode,'WaveType','Sample',...'TapWeights',TapWeights);

Create the channel impulse response.

channel = serdes.ChannelLoss('Loss',dbloss,“dt”,dt,...'TargetFrequency',1/SymbolTime/2);

Initialize the pseudorandom binary sequence (PRBS) code generator of order 12.

prbsOrder = 12; M = 500;%number of symbols to simulate[dataBit,prbsSeed]=prbs(prbsOrder,1);

Loop through one symbol at a time.

inSymbol = zeros(SamplesPerSymbol,1); outWave = zeros(SamplesPerSymbol*M,1);forii = 1:M%Get new symbol[dataBit,prbsSeed]=prbs(prbsOrder,1,prbsSeed); inSymbol(1:SamplesPerSymbol) = dataBit-0.5;%convolve input waveform with channely = channel(inSymbol);%process one sample at a time through the FFEforjj = 1:SamplesPerSymbol outWave((ii-1)*SamplesPerSymbol+jj) = FFE(y(jj));endend

After truncating the first 75 symbols to allow equalization, use the function reshape on the array of symbols to create the eye diagram.

foldedEye = reshape(outWave(75*SamplesPerSymbol+1:M*SamplesPerSymbol),SamplesPerSymbol,[]); t = dt*(0:SamplesPerSymbol-1); figure,plot(t,foldedEye,'b');

Figure contains an axes object. The axes object contains 425 objects of type line.

Extended Capabilities

Version History

Introduced in R2019a

See Also

||