eyeDiagramSI
Description
The eyeDiagramSI
System object™ creates an eye diagram object by accumulating a 2-D histogram from time-domain
eye diagram data. The object makes it easier to create large data sets and perform metric
calculations.
To create the eye diagram object:
Create the
eyeDiagramSI
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
Syntax
Description
eye = eyeDiagramSI
returns an eye diagram object that accumulates
an eye diagram as 2-D histograms.
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.
SymbolThresholds
— Nominal center amplitude for eye opening
[]
(default) | vector
Nominal center amplitude for each eye opening in the eye diagram, specified as a vector.
Note
if you do not define the SymbolThresholds
property, the
object automatically calculates the symbol thresholds based on the
Modulation
property.
Tunable: Yes
Data Types: double
SampleInterval
— Time between adjacent samples in input data
1
(default) | scalar
Elapsed time between adjacent samples in the input data, specified as a scalar in seconds.
Tunable: Yes
Data Types: double
SymbolTime
— Time span of one symbol
8
(default) | scalar
Time span of one symbol, specified as a scalar in seconds.
Tunable: Yes
Data Types: double
ClockThresholds
— Edge detection threshold for waveform clock signals
0
(default) | scalar
Edge detection threshold for waveform clock signals, specified as a scalar.
Tunable: Yes
Data Types: double
Modulation
— Number of symbol levels in eye diagram
scalar
Number of symbol levels in the eye diagram, specified as a scalar.
Note
If you do not define the Modulation
property or it is set to
0
, the object automatically sets it to ( number of eyes defined by the SymbolThresholds
property+1).
Data Types: double
SampleOn
— Method to sample waveform clock signals
Auto
(default) | Rising
| Falling
| Both
| Times
Method to sample waveform clock signals, specified as one of these:
Auto
— Detect theclock
input argument to automatically set theSampleOn
property.If the clock signal is monotonically increasing, the System object considers it a time-based clock signal and sets
SampleOn
toTimes
.If the clock signal is non-monotonically increasing, the System object considers it a waveform and sets
SampleOn
toRising
.Rising
— Sample thedata
waveform at the rising edge of theclock
waveform.Falling
— Sample thedata
waveform at the falling edge of theclock
waveform.Both
— Sample thedata
waveform at both rising and falling edges of theclock
waveform.Times
— Sample thedata
waveform at the time values specified by theclock
signal.
Data Types: char
ClockMode
— Method used by recovered clock to capture data
Auto
(default) | Clocked
| Ideal
| Convolved
Method used by recovered clock to capture data, specified as one of these:
Auto
— Detect theclock
input argument to automatically set theClockMode
property.If you provide a clock signal, set
ClockMode
toClocked
. Otherwise, setClockMode
toIdeal
.Clocked
— Capture data using theclock
input.Ideal
— Capture data and clock using an ideal reference clock source.Convolved
— Capture data and clock PDF in the ideal mode and convolve them to present an eye diagram and clock pdf that look as though they were captured in the clocked mode.
For more information, see Clock Modes.
Data Types: char
PhaseDetector
— Clock phase detector algorithm
BangBang
(default) | BaudRateTypeA
| None
Algorithm used for clock phase detector (CDR). For more information, see Phase Detectors: Baud-Rate Type-A Versus Bang-Bang (SerDes Toolbox).
The phase detector algorithm used by the eyeDiagramSI
System object are not full CDRs. They choose the best static phase to match the entire
input data all at once, rather than adapting the phase to the data over time.
Data Types: char
PhaseOffset
— Delay between clock edge and timing origin
0
(default) | nonnegative real scalar
Delay in seconds between the clock edge and the timing origin.
Note
Phase offset delay must be causal.
Data Types: double
PhaseOffsetUnit
— Unit for phase offset
Seconds
(default) | Samples
| UI
Unit for phase offset delay, specified as Seconds
,
Samples
, or UI
.
Data Types: char
SymbolsPerDiagram
— Width of eye diagram in symbols
2
(default) | scalar
The width of the eye diagram in symbols, specified as a scalar.
Data Types: double
TimeBins
— Number of time bins in eye diagram
255
(default) | scalar
Number of time bins in the eye diagram, specified as a scalar.
Data Types: double
AmplitudeBins
— Number of amplitude bins in eye diagram
255
(default) | scalar
Number of amplitude bins in the eye diagram, specified as a scalar.
Data Types: double
AmplitudeLimits
— Minimum and maximum eye amplitudes in eye diagram
[]
(default) | two-element vector
Minimum and maximum eye amplitudes contained in the eye diagram, specified as a two-element vector.
Data Types: double
SymbolPDFs
— Eye diagram stack for each symbol
[]
(default) | vector
Eye diagram stack calculated for each symbol in the data, specified as a vector. The System object automatically sets this property from the data that you read in.
Tunable: Yes
Data Types: double
EyeHistogram
— 2-D eye histogram
[]
(default) | vector
2D eye histogram spanning 1 or more UIs, specified as a vector, with time on the x-axis and amplitude on the y-axis. The System object automatically sets this property from the data that you read in.
Tunable: Yes
Data Types: double
ClockEdgeTimes
— Histogram of clock edge times
[]
(default) | vector
Histogram of clock edge times relative to the timing origin, specified as a vector. This property is automatically set from the data that you read in.
Tunable: Yes
Data Types: double
Usage
Description
Input Arguments
data
— Sampled eye diagram data
vector
Uniformly sampled waveform data, specified as a vector. The System object uses this data to create an eye diagram object.
clock
— Sampling clock for input data
vector
Sampling clock signal for input data, specified as a vector. The System object centers the windows for the eye pattern on the clock edges or clock
times depending on the SampleOn
property.
thresholds
— Symbol thresholds to separate symbols
vector | matrix
Symbol threshold(s) to use to separate symbols, specified as a vector or a matrix.
The System object uses this value to separate symbols when building the eye diagram. If
you provide this information, it increases the robustness of PAMn metrics. By default,
its values is set to the value of the SymbolThresholds
property.
Output Arguments
eye
— Eye diagram
eye diagram object
Eye diagram, created as an eye diagram object. The object is as an accumulation of 2-D histograms from the eye diagram data.
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)
Specific to eyeDiagramSI
eyeLevels (Mixed-Signal Blockset) | Measure symbol level statistics from eye diagram |
eyeAmplitude (Mixed-Signal Blockset) | Measure eye amplitude |
eyeCrossing (Mixed-Signal Blockset) | Measure eye crossing points |
eyeCenter (Mixed-Signal Blockset) | Measure eye center point |
risetime (Mixed-Signal Blockset) | Measure rise time from eye diagram |
falltime (Mixed-Signal Blockset) | Measure fall time from eye diagram |
eyeHeight (Mixed-Signal Blockset) | Measure vertical eye opening |
eyeWidth (Mixed-Signal Blockset) | Measure horizontal eye opening |
eyeArea (Mixed-Signal Blockset) | Measure eye area |
vec (Mixed-Signal Blockset) | Measure vertical eye closure |
com (Mixed-Signal Blockset) | Measure channel operating margin |
eyeLinearity (Mixed-Signal Blockset) | Measure eye linearity |
Examples
Measure Eye Opening and Check Compliance
This example shows how to use eyeDiagramSI
System object™ to measure properties of a sampled data signal originating from laboratory data and check eye opening compliance against an eye mask.
Save the waveform data in a Standard File Format, or a format for which a reader is available on the File Exchange.
Use readmatrix
to read cells from the file into a matrix, starting at cell A5
to skip the metadata.
waveforms = readmatrix("pam5_waveforms.csv", "Range", "A5");
Our example data file contains multiple signals as different columns. Extract the third column as the signal to analyze.
pam5Wave = waveforms(:, 3);
Enter the waveform's characteristics if they weren't included with the file.
symbolTime = 66.67e-12; samplesPerSymbol = 32; modulation = 5;
Create an eyeDiagramSI
System object.
eyeDiagram = eyeDiagramSI; eyeDiagram.SymbolTime = symbolTime; eyeDiagram.SampleInterval = symbolTime / samplesPerSymbol; eyeDiagram.Modulation = modulation;
Feed the data into the eyeDiagramSI
System object.
eyeDiagram(pam5Wave);
Visualize the resulting eye diagram.
plot(eyeDiagram);
Plot time-axis bathtub curves for each eye opening. Eyes are ordered from lowest center amplitude to highest.
bathtub(eyeDiagram, "Time")
Time
Define a rectangular eyeMask
object that is 0.2
Unit Intervals (UI) wide and 0.02
amplitude units tall. You can create an eyeMask
directly using X and Y coordinate vectors to define vertices of the mask shape, or use the eyeMaskRectangle
function with a width and height.
% mask = eyeMask([-0.1, -0.1, 0.1, 0.1], [-0.01, 0.01, 0.01, -0.01]);
mask = eyeMaskRectangle(0.2, 0.02);
Position the mask center 0.1
UI right of the timing origin.
mask.Position = [0.1, 0];
Measure the margin between the mask and the eye openings.
margins = margin(mask, eyeDiagram, "Plot", "on")
margins = 4×2
0.0049 0.0210
-0.0075 -0.0630
0.0177 0.0553
0.0079 0.0473
The second eye from the bottom of the diagram is not compliant with the mask; it has negative values for its minimum width and height margins.
Measure Eye Diagram Metrics
This example show show to measure the signal properties of a sampled data signal such as eye height, eye width, and more using the eyeDiagramSI
System object™.
Create a PAM3 signal using the serdes.Stimulus
System object. The signal has a symbol time of 100e-12
and 16
samples per symbol that contains 1000
symbols of data.
symbols = 1000; samplesPerSymbol = 16; symbolTime = 100e-12; sampleInterval = symbolTime / samplesPerSymbol; modulation = 3; stimulusGenerator = serdes.Stimulus; stimulusGenerator.Modulation = modulation; stimulusGenerator.SampleInterval = sampleInterval; stimulusGenerator.SymbolTime = symbolTime;
Create a channel model with 2
dB loss using the serdes.ChannelLoss
System object.
channelModel = serdes.ChannelLoss; channelModel.dt = sampleInterval; channelModel.Loss = 2;
Run the stimulus waveform through the channel model.
out = zeros(samplesPerSymbol * symbols, 1); for i = 1:samplesPerSymbol * symbols out(i) = channelModel(stimulusGenerator()); end
Trim the beginning of the channel output to remove the influence of initial conditions.
outTrim = out(2001:end);
Create an eyeDiagramSI
System object that has the same property values as the stimulus above.
eyeDiagram = eyeDiagramSI; eyeDiagram.SampleInterval = sampleInterval; eyeDiagram.SymbolTime = symbolTime; eyeDiagram.Modulation = modulation;
Feed the channel output data into the eyeDiagramSI system object.
eyeDiagram(outTrim);
Visualize the resulting eye diagram plot.
plot(eyeDiagram);
Measure the best eye height for each eye opening. Results are presented for each eye opening from the lowest to highest eye center amplitude.
[bestHeight, timeAtBestHeight] = eyeHeight(eyeDiagram)
bestHeight = 2×1
0.1787
0.1853
timeAtBestHeight = 2×1
10-11 ×
0.7087
0.6299
Measure the eye width at the symbol threshold levels for each eye opening.
width = eyeWidth(eyeDiagram, eyeDiagram.SymbolThresholds)
width = 2×1
10-10 ×
0.3535
0.3141
Measure the mean symbol levels at the center of the eye diagram (t = 0
) and overlay the result on the eye diagram plot.
levels = eyeLevels(eyeDiagram, 0, "Plot", "on")
levels = 3×1
-0.4060
0.0028
0.4128
Version History
Introduced in R2024a
See Also
Eye Measurement (Mixed-Signal Blockset) | eyeContour
(Mixed-Signal Blockset) | eyeMask
(Mixed-Signal Blockset)
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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)