diff --git a/docs/index.rst b/docs/index.rst index 9383711f..4c845d45 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,6 +13,7 @@ in real-world mesh optical networks. It is based on the Gaussian Noise Model. install json excel + yang extending about-project model diff --git a/docs/yang.md b/docs/yang.md new file mode 100644 index 00000000..0fb92b9e --- /dev/null +++ b/docs/yang.md @@ -0,0 +1,325 @@ +(yang)= +# YANG-formatted data + +(yang-equipment)= +## Equipment Library + +The [equipment library](concepts-equipment) is defined via the `tip-photonic-equipment` YANG model. +The database describes all [amplifier models](yang-equipment-amplifier), all [types of fiber](yang-equipment-fiber), all possible [ROADM models](yang-equipment-roadm), etc. + +(yang-equipment-amplifier)= +### Amplifiers + +Amplifiers introduce noise to the signal during amplification, and care must be taken to describe their performance correctly. +There are some common input parameters: + +`type` + +: A free-form name which must be unique within the whole equipment library. +It will be used in the network topology to specify which amplifier model is deployed at the given place in the network. + +`frequency-min` and `frequency-max` + +: Operating range of the amplifier. + +`gain-flatmax` + +: The optimal operating point of the amplifier. +This is the place where the gain tilt and the NF of the amplifier are at its best. + +`gain-min` + +: Minimal possible gain that can be set for the EDFA. +Any lower gain requires adding a physical attenuator. + +`max-power-out` + +: Total power cap at the output of the amplifier, measured across the whole spectrum. + +`has-output-voa` + +: Specifies if there's a Variable Optical Attenuator (VOA) at the EDFA's output port. + +One of the key parameters of an amplifier is the method to use for [computing the Noise Figure (NF)](concepts-nf-model). +Here's how they are represented in YANG data: + +(yang-equipment-amplifier-polynomial-NF)= +#### `polynomial-NF` + +The [Polynomial NF model](ext-nf-model-polynomial-NF) requires four coefficients for the polynomial function: `a`, `b`, `c` and `d`. + +```json +{ + "type": "Juniper-BoosterHG", + "gain-min": "10", + "gain-flatmax": "25", + "max-power-out": "21", + "frequency-min": "191.35", + "frequency-max": "196.1", + "polynomial-NF": { + "a": "0.0008", + "b": "0.0272", + "c": "-0.2249", + "d": "6.4902" + } +} +``` + +(yang-equipment-amplifier-min-max-NF)= +#### `min-max-NF` + +This is an operator-focused model. +Performance is defined by the [minimal and maximal NF](nf-model-min-max-NF). + +`nf-min` + +: Minimal Noise Figure. +This is achieved when the EDFA operates at its maximal flat gain (see the `gain-flatmax` parameter). + +`nf-max` + +: Maximal Noise Figure. +This worst-case scenario applies when the EDFA operates at its minimal gain (see the `gain-min` parameter). + +(yang-equipment-amplifier-openroadm)= +#### OpenROADM + +NF models for preamps, boosters and inline amplifiers as defined via the OpenROADM group. + +(yang-equipment-amplifier-polynomial-OSNR-OpenROADM)= +##### `OpenROADM-ILA` + +This model is useful for [amplifiers compliant to the OpenROADM specification for ILA](ext-nf-model-polynomial-OSNR-OpenROADM). +The input parameters to this model are once again four coefficients `a`. `b`, `c` and `d`: + +```json +{ + "type": "low-noise", + "gain-min": "12", + "gain-flatmax": "27", + "max-power-out": "22", + "frequency-min": "191.35", + "frequency-max": "196.1", + "OpenROADM-ILA": { + "a": "-8.104e-4", + "b": "-6.221e-2", + "c": "-5.889e-1", + "d": "37.62", + } +} +``` + +(yang-equipment-amplifier-OpenROADM-preamp-booster)= +##### `OpenROADM-preamp` and `OpenROADM-booster` + +No extra parameters are defined for these NF models. +See the [model documentation](ext-nf-model-noise-mask-OpenROADM) for details. + +(yang-equipment-amplifier-composite)= +#### `composite` + +A [composite](ext-nf-model-dual-stage-amplifier) amplifier combines two distinct amplifiers. +The first amplifier will be always operated at its maximal gain (and therefore its best NF). + +`preamp` + +: Reference to the first amplifier model + +`booster` + +: Reference to the second amplifier model + +(yang-equipment-amplifier-raman-approximation)= +#### `raman-approximation` + +A fixed-NF amplifier, especially suitable for emulating Raman amplifiers +in scenarios where the Raman-aware engine cannot be used. + +`nf` + +: Noise Figure of the amplifier. + +(yang-equipment-amplifier-fine-tuning)= +#### Advanced EDFA parameters + +In addition to all parameters specified above, it is also possible to describe the EDFA\'s performance in higher detail. +All of the following parameters are given as measurement points at arbitrary frequencies. +The more data points provided, the more accurate is the simulation. +The underlying model uses piecewise linear approximation to estimate values which are laying in between the provided values. + +`dynamic-gain-tilt` + +: FIXME: document this + +`gain-ripple` + +: Difference of the amplifier gain for a specified frequency, as compared to the typical gain over the whole spectrum + +`nf-ripple` + +: Difference in the resulting Noise Figure (NF) as a function of a carrier frequency + +```json +{ + "type": "vg-15-26", + "gain-min": "15", + "gain-flatmax": "26", + "dynamic-gain-tilt": [ + { + "frequency": "191.35", + "dynamic-gain-tilt": "0" + }, + { + "frequency": "196.1", + "dynamic-gain-tilt": "2.4" + } + ], + "max-power-out": "23", + "min-max-NF": { + "nf-min": "6.0", + "nf-max": "10.0" + } +} +``` + +These values are optional. If not provided, gain and NF is assumed to not vary with carrier frequency. + +(yang-equipment-fiber)= +### Fiber + +An optical fiber attenuates the signal and acts as a medium for non-linear interference (NLI) for all signals in the propagated spectrum. +When using the Raman-aware simulation engine, the Raman effect is also considered. + +`type` + +: A free-form name which must be unique within the whole equipment library, such as `G.652`. + +`chromatic-dispersion` + +: Chromatic dispersion, in $\frac{ps}{nm\times km}$. + +`chromatic-dispersion-slope` + +: Dispersion slope is related to the $\beta _3$ coefficient. +In $\frac{ps}{nm^{2}\times km}$. + +`gamma` + +: Fiber\'s $\gamma$ coefficient. +In $\frac{1}{W\times km}$. + +`pmd-coefficient` + +: Coefficient for the Polarization Mode Dispersion (PMD). +In $\frac{ps}{\sqrt{km}}$. + +`raman-efficiency` + +: Normalized efficiency of the Raman amplification per operating frequency. +This is a required parameter if using Rama-aware simulation engine. +The data type is a YANG list keyed by `delta-frequency` (in $\text{THz}$). +For each `delta-frequency`, provide the `cr` parameter which is a dimensionless number indicating how effective the Raman transfer of energy is at that particular frequency offset from the pumping signal. + +```javascript +{ + "type": "SSMF", + "dispersion": "16.7", + "gamma": "1.27", + "pmd-coefficient": "0.0400028124", + "raman-efficiency": [ + { + "delta-frequency": "0", + "cr": "0" + }, + { + "delta-frequency": "0.5", + "cr": "9.4e-06" + }, + + // more frequencies go here + + { + "delta-frequency": "42.0", + "cr": "1e-07" + } + ] +} +``` +(yang-equipment-roadm)= +### ROADMs + +Compared to EDFAs and fibers, ROADM descriptions are simpler. +In GNPy, ROADM mainly acts as a smart, spectrum-specific attenuator which equalizes carrier power to a specified power level. +The PMD contribution is also taken into account, and the Add and Drop stages affect signal\'s OSNR as well. + +`type` + +: Unique model identification, used when cross-referencing from the network topology. + +`add-drop-osnr` + +: OSNR penalty introduced by the Add stage or the Drop stage of this ROADM type. + +`target-channel-out-power` + +: Per-channel target TX power towards the egress amplifier. +Within GNPy, a ROADM is expected to attenuate any signal that enters the ROADM node to this level. +This can be overridden on a per-link in the network topology. + +`pmd` + +: Polarization mode dispersion (PMD) penalty of the express path within this ROADM model. +In $\text{s}$. + +`compatible-preamp` and `compatible-booster` + +: List of all allowed booster/preamplifier types. +Useful for specifying constraints on what amplifier modules fit into ROADM chassis, and when using fully disaggregated ROADM topologies as well. + +(yang-equipment-transponder)= +### Transponders + +Transponders (or transceivers) are sources and detectors of optical signals. +There are a few parameters which apply to a transponder model: + +`type` + +: Unique name, for corss-referencing from the topology data. + +`frequency-min` and `frequency-max` + +: Minimal and maximal operating frequencies of the receiver and transmitter. + +A lot of transponders can operate in a variety of modes, which are described via the `transceiver/mode` list: + +`name` + +: Identification of the transmission mode. +Free form, has to be unique within one transponder type. + +`bit-rate` + +: Data bit rate, in $\text{Gbits}\times s^{-1}$. + +`baud-rate` + +: Symbol modulation rate, in $\text{Gbaud}$. + +`required-osnr` + +: Minimal allowed OSNR for the receiver. + +`in-band-tx-osnr` + +: Worst-case guaranteed initial OSNR at the Tx port per 0.1nm of bandwidth +Only the in-band OSNR is considered. + +`grid-spacing` + +: Minimal grid spacing, i.e., an effective channel spectral bandwidth. +In $\text{Hz}$. + +`tx-roll-off` + +: Roll-off parameter ($\beta$) of the TX pulse shaping filter. +This assumes a raised-cosine filter. diff --git a/gnpy/yang/tip/tip-photonic-equipment.yang b/gnpy/yang/tip/tip-photonic-equipment.yang new file mode 100644 index 00000000..55c9117c --- /dev/null +++ b/gnpy/yang/tip/tip-photonic-equipment.yang @@ -0,0 +1,685 @@ +module tip-photonic-equipment { + yang-version 1.1; + namespace "https://oopt.telecominfraproject.com/yang/equipment"; + prefix "tip-pe"; + + organization "Telecom Infrastructure Project"; + contact "https://github.com/Telecominfraproject/oopt-gnpy"; + description "Catalog of photonic equipment for simulating signal propagation via the OOPT-PSE GNPy tool"; + + revision 2020-09-01 { + description "Initial release"; + reference "Internal documentation"; + } + + typedef db-ratio { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "Decibels"; + } + + typedef noise-figure { + type db-ratio { + range "3.0 .. 20.0"; + } + description "Noise Figure of an amplifier"; + } + + typedef gain { + type db-ratio { + range "0 .. 40.0"; + } + description "Gain of an amplifier"; + } + + typedef power { + type decimal64 { + fraction-digits 2; + range "-99.9 .. 30.0"; + } + units "dBm"; + description "Optical power in dBm"; + } + + typedef carrier-frequency { + type decimal64 { + fraction-digits 7; + range "191.0 .. 197.0"; + } + units "THz"; + description "Optical frequency of a signal"; + } + + typedef frequency-channel-spacing { + type decimal64 { + fraction-digits 7; + range "6.25 .. 200.0"; + } + units "GHz"; + description "Channel spacing"; + } + + typedef baud-rate { + type decimal64 { + fraction-digits 4; + range "10 .. 130"; + } + units "Gbaud"; + description "Symbol rate"; + } + + typedef roll-off { + type decimal64 { + fraction-digits 4; + range "0 .. 1"; + } + description "Roll-off parameter (β) of the TX pulse shaping filter. This assumes a raised-cosine filter."; + } + + typedef cd { + type decimal64 { + fraction-digits 2; + range "-50000 .. 50000"; + } + units "ps × nm⁻¹"; + description "Chromatic Dispersion (CD)."; + } + + typedef pmd { + type decimal64 { + fraction-digits 4; + } + units "ps"; + description "Polarization mode dispersion (PMD)."; + } + + typedef polynomial-coefficient { + type decimal64 { + fraction-digits 12; + } + description "One coefficient within a polynomial"; + } + + grouping cubic-polynomial-coefficients { + description "Coefficients for a polynomial of a third degree: f(x) = a*x³ + b*x² + c*x + d"; + leaf a { + type polynomial-coefficient; + mandatory true; + description "Cubic (x³) coefficient"; + } + leaf b { + type polynomial-coefficient; + mandatory true; + description "Quadratic (x²) coefficient"; + } + leaf c { + type polynomial-coefficient; + mandatory true; + description "Linear (x) coefficient"; + } + leaf d { + type polynomial-coefficient; + mandatory true; + description "Offset (+) coefficient"; + } + } + + grouping amp-spectrum-profile { + description "Changes in amplifier's operation as a function of frequency"; + + list gain-ripple { + leaf frequency { + type carrier-frequency; + description "Frequency for the specific gain ripple deviation"; + } + + leaf gain-ripple { + type db-ratio; + mandatory true; + description "Gain ripple deviation at a given frequency"; + } + + key "frequency"; + + description "Amplifier gain ripple excursion comb list in dB across the frequency range"; + } + + list nf-ripple { + leaf frequency { + type carrier-frequency; + description "Frequency for the specific NF ripple deviation"; + } + + leaf nf-ripple { + type db-ratio; + mandatory true; + description "NF ripple deviation at a given frequency"; + } + + key "frequency"; + + description "Amplifier NF ripple excursion comb list in dB across the frequency range"; + } + + list dynamic-gain-tilt { + leaf frequency { + type carrier-frequency; + description "Frequency for the specific NF ripple deviation"; + } + + leaf dynamic-gain-tilt { + type db-ratio; + mandatory true; + description "DGT at a specified frequency"; + } + + key "frequency"; + + description "Dynamic Gain Tilt (DGT) refers to a relative change of gain + at a given frequency when compared to a reference frequency. + + Intro about the model: https://telecominfraproject.workplace.com/groups/OOPT.PSE/permalink/957144244450445/ + Relevant paper: https://www.osapublishing.org/jlt/abstract.cfm?uri=JLT-18-3-343"; + } + } + + grouping amp-common { + description "Properties common to all EDFAs except the composite models"; + + leaf frequency-min { + type carrier-frequency; + default 191.325; + description "Minimal frequency supported by this amplifier + + This refers to the edge of the optical spectrum, not to a central frequency of a fixed grid."; + } + + leaf frequency-max { + type carrier-frequency; + default 196.125; + description "Maximal frequency supported by this amplifier + + This refers to the edge of the optical spectrum, not to a central frequency of a fixed grid."; + } + + leaf has-output-voa { + type boolean; + default false; + description "If true, output VOA is present. + + An amplifier with an output VOA can be pushed to operate at its the max-power-out if the output VOA is available."; + } + + leaf gain-flatmax { + type gain; + mandatory true; + description "Maximal gain of the nominal range (without entering the extended range) + + Once the amplifier's gain gets pushed into the extended range, it begins to tilt as specified in the dynamic-gain-tilt."; + } + + leaf max-power-out { + type power; + mandatory true; + description "Maximal output power at the amplifier's output port + + The total signal output power will not be allowed beyond this value."; + } + } + + + list amplifier { + key "type"; + description "Available amplifier (EDFA) models"; + + leaf type { + type string; + description "Brief identification of the amplifier model. This is used for cross-referencing from topology data."; + } + + uses amp-common { + when "count(composite) = 0"; + description "Common parameters for all EDFAs except aggregated ones"; + } + + leaf gain-min { + type gain; + mandatory true; + description "Minimal possible gain of the amplifier + + If the amplifier's gain is set below this value, the amplifier's input is automatically padded with an attenuator, + and the NF is increased by the attenuation of this padding."; + } + + choice noise-model { + mandatory true; + description "What simulation algorithm to use for this amplifier model"; + + case polynomial-NF { + container polynomial-NF { + description "Whitebox model with detailed information about gain ripple, NF ripple and dynamic gain tilt + + Polynomial coefficients for NF calculation: + + f(x) = a*x³ + b*x² + c*x + d + + NF = f(gain_max - gain) + + This model can be also used for fixed-gain fixed-NF amplifiers. In that case, use: + + a = b = c = 0 + d = NF"; + + uses cubic-polynomial-coefficients; + } + } + + case min-max-NF { + container min-max-NF { + description "Operator-focused model + + Performance is defined by the minimal and maximal NF. These are especially suited to model a dual-coil + EDFA with a VOA in between."; + + leaf nf-min { + type noise-figure; + mandatory true; + description "Minimal Noise Figure (operating at the point of the maximal flat gain) + + See gain-flatmax."; + } + + leaf nf-max { + type noise-figure; + mandatory true; + description "Maximal Noise Figure (operating at the minimal gain)"; + } + } + } + + case OpenROADM-ILA { + container OpenROADM-ILA { + description "EDFA model based on the OpenROADM specification for an ILA + + OpenROADM describes amplifier performance in terms of an incremental OSNR as a function of input power: + + Incremental OSNR = a*Pᵢₙ³ + b*Pᵢₙ² + c*Pᵢₙ + d + "; + + uses cubic-polynomial-coefficients; + } + } + + case OpenROADM-preamp { + container OpenROADM-preamp { + presence true; + description "Linear impairments of the MW-MW path within an OpenROADM ROADM node + + Unlike GNPy which simulates the preamplifier and the booster separately as two amplifiers for best accuracy, + the OpenROADM specification mandates a certain performance level for a combination of these two amplifiers. + For the express path, the effective noise mask comprises the preamplifier and the booster. + When terminating a channel, the same effective noise mask is mandated for a combination of the preamplifier + and the drop stage. + + This NF model provides all of the linear impairments to the signal, including those which are incurred by + the booster in a real network."; + } + } + + case OpenROADM-booster { + container OpenROADM-booster { + presence true; + description "A faux, \"zero-noise\" amplifier for use along with OpenROADM-preamp as a booster."; + } + } + + case composite { + container composite { + description "Dual-stage amplifier combines two distinct amplifiers + + The first amplifier will be always operated at its maximal gain (and therefore its best NF)."; + + leaf preamp { + type leafref { + path "/tip-pe:amplifier/type"; + } + must "count(deref(.)/../composite) = 0" { + error-message "First (preamp) stage of a composite amplifier cannot be a composite amplifier"; + } + must "../../gain-min >= deref(.)/../gain-min" { + error-message "Minimal total gain of a composite EDFA cannot be lower that the minimal gain of the preamp"; + } + mandatory true; + description "Amplifier type used as a preamplifier, i.e., the first stage"; + } + + leaf booster { + type leafref { + path "/tip-pe:amplifier/type"; + } + must "count(deref(.)/../composite) = 0" { + error-message "Second (booster) stage of a composite amplifier cannot be a composite amplifier"; + } + must "(deref(.)/../frequency-min <= deref(../preamp)/../frequency-max) and + (deref(.)/../frequency-max >= deref(../preamp)/../frequency-min)" { + error-message "booster/preamp operating frequencies do not overlap"; + } + mandatory true; + description "Amplifier type used as a booster, i.e., the second stage"; + } + } + } + + case raman-approximation { + container raman-approximation { + description "Emulate a Raman amplifier with a possibly negative NF + + This NF model assumes a particular, fixed NF. It is similar to the polynomial-NF model, except that the + effective NF value is fixed (and therefore it does not vary with the amplifier's operating point), and + that the effective NF can be described as a negative value. + + Use this for model to (roughly) emulate a Raman amplifier when the detailed description of Raman pumps + is not available from the equipment vendor."; + + leaf nf { + type db-ratio { + range "-5.0 .. 20.0"; + } + mandatory true; + description "Noise Figure (NF) of the amplifier"; + } + } + } + } + + uses amp-spectrum-profile { + when "count(deref(.)/composite) = 0"; + } + + leaf model-precision { + type enumeration { + enum public-approximation { + description "These data come from a publicly available datasheet, and as such might be only an approximate representation"; + } + enum reasonably-precise { + description "The GNPy team believes that these are reasonably accurate"; + } + } + default reasonably-precise; + description "How precise are the modeling data + + If a simulation runs with only approximate inputs, the simulation results might be \"tainted\" with inaccuracies."; + } + } + + + list fiber { + key "type"; + description "Available fiber types"; + + leaf type { + type string; + description "Unique identification of the fiber type. This is used for cross-referencing from topology data."; + } + + leaf chromatic-dispersion { + type decimal64 { + fraction-digits 6; + range "-25 .. 25"; + } + units "ps × nm⁻¹ × km⁻¹"; + mandatory true; + description "Chromatic dispersion"; + } + + leaf chromatic-dispersion-slope { + type decimal64 { + fraction-digits 8; + range "0 .. 0.1"; + } + units "ps × nm⁻² × km⁻¹"; + default "0.07"; + description "Chromatic dispersion slope is related to the β₃ coefficient + + Cf. Abramczyk, Halina. Dispersion phenomena in optical fibers. Virtual European University on Lasers, 2005. + + http://mitr.p.lodz.pl/evu/lectures/Abramczyk3.pdf"; + } + + leaf gamma { + type decimal64 { + fraction-digits 8; + range "0.5 .. 2.5"; + } + units "W⁻¹ × km⁻¹"; + mandatory true; + description "Fiber's γ coefficient + + See, e.g., A. Carena, G. Bosco, V. Curri, P. Poggiolini, M. Tapia Taiba, and F. Forghieri. Statistical characterization + of PM-QPSK signals after propagation in uncompensated fiber links. In European Conference on Optical Communications, + 2010, 1–3. IEEE, 2010-09. + + URL: http://ieeexplore.ieee.org/document/5621509/ + doi:10.1109/ECOC.2010.5621509"; + } + + leaf pmd-coefficient { + type decimal64 { + fraction-digits 10; + range "0 .. 10"; + } + units "ps × √(km)⁻¹"; + mandatory true; + description "Polarization mode dispersion (PMD) coefficient"; + } + + list raman-efficiency { + key "delta-frequency"; + description "Efficiency of Raman amplification in the fiber medium per operating frequency + + See, e.g., J. Bromage. Raman Amplification for Fiber Communications Systems. In J. Lightwave Technol. 22, 79- (2004)."; + + leaf delta-frequency { + type decimal64 { + fraction-digits 3; + range "0 .. 60"; + } + units "THz"; + description "Spectral difference between the pumping photon and the one receiving energy"; + } + + leaf cr { + type decimal64 { + fraction-digits 12; + range "0 .. 1"; + } + mandatory true; + description "Normalized Raman efficiency (the Cᵣ parameter)"; + } + } + } + + + list transceiver { + key "type"; + description "Available transceivers"; + + leaf type { + type string; + description "Unique identification of the transceiver type. This is used for cross-referencing from topology data."; + } + + leaf frequency-min { + type carrier-frequency; + default 191.35; + description "Minimal frequency supported by this transceiver model"; + } + + leaf frequency-max { + type carrier-frequency; + default 196.1; + description "Maximal frequency supported by this transceiver model"; + } + + list mode { + key "name"; + min-elements 1; + description "Operating mode of a transceiver"; + + leaf name { + type string; + description "Name of this operating mode"; + } + + leaf bit-rate { + type uint16 { + range "100 .. 1000"; + } + units "Gbits * s⁻¹"; + description "Data bit rate"; + } + + leaf baud-rate { + type baud-rate; + mandatory true; + description "Symbol baud rate"; + } + + leaf required-osnr { + type db-ratio { + range "10..40"; + } + mandatory true; + description "Minimal required OSNR at the Rx port per 0.1nm of bandwidth"; + } + + leaf in-band-tx-osnr { + type db-ratio; + mandatory true; + description "Worst-case guaranteed initial OSNR at the Tx port per 0.1nm of bandwidth + + Only the in-band OSNR is considered."; + } + + leaf grid-spacing { + type frequency-channel-spacing; + mandatory true; + description "Minimal grid spacing + + This includes the effective channel spectral bandwidth as well as any operational constraints and policies."; + } + + leaf tx-roll-off { + type roll-off; + mandatory true; + description "Roll-off parameter (β) of the TX pulse shaping filter. This assumes a raised-cosine filter."; + } + + leaf max-chromatic-dispersion { + type cd; + description "Maximal allowed CD (a hard limit)"; + } + + leaf max-polarization-mode-dispersion { + type pmd { + range "0 .. 500"; + } + description "Maximal allowed PMD (a hard limit)"; + } + + list chromatic-and-polarization-dispersion-penalty { + key "chromatic-dispersion polarization-mode-dispersion"; + + leaf chromatic-dispersion { + type cd; + must ". <= ../../max-chromatic-dispersion" { + error-message "CD in the penalty matrix exceeds receiver tolerance"; + } + description "CD for a given penalty"; + } + + leaf polarization-mode-dispersion { + type pmd { + range "0 .. 500"; + } + must ". <= ../../max-polarization-mode-dispersion" { + error-message "PMD in the penalty matrix exceeds receiver tolerance"; + } + description "PMD for a given penalty"; + } + + leaf penalty { + type db-ratio { + range "-5 .. 10"; + } + mandatory true; + description "Resulting GSNR penalty at the specified CD and PMD"; + } + + description "GSNR penalty for a combination of a CD and PMD + + The receiver performance should be de-rated by a given `penalty` for a specified combination of CD and PMD. + GNPy will use linear approximation between the provided datapoints in the CD/PMD matrix. + "; + } + } + } + + + list roadm { + key "type"; + description "ROADM - Reconfigurable Optical Add/Drop Multiplexer"; + + leaf type { + type string; + description "Unique identification of the transponder type. This is used for cross-referencing from topology data."; + } + + leaf add-drop-osnr { + type db-ratio; + mandatory true; + description "OSNR penalty introduced by the Add stage and the Drop stage of this ROADM model + + Effective degradation of the signal, taking into account both the Add and the Drop stages of this ROADM model."; + } + + leaf target-channel-out-power { + type power; + mandatory true; + description "Per-channel target TX power towards the egress amplifier + + Within GNPy, a ROADM is expected to attenuate any signal that enters the ROADM node to this level. This can be + overridden on a per-link basis in the network topology."; + } + + leaf polarization-mode-dispersion { + type pmd { + range "0 .. 5"; + } + mandatory true; + description "Polarization mode dispersion (PMD) penalty of the express path within this ROADM model"; + } + + leaf-list compatible-preamp { + type leafref { + path "/tip-pe:amplifier/type"; + } + description "A set of allowed amplifier types to be used in the ingress direction + + If empty, autodesign is allowed to pick any amplifier as a preamp."; + } + + leaf-list compatible-booster { + type leafref { + path "/tip-pe:amplifier/type"; + } + description "A set of allowed amplifier types to be used in the egress direction + + If empty, autodesign is allowed to pick any amplifier as a booster."; + } + + } + +} diff --git a/gnpy/yang/yanglib.json b/gnpy/yang/yanglib.json index 73799640..02c167be 100644 --- a/gnpy/yang/yanglib.json +++ b/gnpy/yang/yanglib.json @@ -25,6 +25,12 @@ "revision": "2018-02-26", "namespace": "urn:ietf:params:xml:ns:yang:ietf-network", "conformance-type": "implement" + }, + { + "name": "tip-photonic-equipment", + "revision": "2020-09-01", + "namespace": "https://oopt.telecominfraproject.com/yang/equipment", + "conformance-type": "implement" } ] } diff --git a/tests/yang/01-dummy.json b/tests/yang/01-dummy.json new file mode 100644 index 00000000..eeb2e806 --- /dev/null +++ b/tests/yang/01-dummy.json @@ -0,0 +1,486 @@ +{ + "tip-photonic-equipment:amplifier": [ + { + "type": "fixed-27", + "gain-min": "27", + "gain-flatmax": "27", + "max-power-out": "21.9", + "polynomial-NF": { + "a": "0", + "b": "0", + "c": "0", + "d": "4.9" + } + }, + { + "type": "fixed-22", + "gain-min": "22", + "gain-flatmax": "22", + "max-power-out": "21.9", + "polynomial-NF": { + "a": "0", + "b": "0", + "c": "0", + "d": "4.8" + } + }, + { + "type": "vg-15-30", + "gain-min": "15", + "gain-flatmax": "26", + "dynamic-gain-tilt": [ + { + "frequency": "191.35", + "dynamic-gain-tilt": "0" + }, + { + "frequency": "196.1", + "dynamic-gain-tilt": "2.4" + } + ], + "max-power-out": "23", + "min-max-NF": { + "nf-min": "6.0", + "nf-max": "10.0" + } + }, + { + "type": "vg-8-16", + "gain-min": "8", + "gain-flatmax": "15", + "max-power-out": "23", + "min-max-NF": { + "nf-min": "6.5", + "nf-max": "11.0" + } + }, + { + "type": "dual--vg-15-30--vg-8-16", + "gain-min": "25.0", + "composite": { + "preamp": "vg-15-30", + "booster": "vg-8-16" + } + }, + { + "type": "Juniper-BoosterHG", + "gain-min": "10", + "gain-flatmax": "25", + "max-power-out": "21", + "frequency-min": "191.35", + "frequency-max": "196.1", + "polynomial-NF": { + "a": "0.0008", + "b": "0.0272", + "c": "-0.2249", + "d": "6.4902" + } + } + ], + "tip-photonic-equipment:fiber": [ + { + "type": "SSMF", + "chromatic-dispersion": "16.7", + "gamma": "1.27", + "pmd-coefficient": "0.0400028124", + "raman-efficiency": [ + { + "delta-frequency": "0.0", + "cr": "0" + }, + { + "delta-frequency": "0.5", + "cr": "9.4e-06" + }, + { + "delta-frequency": "1.0", + "cr": "2.92e-05" + }, + { + "delta-frequency": "1.5", + "cr": "4.88e-05" + }, + { + "delta-frequency": "2.0", + "cr": "6.82e-05" + }, + { + "delta-frequency": "2.5", + "cr": "8.31e-05" + }, + { + "delta-frequency": "3.0", + "cr": "9.4e-05" + }, + { + "delta-frequency": "3.5", + "cr": "0.0001014" + }, + { + "delta-frequency": "4.0", + "cr": "0.0001069" + }, + { + "delta-frequency": "4.5", + "cr": "0.0001119" + }, + { + "delta-frequency": "5.0", + "cr": "0.0001217" + }, + { + "delta-frequency": "5.5", + "cr": "0.0001268" + }, + { + "delta-frequency": "6.0", + "cr": "0.0001365" + }, + { + "delta-frequency": "6.5", + "cr": "0.000149" + }, + { + "delta-frequency": "7.0", + "cr": "0.000165" + }, + { + "delta-frequency": "7.5", + "cr": "0.000181" + }, + { + "delta-frequency": "8.0", + "cr": "0.0001977" + }, + { + "delta-frequency": "8.5", + "cr": "0.0002192" + }, + { + "delta-frequency": "9.0", + "cr": "0.0002469" + }, + { + "delta-frequency": "9.5", + "cr": "0.0002749" + }, + { + "delta-frequency": "10.0", + "cr": "0.0002999" + }, + { + "delta-frequency": "10.5", + "cr": "0.0003206" + }, + { + "delta-frequency": "11.0", + "cr": "0.0003405" + }, + { + "delta-frequency": "11.5", + "cr": "0.0003592" + }, + { + "delta-frequency": "12.0", + "cr": "0.000374" + }, + { + "delta-frequency": "12.5", + "cr": "0.0003826" + }, + { + "delta-frequency": "12.75", + "cr": "0.0003841" + }, + { + "delta-frequency": "13.0", + "cr": "0.0003826" + }, + { + "delta-frequency": "13.25", + "cr": "0.0003802" + }, + { + "delta-frequency": "13.5", + "cr": "0.0003756" + }, + { + "delta-frequency": "14.0", + "cr": "0.0003549" + }, + { + "delta-frequency": "14.5", + "cr": "0.0003795" + }, + { + "delta-frequency": "14.75", + "cr": "0.000344" + }, + { + "delta-frequency": "15.0", + "cr": "0.0002933" + }, + { + "delta-frequency": "15.5", + "cr": "0.0002024" + }, + { + "delta-frequency": "16.0", + "cr": "0.0001158" + }, + { + "delta-frequency": "16.5", + "cr": "8.46e-05" + }, + { + "delta-frequency": "17.0", + "cr": "7.14e-05" + }, + { + "delta-frequency": "17.5", + "cr": "6.86e-05" + }, + { + "delta-frequency": "18.0", + "cr": "8.5e-05" + }, + { + "delta-frequency": "18.25", + "cr": "8.93e-05" + }, + { + "delta-frequency": "18.5", + "cr": "9.01e-05" + }, + { + "delta-frequency": "18.75", + "cr": "8.15e-05" + }, + { + "delta-frequency": "19.0", + "cr": "6.67e-05" + }, + { + "delta-frequency": "19.5", + "cr": "4.37e-05" + }, + { + "delta-frequency": "20.0", + "cr": "3.28e-05" + }, + { + "delta-frequency": "20.5", + "cr": "2.96e-05" + }, + { + "delta-frequency": "21.0", + "cr": "2.65e-05" + }, + { + "delta-frequency": "21.5", + "cr": "2.57e-05" + }, + { + "delta-frequency": "22.0", + "cr": "2.81e-05" + }, + { + "delta-frequency": "22.5", + "cr": "3.08e-05" + }, + { + "delta-frequency": "23.0", + "cr": "3.67e-05" + }, + { + "delta-frequency": "23.5", + "cr": "5.85e-05" + }, + { + "delta-frequency": "24.0", + "cr": "6.63e-05" + }, + { + "delta-frequency": "24.5", + "cr": "6.36e-05" + }, + { + "delta-frequency": "25.0", + "cr": "5.5e-05" + }, + { + "delta-frequency": "25.5", + "cr": "4.06e-05" + }, + { + "delta-frequency": "26.0", + "cr": "2.77e-05" + }, + { + "delta-frequency": "26.5", + "cr": "2.42e-05" + }, + { + "delta-frequency": "27.0", + "cr": "1.87e-05" + }, + { + "delta-frequency": "27.5", + "cr": "1.6e-05" + }, + { + "delta-frequency": "28.0", + "cr": "1.4e-05" + }, + { + "delta-frequency": "28.5", + "cr": "1.13e-05" + }, + { + "delta-frequency": "29.0", + "cr": "1.05e-05" + }, + { + "delta-frequency": "29.5", + "cr": "9.8e-06" + }, + { + "delta-frequency": "30.0", + "cr": "9.8e-06" + }, + { + "delta-frequency": "30.5", + "cr": "1.13e-05" + }, + { + "delta-frequency": "31.0", + "cr": "1.64e-05" + }, + { + "delta-frequency": "31.5", + "cr": "1.95e-05" + }, + { + "delta-frequency": "32.0", + "cr": "2.38e-05" + }, + { + "delta-frequency": "32.5", + "cr": "2.26e-05" + }, + { + "delta-frequency": "33.0", + "cr": "2.03e-05" + }, + { + "delta-frequency": "33.5", + "cr": "1.48e-05" + }, + { + "delta-frequency": "34.0", + "cr": "1.09e-05" + }, + { + "delta-frequency": "34.5", + "cr": "9.8e-06" + }, + { + "delta-frequency": "35.0", + "cr": "1.05e-05" + }, + { + "delta-frequency": "35.5", + "cr": "1.17e-05" + }, + { + "delta-frequency": "36.0", + "cr": "1.25e-05" + }, + { + "delta-frequency": "36.5", + "cr": "1.21e-05" + }, + { + "delta-frequency": "37.0", + "cr": "1.09e-05" + }, + { + "delta-frequency": "37.5", + "cr": "9.8e-06" + }, + { + "delta-frequency": "38.0", + "cr": "8.2e-06" + }, + { + "delta-frequency": "38.5", + "cr": "6.6e-06" + }, + { + "delta-frequency": "39.0", + "cr": "4.7e-06" + }, + { + "delta-frequency": "39.5", + "cr": "2.7e-06" + }, + { + "delta-frequency": "40.0", + "cr": "1.9e-06" + }, + { + "delta-frequency": "40.5", + "cr": "1.2e-06" + }, + { + "delta-frequency": "41.0", + "cr": "4e-07" + }, + { + "delta-frequency": "41.5", + "cr": "2e-07" + }, + { + "delta-frequency": "42.0", + "cr": "1e-07" + } + ] + }, + { + "type": "NZDF", + "chromatic-dispersion": "5.0", + "gamma": "1.46", + "pmd-coefficient": "0.0400028124" + }, + { + "type": "LOF", + "chromatic-dispersion": "22", + "gamma": "0.843", + "pmd-coefficient": "0.0400028124" + } + ], + "tip-photonic-equipment:transceiver": [ + { + "type": "Voyager", + "mode": [ + { + "name": "DP-QPSK", + "bit-rate": 100, + "baud-rate": "32", + "required-osnr": "12", + "in-band-tx-osnr": "40", + "grid-spacing": "37.5", + "tx-roll-off": "0.15" + } + ] + } + ], + "tip-photonic-equipment:roadm": [ + { + "type": "default", + "add-drop-osnr": "50.0", + "target-channel-out-power": "-20", + "polarization-mode-dispersion": "0" + } + ] +}