Analysis API

S-Parameter Analyzer

class prismo.analysis.sparameters.SParameterAnalyzer(num_ports, frequencies, reference_impedance=50.0)[source]

S-parameter analyzer for multi-port devices.

Computes scattering parameters from mode expansion or flux monitors and provides export capabilities.

Parameters:
  • num_ports (int) – Number of ports in the device.

  • frequencies (ndarray) – Array of frequencies (Hz) for which to compute S-parameters.

  • reference_impedance (float, optional) – Reference impedance (Ω), default=50.

__init__(num_ports, frequencies, reference_impedance=50.0)[source]
add_port_data(port_index, excitation_port, power_forward, power_backward)[source]

Add port measurement data from a simulation.

Parameters:
  • port_index (int) – Port at which measurement was made.

  • excitation_port (int) – Port that was excited in this simulation.

  • power_forward (ndarray) – Forward-propagating power at measurement port vs frequency.

  • power_backward (ndarray) – Backward-propagating power at measurement port vs frequency.

Return type:

None

add_mode_data(port_index, excitation_port, mode_coefficients)[source]

Add S-parameter data from mode expansion.

Parameters:
  • port_index (int) – Port at which measurement was made.

  • excitation_port (int) – Port that was excited.

  • mode_coefficients (dict) – Dictionary with ‘forward’ and ‘backward’ mode coefficients vs frequency.

Return type:

None

get_s_parameter(i, j)[source]

Get a specific S-parameter vs frequency.

Parameters:
  • i (int) – Output port index (0-based).

  • j (int) – Input port index (0-based).

Returns:

Complex S-parameter S_ij vs frequency.

Return type:

ndarray

get_s_matrix(frequency_index)[source]

Get the full S-matrix at a specific frequency.

Parameters:

frequency_index (int) – Frequency index.

Returns:

S-matrix (num_ports × num_ports).

Return type:

ndarray

get_insertion_loss_db(i, j)[source]

Get insertion loss in dB.

IL = -20 log10(|S_ij|)

Parameters:
  • i (int) – Port indices.

  • j (int) – Port indices.

Returns:

Insertion loss in dB vs frequency.

Return type:

ndarray

get_return_loss_db(port)[source]

Get return loss in dB.

RL = -20 log10(|S_ii|)

Parameters:

port (int) – Port index.

Returns:

Return loss in dB vs frequency.

Return type:

ndarray

check_reciprocity()[source]

Check reciprocity: S_ij should equal S_ji.

Returns:

Maximum reciprocity error.

Return type:

float

check_unitarity(frequency_index)[source]

Check unitarity: S†S should equal I for lossless system.

Parameters:

frequency_index (int) – Frequency index to check.

Returns:

Unitarity error (Frobenius norm of S†S - I).

Return type:

float

Export Functions

prismo.analysis.sparameters.export_touchstone(filename, frequencies, s_matrix, z0=50.0, comments=None)[source]

Export S-parameters to Touchstone format (.sNp file).

Parameters:
  • filename (Path) – Output filename (e.g., “device.s2p” for 2-port).

  • frequencies (ndarray) – Frequency array (Hz).

  • s_matrix (ndarray) – S-matrix data, shape (n_freq, n_ports, n_ports).

  • z0 (float) – Reference impedance (Ω).

  • comments (list of str, optional) – Comment lines to include in header.

Return type:

None

prismo.analysis.sparameters.compute_group_delay(frequencies, s_parameter)[source]

Compute group delay from S-parameter phase.

τ_g = -dφ/dω

Parameters:
  • frequencies (ndarray) – Frequency array (Hz).

  • s_parameter (ndarray) – Complex S-parameter vs frequency.

Returns:

Group delay (s) vs frequency.

Return type:

ndarray

prismo.analysis.sparameters.compute_group_index(frequencies, s21, length)[source]

Compute group index from transmission phase.

n_g = c * τ_g / L

Parameters:
  • frequencies (ndarray) – Frequency array (Hz).

  • s21 (ndarray) – Transmission coefficient S21.

  • length (float) – Device length (m).

Returns:

Group index vs frequency.

Return type:

ndarray