Note: the cost of running the entire notebook is larger than 1 FlexCredits.
Nonlinear materials are of great interest in many industries due to their unique capability to exhibit nontrivial phenomena, such as wave mixing and frequency generation. An interesting phenomenon that occurs in media with third-order nonlinearities is the Kerr sidebands, a form of four-wave mixing. Due to phase-matching conditions, these sidebands appear at frequencies offset by integer multiples of the frequency difference between the pump and signal.
Kerr sidebands can significantly enhance sensor resolution through all-optical signal processing. By combining a tunable laser source and a pump laser with a Fiber Bragg Grating (FBG) in a nonlinear fiber, frequency sidebands are generated, with each sideband’s power dependent on input intensities. Filtering specific sidebands narrows the FBG-reflected signal, improving wavelength shift detection. This technique enhances FBG-based temperature sensors and can be applied to other optical systems for increased resolution.
In this notebook, we use Tidy3D to perform a simulation of the generation of Kerr sideband in a waveguide. This example is based on the paper from Ole Krarup, Chams Baker, Liang Chen, and Xiaoyi Bao " Nonlinear resolution enhancement of an FBG based temperature sensor using the Kerr effect." Optics Express Vol. 28, Issue 26, pp. 39181-39188 (2020)Doi: https://doi.org/10.1364/OE.411179
This example was kindly created by Dr. Chenchen Wang, Postdoctoral Researcher at the University of Wisconsin–Madison.
FDTD simulations can diverge due to various reasons. If you run into any simulation divergence issues, please follow the steps outlined in our troubleshooting guide to resolve it.
Theoretical base
In this section, we will introduce the theoretical framework of generating sidebands in a Kerr medium, as developed in the reference paper.
To generate Kerr sidebands, we inject laser light with two distinct angular frequencies into a Kerr medium. The two frequencies are a signal frequency \(\omega_s\) and a pump frequency \(\omega_p\), where \(\omega_s < \omega_p\). The Kerr medium is a waveguide made of a \(\chi^{(3)}\) material. The total electric field amplitude at the input of the fiber is given by:
where \(P_s\) and \(P_p\) are the powers of the signal and pump fields, respectively. The angular frequency difference between the signal and pump is defined as \(\omega_d = \omega_p - \omega_s\). The input field’s power is:
Neglecting the effects of dispersion, loss, and polarization, the evolution of this field is governed by the Non-linear Schrödinger Equation (NLSE):
\[
\frac{dA}{dz} = i\gamma |A|^2 A
\]
where \(A\) is the complex amplitude of the electric field, \(z\) is the propagation distance, and \(\gamma\) is the nonlinear coefficient of the medium. The term \(i\gamma |A|^2\) represents the third order nonlinear interaction of the electric field with the medium, where the field strength \(|A|^2\) is proportional to the intensity.
Solving this differential equation, the field at the output of the waveguide is given by:
\[
A_{\text{out}} = A_{\text{in}} \exp\left[i\gamma L (P_s + P_p)\right] \exp\left[i \gamma L \cdot 2 \sqrt{P_s P_p} \cos(\omega_d t)\right]
\]
Here, \(L\) is the length of the waveguide. The exponential term \(\exp[i\gamma L (P_s + P_p)]\) can be neglected as it does not affect the overall output power.
The term involving \(\cos(\omega_d t)\) can be expanded using the Jacobi-Anger expansion:
This equation shows that the normalized output power is proportional to the normalized input power, raised to an integer exponent.
As an example, filtering out the \(n = 1\) sideband yields:
\[
z_{1} \approx x^3y^2\frac{1}{4} + xy^2
\]
Similarly for \(n = -2\) sideband:
\[
z_{-2} \approx y^3x^2\frac{1}{4} + yx^2
\]
This implies an symmetry between \(z_{1}\),\(z_{-2}\) and \(x\),\(y\) which can be verified later in simulation.
Initial setup
First we start defining the parameters for the simulation:
# standard python importsimport matplotlib.pyplot as pltimport numpy as npimport tidy3d as td# tidy3D importimport tidy3d.web as webfrom numpy import random# define geometrywg_width =0.25wg_length =2.5wg_spacing =0.5buffer=1.0# compute quantities based on geometry parametersx_span =2* wg_spacing +2* wg_length +2*buffery_span = wg_width +2*bufferwg_insert_x = wg_length + wg_spacing
Define frequency:
# wavelength range of interestlambda_beg =0.5lambda_end =0.6# define pulse parametersfreq_beg = td.C_0 / lambda_endfreq_end = td.C_0 / lambda_begfreq0 = (freq_beg + freq_end) /2fwidth = (freq_end - freq0) /1.5freqd =1e13freqp = freq0 +0.5* freqdfreqs = freq0 -0.5* freqd# frequency for the first sidebandfreq1 = freqs + (freqp - freqs)min_steps_per_wvl =30run_time =5e-12
Define Materials:
To define the \(\chi^{(3)}\) material, we will create a NonlinearSpec object with a NonlinearSusceptibility model. Since the underlying mechanism for Kerr sidebands is four-wave mixing, NonlinearSusceptibility is a suitable choice as it utilizes real electric fields.
The num_iters parameter can be used if the convergence is poor, although it can’t prevent a simulation with high nonlinearities from diverging, as we will discuss below.
Here we choose TM mode, then we create two mode sources \(P_s\),\(P_p\).
To ensure spectral overlap between the signal and pump sources, we will define the time profile of the sources as ContinuousSource, which simulates a continuous wave (CW) source.
Note that a GaussianPulse time profile is preferred in most cases, as the fields decay at the end of the simulation, making normalization in frequency domain meaningful. In contrast, for a ContinuousSource, the fields do not decay, so frequency domain normalization is not meaningful. Nevertheless, the temporal mean power of the source is equal to the square of the amplitude parameter.
Also, note that the fwidth argument controls the ramping of the CW amplitude rather than the spectral width, since a CW source is nearly monochromatic.
# field monitor for the first sidebandfield_monitor = td.FieldMonitor( center=[0, 0, 0], size=[td.inf, td.inf, 0], freqs=[freq1], name="field")# monitor the mode amps on the output waveguidelambdas_measure = np.linspace(lambda_beg, lambda_end, 1001)freqs_measure = td.C_0 / lambdas_measure[::-1]mode_monitor = td.ModeMonitor( size=mode_plane.size, center=mode_plane.center, freqs=freqs_measure, mode_spec=td.ModeSpec(num_modes=2), name="mode",)mode_monitor = mode_monitor.copy(update=dict(center=[wg_insert_x, 0, 0]))# flux monitorflux_monitor = td.FluxMonitor( center=(3.5, 0, 0), size=mode_plane.size, name="fluxMon", freqs=freqs_measure)
Define simulation.
Note that we will set the shutoff argument as 0, as we are using CW sources so the fields will not decay. For the same reason, we can also disregard the warning messages in the log.
# plot the two simulationsfig, ax = plt.subplots(1, 1, figsize=(6, 6))sim.plot_eps(z=0.01, ax=ax)plt.show()
05:03:59 UTC WARNING: An appropriate frequency could not be determined when plotting the permittivity. The permittivity will be evaluated at infinite frequency. Please supply a value for `freq` to plot at a finite frequency.
05:04:01 UTC Estimated FlexCredit cost: 0.101. This assumes the FDTD solver runs
for the full simulation time; if early shutoff is reached, the
billed cost can be lower. Use 'web.real_cost(task_id)' to get the
billed FlexCredit cost after a simulation run.
05:04:02 UTC status = success
05:04:04 UTC Loading results from data/simulation_data.hdf5
Next, we can plot the fields at the frequency of the first sideband. As there is no source injecting power in this frequency, the fields are generated due to the nonlinear process.
Now, we can visualize the transmittance spectrum, where the two sidebands are visible at frequencies equally spaced from the pump and signal pulse.
transmission_amps = sim_data["mode"].amps.sel(mode_index=1, direction="+") **2f, ax = plt.subplots(figsize=(10, 5))transmission_amps.abs.plot.line(x="f", ax=ax, label="absolute value")ax.legend()ax.set_title("Flux of the fundamental TM mode (forward)")ax.set_ylim(0, None)ax.set_xlim(freqs_measure[0], freqs_measure[-1])ax.set_ylabel("Power (a.u.)")plt.show()
Amplitude analysis
We can now vary the amplitude parameter and observe the power at the n = 1 sideband (at 565 Thz). Since the amplitudes of the pump and signal are identical, we expect the power of this band to vary approximately with \(\text{amplitude}^5\).
Simulations = {}Amplitudes = [50, 100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 700]for amplitude in Amplitudes:# creating the sources with the new amplitude value s1, s2 = sim.sources st1 = s1.source_time.updated_copy(amplitude=amplitude) st2 = s2.source_time.updated_copy(amplitude=amplitude) sim2 = sim.updated_copy( sources=[s1.updated_copy(source_time=st1), s2.updated_copy(source_time=st2)] ) Simulations[str(amplitude)] = sim2
05:04:14 UTC Started working on Batch containing 13 tasks.
05:04:26 UTC Maximum FlexCredit cost: 1.213 for the whole batch.
Use 'Batch.real_cost()' to get the billed FlexCredit cost after
completion.
05:04:32 UTC Batch complete.
Amps = []Power1 = []for amplitude in Amplitudes: sim_data = results[f"{amplitude}"]# recording the power for the band n = 1 band1 = sim.sources[0].source_time.freq0 + ( sim.sources[0].source_time.freq0 - sim.sources[1].source_time.freq0 ) bm = (sim_data["fluxMon"].flux.f > band1 *0.99) & (sim_data["fluxMon"].flux.f < band1 *1.01)max= sim_data["fluxMon"].flux[bm].max() Amps.append(amplitude) Power1.append(max)
# fitting the data with a polynomial functionfrom scipy.optimize import curve_fitfunc =lambda X, a: a * X**5Y = np.array(Power1) *10**19res, err = curve_fit(func, Amps[:9], Y[:9], p0=[1e-9], bounds=([0], [1]))fig, ax = plt.subplots()ax.plot(Amps, Y, "o")ax.plot(Amps, func(np.array(Amps), *(res)))ax.set_xlabel("Amplitude value")ax.set_ylabel("First sideband power (a.u.)")ax.set_ylim(-0.1, 1.1* Y.max())plt.show()
It can be observed that the power in the n = 1 band follows a power law until amplitude values around 500. Beyond this point, the results deviate from the exponential trend until the simulation diverges for amplitudes greater than 700.
This occurs because the simulations remain stable only for small nonlinearities. The nonlinear permittivity should be smaller than the linear value. Therefore:
$ _0 ^{(3)} E^3 _0 ^{(1)} E$
$ ^{(3)} E^2 n_0^2-1$
Using the Poynting theorem, and the relation \(\chi^{(3)} = (4/3)n_0^2 \epsilon_0 c n_2\), we have:
\(\frac{8}{3}\frac{n_0 n_2}{n_0^2 - 1} I \ll 1\)
Since the Intensity (\(I\)) is proportional to \(\text{amplitude}^2\), the simulation can quickly become unstable for high amplitude values.
Additionally, we should mention that the \(\chi^{(3)}\) formalism is only perturbative and may not be accurate for extremely intense electric fields.
Further verification
In the previous derivation, we obtained the following conclusions about \(z_{-2}\),\(z_{1}\):
\[
z_{-2} \approx x^2 \left( y + \frac{y^3}{4} \right)
\]
\[
z_{1} \approx y^2 \left( x + \frac{x^3}{4} \right)
\]
To verify this symmetry, We set the amplitude of the two input signals to half of the original amplitude and observe the change of the sideband signal.
We use necessary cookies to run this website. With your permission, we
also use analytics cookies to understand site usage and marketing
cookies for advertising, retargeting, and HubSpot tracking.
Learn more about our cookie policy.
Privacy choices
Choose which optional cookies Flexcompute may use. Necessary cookies
are always on because they support core website behavior, security, and
saving your consent record.
Your browser is sending a Global Privacy Control signal, so marketing
cookies are disabled.
Subscribe
Thanks for subscribing
Publish Your Notebook
Thank you for publishingA confirmation email has been sent to your inbox. Your notebook will be available within the next 48 hours.
Community Library
TERMS & CONDITIONS
EFFECTIVE DATE: January 1, 2025
Terms and Conditions for User-Submitted Content
By submitting content to Flexcompute, you agree to the following terms:
1. Ownership and Copyright
All content, including but not limited to text, data, images, and other materials submitted by users,
remains the sole property of the original creator. Flexcompute does not claim ownership of the submitted
content or any intellectual property rights associated with it.
Users affirm that they own the copyright or have obtained all necessary permissions for the submitted
content and are fully responsible for ensuring that their submissions do not infringe on any third-party
rights.
2. Responsibility for Content
Users are solely responsible for the content they submit. Flexcompute does not endorse, guarantee,
or verify the accuracy, legality, or appropriateness of any submitted content. Users are responsible
for ensuring that their content complies with all applicable laws and regulations.
Users declare that they have obtained authorization from all co-authors and collaborators associated
with the submitted content, granting them the right to submit and sign on behalf of all contributors.
Users agree not to submit content that is illegal, defamatory, obscene, or violates the rights
of others, including privacy and intellectual property rights.
3. Modification and Presentation
Flexcompute reserves the right to review, edit, or modify submitted content to improve clarity,
formatting, and presentation while maintaining the original intent and message.
These modifications are made to enhance the overall quality and readability of the published material.
Users acknowledge that Flexcompute may format or present the content in a way
that aligns with our editorial and visual standards.
4. Liability Disclaimer
Flexcompute shall not be held liable for any disputes arising from user-submitted content, including
but not limited to copyright claims, inaccuracies, or damages resulting from the publication of user content.
Users agree to indemnify Flexcompute against any claims or legal actions resulting from their submitted content.
5. Content Use Rights
By submitting content, users grant Flexcompute a non-exclusive, royalty-free, worldwide license to publish, distribute,
and promote the content for the purposes of showcasing user contributions and marketing our services.
This license does not transfer ownership of the content or any copyright to Flexcompute.
Users retain the right to withdraw their submissions at any time.
Upon request, Flexcompute will remove the content from its platform.
6. Privacy and Confidentiality
Users acknowledge that submitted content may be publicly accessible and therefore waive any
rights to confidentiality or privacy regarding the published material.
Flexcompute will not share personal information of users without
their consent, in accordance with our privacy policy.
Community Library
How the process works:
You submit your notebook.
You will get a permanent URL to promote your work.
Cite the URL as a reference for others in your upcoming papers to enhance the impact.
When someone clicks your URL, your notebook will be displayed.
Enter your email address below to receive the presentation slides. In the future, we’ll share you very few emails when we have new tutorial release, development updates, valuable toolkits and technical guidance . You can unsubscribe at any time by clicking the link at the bottom of every email. We’ll never share your information.