Generation of Kerr sideband#
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.

For more examples, please refer to our learning center, where you can find tutorials such as Bistability in photonic crystal microcavities.
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):
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:
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:
where \(J_n(M)\) is the Bessel function of the first kind of order \(n\). Applying this expansion to the second exponential term:
The output field becomes a sum of frequency sidebands, spaced by \(\omega_d\):
This result indicates that the output field is a superposition of several frequency components, with the sidebands separated by \(\omega_d\).
The power of the \(n\)-th sideband is given by:
Introducing the normalization \(x = \gamma L P_p\), \(y = \gamma L P_s\), we have:
Here we agree that \(z_0\) refers to \(y\), \(z_{-1}\) refers to \(x\) and the Indexes grow from low frequency to high frequency.
Under the condition \(0 < M < \sqrt{1 + n}\), the power in the \(n\)-th order sideband can be approximated as:
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:
Similarly for \(n = -2\) sideband:
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:
[1]:
# standard python imports
import matplotlib.pyplot as plt
import numpy as np
import tidy3d as td
# tidy3D import
import tidy3d.web as web
from numpy import random
# define geometry
wg_width = 0.25
wg_length = 2.5
wg_spacing = 0.5
buffer = 1.0
# compute quantities based on geometry parameters
x_span = 2 * wg_spacing + 2 * wg_length + 2 * buffer
y_span = wg_width + 2 * buffer
wg_insert_x = wg_length + wg_spacing
Define frequency:
[2]:
# wavelength range of interest
lambda_beg = 0.5
lambda_end = 0.6
# define pulse parameters
freq_beg = td.C_0 / lambda_end
freq_end = td.C_0 / lambda_beg
freq0 = (freq_beg + freq_end) / 2
fwidth = (freq_end - freq0) / 1.5
freqd = 1e13
freqp = freq0 + 0.5 * freqd
freqs = freq0 - 0.5 * freqd
# frequency for the first sideband
freq1 = freqs + (freqp - freqs)
min_steps_per_wvl = 30
run_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.
[3]:
n_bg = 1.0
n_solid = 1.5
background = td.Medium(permittivity=n_bg**2)
solid = td.Medium(permittivity=n_solid**2)
# define the nonlinear parameters
n_kerr_2 = 2e-8
kerr_chi3 = 4 * (n_solid**2) * td.constants.EPSILON_0 * td.constants.C_0 * n_kerr_2 / 3
amp = 400
chi3_model = td.NonlinearSpec(models=[td.NonlinearSusceptibility(chi3=kerr_chi3)], num_iters=10)
kerr_solid = td.Medium(permittivity=n_solid**2, nonlinear_spec=chi3_model)
Define structures:
[4]:
waveguide = td.Structure(
geometry=td.Box(
center=[0, 0, 0],
size=[td.inf, wg_width, 0.22],
),
medium=kerr_solid,
name="waveguide",
)
Compute and visualize the waveguide modes.
[5]:
from tidy3d.plugins.mode import ModeSolver
from tidy3d.plugins.mode.web import run as run_ms
mode_plane = td.Box(
center=[-wg_insert_x, 0, 0],
size=[0, 1, td.inf],
)
sim_modesolver = td.Simulation(
center=[0, 0, 0],
size=[x_span, y_span, 3],
grid_spec=td.GridSpec.auto(min_steps_per_wvl=min_steps_per_wvl, wavelength=td.C_0 / freq0),
structures=[waveguide],
run_time=1e-12,
boundary_spec=td.BoundarySpec.all_sides(boundary=td.Periodic()),
medium=background,
)
mode_spec = td.ModeSpec(num_modes=2)
mode_solver = ModeSolver(
simulation=sim_modesolver, plane=mode_plane, mode_spec=mode_spec, freqs=[freq0]
)
mode_data = run_ms(mode_solver)
05:03:54 UTC Mode solver created with task_id='fdve-b82c2909-3821-4280-afd2-3512513cc3f0', solver_id='mo-5ecccd28-3df1-4447-aa2d-0b8e11fb29da'.
05:03:56 UTC Mode solver status: success
[6]:
f, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(2, 3, tight_layout=True, figsize=(10, 6))
mode_solver.plot_field("Ex", "abs", mode_index=0, ax=ax1)
mode_solver.plot_field("Ey", "abs", mode_index=0, ax=ax2)
mode_solver.plot_field("Ez", "abs", mode_index=0, ax=ax3)
mode_solver.plot_field("Ex", "abs", mode_index=1, ax=ax4)
mode_solver.plot_field("Ey", "abs", mode_index=1, ax=ax5)
mode_solver.plot_field("Ez", "abs", mode_index=1, ax=ax6)
ax1.set_title("|Ex|: mode_index=0")
ax2.set_title("|Ey|: mode_index=0")
ax3.set_title("|Ez|: mode_index=0")
ax4.set_title("|Ex|: mode_index=1")
ax5.set_title("|Ey|: mode_index=1")
ax6.set_title("|Ez|: mode_index=1")
mode_data.to_dataframe()