Telecominfraproject / oopt-gnpy

Optical Route Planning Library, Based on a Gaussian Noise Model
http://telecominfraproject.com
BSD 3-Clause "New" or "Revised" License
198 stars 87 forks source link

Advanced amp model .dgt vector reversal #390

Closed cgkelly closed 3 years ago

cgkelly commented 3 years ago

The example .dgt vector in the Juniper std_medium_gain_advanced_config.json file appears to be reversed. The documentation on how to use is sparse, and the code does not appear to account for the possible optimization of the amp design for minimum ripple at a tilt value other than zero.

  1. Current Usage: The .dgt vector appears to define the gain ripple as a function of tilt: Ripple = .dgt x tilt. To accommodate amplifiers that are designed for minimum ripple at a non zero tilt, this should be modified to ripple = .dgt x (tilt-flat gain tilt).

  2. The sign convention for amplifier tilt needs to be defined/documented. My assumption is fiber tilt due to SRS is positive (lower loss or positive "gain" at higher wavelengths, thus, to counteract this, amplifiers require a negative tilt).

  3. In trying to understand how to use the .dgt vector, it became apparent that the example vector is reversed. The attached slides illustrate this, and also help clarify how this vector is derived and its usage.
    It also suggests that if unknown, a default set of vector coefficients can be derived, as the expected shape from simple fixed gain C band EDFA simulations match the (reversed) Juniper .dgt vector quite well, once any intrinsic tilt within the .dgt vector itself is removed.

GNPY_dgt_v1.pptx

ojnas commented 3 years ago

@cgkelly, I believe your suspicion is correct that the dgt vector in std_medium_gain_advanced_config.json (the Juniper-BoosterHG.json file seems to have the same problem) was originally given vs. wavelength. The dgt implementation was based on a proposal from Ciena and their original slides had a figure with DGT vs. wavelength. For reference, the first implementation (at least that I could find) is here:

https://github.com/Telecominfraproject/oopt-gnpy/blob/58ac717f8dcf8795d336f56cef52cb60a3729380/examples/edfa_model/amplifier.py

About gain tilt when operating in the extended gain regime, it was discussed here:

https://github.com/Telecominfraproject/oopt-gnpy/issues/240

ojnas commented 3 years ago

@ggrammel, about the dgt values (and gain_ripple) in Juniper-BoosterHG.json, do you know for what frequencies they were measured and specifically whether they are given in increasing or decreasing frequency order?

(This file also has another problem: there are 48 dgt values, which I guess were measured on a 100 GHz grid. But still it specifies "f_min": 191.35e12, which means the frequency values used for interpolation in interpol_params in elements.py will be slightly offset.)

ojnas commented 3 years ago

Just to clarify, even though this issue is titled "Advanced amp model ..." and refers to std_medium_gain_advanced_config.json, the same dgt values are used in default_edfa_config.json, which is used by all other amplifiers models. This means all amplifiers will have wrong gain vs. frequency values whenever a non-zero tilt_target is specified.

ggrammel commented 3 years ago

@ojnas attached the input data for the HGAmp. Note that the input data was measured in steps of 100GHz, while the converter script required 50GHz steps Archive.zip

ojnas commented 3 years ago

@cgkelly, all, I have pushed three commits to gerrit which address some of the issues:

https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514993 https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514994 https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514995

Please have a look if the changes make sense and let's continue discussing the other remaining issues.

cgkelly commented 3 years ago

Hi Jonas, I’m not sure what the proper way of responding to gerrithub review comments is, but these changes appear OK to me, but I do want to make a correction to my understanding of fiber tilt.

I’ve been informed fiber tilt is also considered negative when there is higher loss at higher wavelengths. Thus, fiber tilt and compensating gain tilt have the same sign. The tilt sign is the direction of the curve slope (whether it’s loss or gain that is being plotted) when the x axis is frequency. I don’t think this changes the outcome: Gain tilt is normally flat to negative, to offset fiber loss tilt.

Colin

From: Jonas Mårtensson @.> Sent: Wednesday, April 21, 2021 10:45 AM To: Telecominfraproject/oopt-gnpy @.> Cc: Kelly, Colin (Nokia - CA/Ottawa) @.>; Mention @.> Subject: Re: [Telecominfraproject/oopt-gnpy] Advanced amp model .dgt vector reversal (#390)

@cgkellyhttps://github.com/cgkelly, all, I have pushed three commits to gerrit which address some of the issues:

https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514993 https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514994 https://review.gerrithub.io/c/Telecominfraproject/oopt-gnpy/+/514995

Please have a look if the changes make sense and let's continue discussing the other remaining issues.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/Telecominfraproject/oopt-gnpy/issues/390#issuecomment-824072936, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATEPR46LLSC4J7LNKPFZR3TTJ3JFLANCNFSM42TJUPUQ.

jktjkt commented 3 years ago

@cgkelly , thanks for the review and for catching this in the first place. @ojnas , thanks for the fix -- just merged.

ojnas commented 3 years ago

@cgkelly, I'm thinking about implementing your suggestion to accommodate amplifiers designed for minimum ripple at non-zero tilt. This would require an additional amplifier parameter in the equipment input file defining this non-zero tilt value. Is there a commonly accepted name for this parameter (I think I've heard pre-tilt and built-in tilt)? Also, do you think the tilt_target defined in the topology input file should be an offset from this non-zero tilt or should it be the actual total tilt?

cgkelly commented 3 years ago

Hi Jonas, I’ve called it the “flat gain tilt”, but this is not that obvious, and I don’t know if there is a commonly accepted name. Pre-tilt works for me.

I think the tilt_target should be the actual total tilt, as this value comes directly from the expected span tilt (if precompensating), regardless of the amp’s pre-tilt. (ie this tilt target does not change if the amp’s pre-tilt is zero or non zero, the impact is just on the amp ripple at the target tilt value).

Thanks, Colin

From: Jonas Mårtensson @.> Sent: Tuesday, April 27, 2021 4:02 AM To: Telecominfraproject/oopt-gnpy @.> Cc: Kelly, Colin (Nokia - CA/Ottawa) @.>; Mention @.> Subject: Re: [Telecominfraproject/oopt-gnpy] Advanced amp model .dgt vector reversal (#390)

@cgkellyhttps://github.com/cgkelly, I'm thinking about implementing your suggestion to accommodate amplifiers designed for minimum ripple at non-zero tilt. This would require an additional amplifier parameter in the equipment input file defining this non-zero tilt value. Is there a commonly accepted name for this parameter (I think I've heard pre-tilt and built-in tilt)? Also, do you think the tilt_target defined in the topology input file should be an offset from this non-zero tilt or should it be the actual total tilt?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/Telecominfraproject/oopt-gnpy/issues/390#issuecomment-827365131, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATEPR44PXIAHHGWVAPUXO3DTKZOMXANCNFSM42TJUPUQ.

cgkelly commented 3 years ago

Hi Jonas, it just occurred to me that we probably don’t need to introduce another parameter (but it may be clearer if we do).

The advanced model has both the .dvt defined gain ripple that scales with tilt (or more accurately, tilt slope), as well as a fixed gain ripple. If the amp has maximum flatness at a pretilt value, the .dvt defined ripple at this pretilt value can be subtracted from the defined static gain ripple. Of course, this takes a bit more work to define the amplifier.

Since the code looks at the slope of the .dvt vector, and scales it to the desired tilt slope, I think the .dvt vector can be defined for any (nonzero) slope value. Many of our amps have a pretilt of -1 dB, and thus I am defining a .dvt vector for a -1 dB tilt. In the absence of any other systematic ripple, the static gain ripple simply becomes the inverse of the dvt vector. This way, at this pretilt setting, gain ripple + .dvt ripple sum = 0.

( I prefer to define these vectors such that the average gain in both vectors is zero, but the code looks for gain offsets from the .dvt vector and adjusts the gain to remove this).

Thanks, Colin

From: Jonas Mårtensson @.> Sent: Tuesday, April 27, 2021 4:02 AM To: Telecominfraproject/oopt-gnpy @.> Cc: Kelly, Colin (Nokia - CA/Ottawa) @.>; Mention @.> Subject: Re: [Telecominfraproject/oopt-gnpy] Advanced amp model .dgt vector reversal (#390)

@cgkellyhttps://github.com/cgkelly, I'm thinking about implementing your suggestion to accommodate amplifiers designed for minimum ripple at non-zero tilt. This would require an additional amplifier parameter in the equipment input file defining this non-zero tilt value. Is there a commonly accepted name for this parameter (I think I've heard pre-tilt and built-in tilt)? Also, do you think the tilt_target defined in the topology input file should be an offset from this non-zero tilt or should it be the actual total tilt?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/Telecominfraproject/oopt-gnpy/issues/390#issuecomment-827365131, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ATEPR44PXIAHHGWVAPUXO3DTKZOMXANCNFSM42TJUPUQ.