Introduction
The purpose of this workflow is to extract laser rate equation parameters from Relative Intensity Noise (RIN) and Light-Current (LI) measurements for use in a compact model using the Directly Modulated Laser (DML) element in Ansys Lumerical INTERCONNECT™.
Compared to the more complex Travelling Wave Laser Model, the DML model utilizing 0D rate equations is more computationally efficient, and its parameters can be calibrated almost entirely from RIN and LI measurements, requiring only a few inputs from the user. Learn more about different laser models in this article. The analytical equations used for parameter extraction were first published by Fatadin [1].
The workflow has three steps.
- Prepare the measurement data.
- Edit the configuration file.
- Extract laser rate equation parameters from measurement data using the provided script.
Workflow package
The workflow package attached to this article consists of the following:
- run_laser_parameter_extraction.py: Main script used for laser parameter extraction.
- extract_laser_params.cp310-win_amd64.pyd: Encrypted script containing important functions, ensure this is placed in the same directory as the main extraction script.
- inputs_single_temp: Example source data and config file for parameter extraction from measurements at one temperature.
- inputs_multi_temp: Example source data and config file for parameter extraction from measurements at multiple temperatures.
Requirements
- Python 3.13.1 (Also bundled in a Lumerical installation)
- The following Python libraries are required for running the script
- numpy [Bundled in Lumerical Python installation]
- scipy [Bundled in Lumerical Python installation]
- matplotlib [Bundled in Lumerical Python installation]
- tabulate
- h5py
Prepare measurement data
The parameter extraction procedure can be utilized to create either a model valid for a single temperature, or a temperature-dependent model (see the section “Applying extracted model parameters” below). Measurement at multiple temperatures is only necessary if you want to construct a temperature-dependent model with this data.
We outline measurement recommendations and naming requirements for both data below.
Both the LI and RIN data must be stored in a version 7.3 HDF mat file.
We recommend measuring LI and RIN curves every 10-15 \(^\circ\)C in the entire range the compact model will operate. More measurements produce a smoother interpolation.
LI data
The format of the LI data file is shown below. Ensure that variable names are identical to those in the table:
| Variable name | Units | Size | Description |
| T | °C |
\(1\times N\)
\(N\): Number of temperature points |
List of temperatures LI and RIN data was collected for, sorted in ascending order. For an isothermal model, this value is scalar. |
| I | A |
\(N\times M\)
\(N\): Number of temperature points \(M\): Number of current points |
Input current (I) measurement of the LI curves. The n-th row corresponds to T[n], with n starting at 1. |
| P | W |
\(N\times M\)
\(N\): Number of temperature points \(M\): Number of current points |
Optical power (L) measurement of the LI curves. The n-th row corresponds to T[n] , with n starting at 1. |
An example of a valid LI data file is shown below:
RIN data
At each temperature, measure RIN at a minimum three different input currents to prevent an under-constrained fit. Select input currents such that all currents are above threshold and the first measurement is at ~10% greater than threshold. Ensure that the RIN curves provided capture the full RIN-current relationship at that temperature. The number of currents does not need to be the same at each temperature.
RIN data should be smoothed sufficiently to not have big outliers. In particular, outliers above the trend of the RIN data can have significant impacts on the fit.
The RIN measurement file contains temperature, frequency, current, and RIN information. The frequency, current, and RIN information are named sequentially with an index n, each corresponding to element-n of the temperature array.
The format of the RIN data file is shown below. Ensure that variable names are identical to those in the table:
| Variable name | Units | Size | Description |
| T | °C |
\(1\times N\)
\(N\): Number of temperature points |
List of temperatures LI and RIN data was collected for, sorted in ascending order. For an isothermal model, this value is scalar. Must be the same as |
| In | A |
\(1\times M_n\)
\(M_n\): Number of current points for temperature \(n\). |
A collection of currents, with n representing different temperature. The temperature for which the data is collected is
The value of \(M_n\) can be different for different n.
In this case of a single temperature measurement, store the data as |
| freqn | Hz |
\(M_n\times Q\)
\(M_n\): Number of current points for temperature \(n\). \(Q\): Number of frequency points.
|
A collection of frequencies for RIN measurements, with n representing different temperatures. The temperature for which the data is collected is
The value of \(Q\) must be the same for all temperatures.
In this case of a single temperature measurement, store the data as |
| RINn | dB |
\(M_n\times Q\)
\(M_n\): Number of current points for temperature \(n\). \(Q\): Number of frequency points |
A collection of RIN measurements, with n representing different temperatures. The temperature for which the data is collected is
In this case of a single temperature measurement, store the data as |
An example of a valid LI data file is shown below, for 4 temperatures from 25 °C to 70 °C. There are 4 different current points for each temperature, and 1351 total frequency points.
Edit config file
The config file includes non-fitted laser parameters, fitting settings and file paths.
Usually, you only need to edit the single_temperature flag, the laser_parameters object, and the output_directory variable of this file.
Single temperature flag
Set single_temperature key to true if you only have RIN and LI data at a single temperature and want a temperature independent model.
Laser parameters
There are five parameters that cannot be fitted from RIN or LI curves, defined in the laser_parameters object. You must provide these parameters to build the compact model. The table below describes these parameters.
The active volume, mode volume and group index do not affect the performance of the final compact model [1]. However, providing an accurate estimate is important because they combine with the provided bounds of the fitted parameters to limit the RIN fits to realistic numbers. The linewidth enhancement factor must be measured or simulated separately, to the degree the accuracy of this parameter is required.
| Parameter | JSON Attribute Name | Description |
| \(V_a\) (active volume) | Va | Required for fitting bounds, does not change compact model performance. |
| \(V_p\) (mode volume) | Vp | Required for fitting bounds, does not change compact model performance. |
| \(n_g\) (group index) | Ng | Required for fitting bounds, does not change compact model performance. |
| \(\lambda\) (wavelength) | Wavelength | Non-fitted parameter, affects output. |
| \(\alpha_H\) (Linewidth enhancement factor (Henry factor)) | Linewidth enhancement factor | Non-fitted parameter, affects output. Further information and an estimate of the line width enhancement factor for a few lasers is this article. |
Output Directory
The output_directory variable is the name of the directory where plots for the final fit are stored. This folder is created in the directory where the main script is stored.
Fitting parameters
There are six laser rate equation parameters that are directly fitted by the script. You can specify the starting guess, minimum and maximum bound of each of these parameters in the config file, within the fitting_parameters object. Default values are provided with the attached example files, but you can edit the fitting limits or starting guesses if your results are unsatisfactory and being constrained by bounds.
| Parameter | JSON Attribute Name |
| \(a_0\) (differential gain) | a0 |
| \(\beta\) (mode confinement factor) | B |
| \(n_0\) (carrier density at transparency) | n0 |
| \(\tau_p\) (photon lifetime) | tp |
| \(\epsilon\) (gain compression factor) | ep |
| \(\eta\) | eta |
The script also outputs the carrier lifetime, \(\tau_n\). However, this degree of freedom is removed from the fitting by instead fitting the threshold current from the LI curves. If the carrier lifetime is found be irregular, revisit the \(I_{th}\) extraction step of the fitting script (see below) or edit the bounds for carrier density at transparency.
Data file path and other parameters
Parameters such as data file path stored under the files key, and the threshold currents start and stop attributes (Ith_start, Ith_stop) within fitting_parameters are generated once you run the script with the configuration file at least once. The script automatically uses these values in subsequent runs. The script will prompt you to enter these values again if you delete them from the configuration file.
Run extraction script
The figure below shows the main steps and necessary inputs for each step of the fitting script, run_laser_parameter_extraction.py.
The subsections below briefly describe each step.
Extract \(I_{th}\)
The first step is to extract the threshold current (\(I_{th}\)) values from the LI curves.
The extraction uses a simplified model for the LI relationship:
$$
P =
\begin{cases}
0 & \text{if } I < I_{th} \\
H(I - I_{th}) & \text{if } I \geq I_{th}
\end{cases}
$$
where \(I_{th}\) is the threshold current, \(H\) is the slope efficiency, and \(P\) is the optical power.
The slope efficiency \(H\) in the formula above shares bounds with the quantum efficiency \(\eta\). \(H\) is outputted in the terminal but is not a part of the final compact model. If \(H\) is constrained by the bounds, adjust the bounds for \(\eta\).
To aid in determining an accurate threshold current, a lower and upper bound on the current is taken as inputs in the terminal. These bounds are used to internally crop the LI data to remove non-linear effects at high currents. We suggest providing the bounds 0 and \(2\times I_{th}\).
For multiple temperatures, provide bounds such that the range covers the threshold region for all temperatures, as shown below.
Prior to proceeding, ensure that the fit is visually consistent with measurement data. If the fitted line does not match well with measurement, restart this step.
Once the fit is satisfactory, you can close the figure and continue to the next step.
Temperature-independent RIN fits
The RIN curves for each temperature is fitted. When the input has multiple temperatures, RIN data for each temperature is fitted independently from each other.
If the fit is satisfactory, close the figures and move on to the next step. If the fit is not satisfactory, see section below on restarting the fit.
Note: These fitting results are preliminary for inputs with multiple temperatures, and an anchored fitting step is completed next. Examine figures after the next step for if data for multiple temperatures is inputted to determine fit accuracy.
Temperature-dependent RIN fits
This step is automatically skipped for a single-temperature model.
Laser rate equation parameters are temperature dependent. To capture this effect in the compact model, the final model parameters should be monotonic or constant between temperatures. The table below shows the theoretical thermal dependence for each parameter.
| Parameter | Thermal Dependence |
| \(a_0\) (differential gain) | Decreasing |
| \(\beta\) (mode confinement factor) | Decreasing |
| \(n_0\) (carrier density at transparency) | Increasing |
| \(\tau_p\) (photon lifetime) | Constant |
| \(\epsilon\) (gain compression factor) | Constant |
| \(\eta\) (slope efficiency) | Decreasing |
Because of measurement noise, model imperfections and non-deterministic fitting, the correct thermal dependence of the above parameters may not exist when RIN curves are fit independently.
To rectify this, the script performs an additional temperature-dependent fitting step using an anchor temperature. In this process, model parameters at the anchor temperature is locked, and fitting is redone at all other temperatures with bounds to guarantee the expected thermal dependence.
During this step, the script will ask you for an anchor temperature. You can chose this value based on which fit appears the best, or because the fitted parameters seem accurate. The temperature-independent plots can be used to provide information for your decision.
A few RIN and LI plots are shown below for the multi-temperature example in the package.
At the end of this step, examine the figures visually. If the fit is satisfactory, close the figures and move onto the next step. If the fit is not satisfactory, see section below on restarting the fit.
Extract η
Finally, the quantum efficiency \(\eta\) is extracted for each temperature using parameters obtained from earlier steps. This is done by fitting the analytical LI solution [1] to the original LI data.
Examine the figures visually. If the fit is satisfactory, close the figures and move onto the next step. If the fit is not satisfactory, see section below on restarting the fit.
Data output
To save the final model parameters, close all remaining figures. The final model parameters are saved in the output folder, with a default name of laser_parameters.json.
Restarting the fit
If at any step the fit results are not satisfactory, you can adjust the fit parameters in the configuration file and re-run the script. As mentioned in the configuration file section, you can start the run from scratch by removing the variables such as data file paths and threshold current fitting range.
Applying extracted model parameters
The model parameters outputted by this extraction workflow are directly used by the DML element in INTERCONNECT for a single-temperature model.
To create a temperature-dependent model that automatically adjusts parameters based on input temperature, you can use the extracted parameters with a compound element to interpolate parameters between different temperatures based on the parameters extracted for each temperature.
References
- I. Fatadin, D. Ives, and M. Wicks, “Numerical simulation of intensity and phase noise from extracted parameters for CW DFB lasers,” IEEE J. Quantum Electronics, vol. 42, no. 9, pp. 934–941, Aug. 2006, doi: https://doi.org/10.1109/jqe.2006.880117.