Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RamanFiber: no gain ripple from pump spacing #398

Open
jktjkt opened this issue May 16, 2021 · 11 comments
Open

RamanFiber: no gain ripple from pump spacing #398

jktjkt opened this issue May 16, 2021 · 11 comments

Comments

@jktjkt
Copy link
Collaborator

jktjkt commented May 16, 2021

Here's what @cgkelly wrote in #282 (comment) :

I have tried the Raman simulation by defining a RamanFiber span, and defining the Raman pump powers and frequencies. I get the expected Raman gain, but I do not see any gain ripple due to the spacing of the Raman pumps. (I'm not seeing any gain ripple in general, but this is a broader topic even for EDFA only spans that I'm looking into).

@jktjkt
Copy link
Collaborator Author

jktjkt commented May 16, 2021

@AndreaDAmico , can you please take a look at this?

@AndreaDAmico
Copy link
Collaborator

@cgkelly,
The implementation of the Raman solver should provide an accurate profile of the power evolution at any position of the fiber span. This profile is based on the shape of the Raman coefficients for the specific fiber and, in general, depends on the pump frequencies and powers and on the propagated spectrum. Can you share more details of your simulation? In any case, if the result is not what you would expect, you can try to change the space resolution and the tolerance within the simulation parameters regarding the Raman solver.

@cgkelly
Copy link

cgkelly commented May 17, 2021 via email

@ojnas
Copy link

ojnas commented May 17, 2021

@cgkelly, I'll try to answer some of your questions:

What is the location of the reported channel power levels?

When using transmission_main_example (and gnpy.app as well) channel power levels are reported as seen by the final transceivers. For raman_edfa_example_network.json this means it is at the output of the post-Raman EDFA.

In my 2 span ROADM network with Raman, the channel powers seem to correspond to the output of the ROADM into the ROADM egress amplifier.

Yes, it is at the output of the ROADM but I'm not sure what you mean by "ROADM egress amplifier" in this case. I assume the final Roadm element is connected directly to the Transceiver element so the signal will not pass through any egress amplifier. Since the Roadm element performs channel equalization the reported power levels will all be equal so in most cases this information will not be very interesting (the reason why you see a ripple with raman_edfa_example_network.json is that this example topology doesn't include any ROADMs).

I want to see the per channel power levels into all EDFAs, but there does not seem to be a straightforward way to do this.

No, currently there isn't but I agree it would be a nice feature to have. I think the problem is mainly how to present this in a clear way in a pure text-based interface (I have some idea how to do it in gnpy.app but I didn't have time to implement it yet).

With some suggestions from Esther, I modified the cli_examples.py file (...) but it appears the ch_power data I am getting does not correspond to the per amp (element) power levels.

No, this does not work since infos.carriers is never updated inside the outer for loop so you will just print the same information (at the ROADM output) multiple times. You could try to put your inner for loop inside the for loop in the propagate function in request.py instead (but replace infos.carriers with si.carriers).

Also not clear to me – with detailed Raman simulations, does GNPY also simulate SRS induced gain tilt? I assume it must, in order to properly model pump-pump interactions. (I’m assuming, however, that fiber loss/km wavelength dependency is not yet defined).

I'll leave this for @AndreaDAmico to answer.

Potential Bug?

Yes, I think what you describe could be considered a bug. The problem is that the GNPy auto-design feature is completely unaware of Raman gain. In your case, since you specify the EDFA type, this just results in a false warning which you can ignore. A bigger problem is that if you don't specify the EDFA type, auto-design will pick a type with higher gain than necessary. We should change this behaviour somehow.

@AndreaDAmico
Copy link
Collaborator

Also not clear to me – with detailed Raman simulations, does GNPY also simulate SRS induced gain tilt? I assume it must, in order to properly model pump-pump interactions. (I’m assuming, however, that fiber loss/km wavelength dependency is not yet defined).

I'll leave this for @AndreaDAmico to answer.

In the current version, using the RamanFiber you will obtain the entire SRS profile, including the induced gain tilt and, if provided, the fiber loss/km wavelength dependency.

@ojnas
Copy link

ojnas commented May 20, 2021

@cgkelly, here is a version of request.py that will print per channel power levels before and after every EDFA. Unzip it and replace the existing file in the gnpy/topology folder.

request.zip

@cgkelly
Copy link

cgkelly commented May 20, 2021 via email

@ojnas
Copy link

ojnas commented May 24, 2021

@cgkelly, now you can also get a plot of the spectrum after each element in gnpy.app.

@cgkelly
Copy link

cgkelly commented Jun 24, 2021 via email

@AndreaDAmico
Copy link
Collaborator

@cgkelly ,
you can specify the loss/km wavelength dependency using the loss_coef field within the parameters of the fiber. In particular, this parameter can be defined as a dictionary that includes two specific keys, loss_coef_power and frequency, containing as values a loss coefficient array and the relative frequency array, respectively.

@ojnas
Copy link

ojnas commented Jun 28, 2021

@AndreaDAmico, specifying wavelength dependent loss in this way does not really work in the latest release or with the code in the current master. There are a number of issues, which I think you have fixed in the new (still to be merged) patch series.

@cgkelly, for now you can test this functionality in gnpy.app if you want. As Andrea explained, instead of defining loss_coef as a scalar value, you can define it for a RamanFiber in the topology file like this:

"loss_coef":  {
    "frequency": [191.3e12, 195.1e12],
    "loss_coef_power": [0.208, 0.2]
}

This example only has two frequencies and loss values but you can specify any frequencies and loss values you want and the code will interpolate in between.

@jktjkt, @EstherLerouzic, @AndreaDAmico, since wavelength dependent loss seems to be a highly requested feature (see e.g. #318 in addition to this issue), would it make sense to break out these relatively simple fixes and merge them earlier? Or do you think this is unnecessary work and it's better to wait until the whole new patch series is ready?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants