Returns the quantity \(OMA_{outer}\) as specified in IEEE Standard 802.3 2018.
Syntax |
Description |
---|---|
out=outeroma(signal, samplespersymbol, reference) ; |
Returns the quantity \(OMA_{outer}\) as specified in IEEE Standard 802.3 2018. It is essentially the amplitude of the signal pattern.
The specification of the input arguments is as follows:
signal: a 1D matrix
samplespersymbol: the number of samples per unit interval (UI) or symbol
reference: the reference PAM-4 test symbol pattern
The function returns the \(OMA_{outer}\). |
Example
This example calculates the \(OMA_{outer}\) for the PAM4 signal in the Optical PAM-4 example:
clear;
switchtodesign;
# reset simulation parameters to include more bits in the simulation
ignoreBit = 8;
timeWindow = 6.5536e-7;
sampleRate = 2e11;
Nsamples = 131072;
setnamed("EYE_REF", "ignore start periods", ignoreBit);
setnamed("EYE_REF", "ignore end periods", ignoreBit);
setnamed("VSA_1", "ignore start symbols", ignoreBit);
setnamed("VSA_1", "ignore end symbols", ignoreBit);
setnamed("::Root Element", "simulation input", "time window");
setnamed("::Root Element", "time window", timeWindow);
setnamed("::Root Element", "sample rate", sampleRate);
setnamed("PRBS Generator", "order", 32);
setnamed("PRBS Generator", "automatic seed", true);
setnamed("PRBS Generator_1", "order", 32);
setnamed("PRBS Generator_1", "automatic seed", true);
run;
# get signal results
signal = getresult("EYE_REF", "waveform/input");
signal = signal.getattribute("amplitude (a.u.)");
reference = getresult("VSA_1", "waveform/constellation I");
reference = reference.getattribute("amplitude (a.u.)");
signalThreshold = [0.000575, 0.000735, 0.00092];
samplesPerSymbol = getnamed("::Root Element", "samples per bit");
Nsequency = getnamed("::Root Element", "sequence length");
N = length(signal);
Nsignal = (Nsequency - ignoreBit*2)*samplesPerSymbol;
# pad signal with 0 if signal is cut off by the analyzers
if (N < Nsequency*samplesPerSymbol) {
signalReshape = matrix(1, Nsequency*samplesPerSymbol);
signalReshape(1:N) = signal(1:N);
}
# define resference signal
for (ii = 1:length(reference)) {
if (reference(ii) < signalThreshold(1)) { reference(ii) = 0; }
else {
if (reference(ii) < signalThreshold(2)) { reference(ii) = 1; }
else {
if (reference(ii) < signalThreshold(3)) { reference(ii) = 2; }
else { reference(ii) = 3; }
}
}
}
signal = signalReshape(1+samplesPerSymbol*ignoreBit : end - samplesPerSymbol*ignoreBit);
?OMAouter = outeroma(signal, samplesPerSymbol, reference);
See Also