Source code for piel.models.physical.electrical.transmission_lines.microstrip

import numpy as np
from piel.types.constants import mu_0


[docs] def epsilon_e(epsilon_r, width_m, dielectric_thickness_m): """ Calculate the effective dielectric constant (ε_e) for a microstrip. The effective dielectric constant accounts for the field distribution between the microstrip and the substrate, influencing signal propagation. Parameters ---------- epsilon_r : float Relative permittivity (dielectric constant) of the substrate. width_m : float Width of the microstrip line (meters). dielectric_thickness_m : float Thickness of the substrate (meters). Returns ------- epsilon_e : float Effective dielectric constant. References ---------- Equation (2): ε_e = (ε_r + 1)/2 + (ε_r - 1)/2 * 1/sqrt(1 + 12*dielectric_thickness_m/width_m) """ epsilon_e = (epsilon_r + 1) / 2 + (epsilon_r - 1) / 2 / np.sqrt( 1 + 12 * dielectric_thickness_m / width_m ) return epsilon_e
[docs] def Z_0(width_m, dielectric_thickness_m, epsilon_e): """ Calculate the characteristic impedance (Z₀) of a microstrip. The characteristic impedance represents the inherent resistance that the transmission line presents to the signal propagating through it. Parameters ---------- width_m : float Width of the microstrip line (meters). dielectric_thickness_m : float Thickness of the substrate (meters). epsilon_e : float Effective dielectric constant of the microstrip. Returns ------- characteristic_impedance_ohms : float Characteristic impedance in Ohms. References ---------- Equation (1): Z₀ = 120π / [√ε_e * (width_m/dielectric_thickness_m + 1.393 + 0.667 ln(width_m/dielectric_thickness_m + 1.444))] """ ratio = width_m / dielectric_thickness_m denominator = ratio + 1.393 + 0.667 * np.log(ratio + 1.444) characteristic_impedance_ohms = 120 * np.pi / (np.sqrt(epsilon_e) * denominator) return characteristic_impedance_ohms
[docs] def alpha_c(surface_resistance_ohms, characteristic_impedance_ohms, width_m): """ Calculate the attenuation constant (α_c) in decibels per meter (dB/m). The attenuation constant measures how much signal is lost per meter due to resistive (ohmic) losses in the conductor of the microstrip line. Parameters ---------- surface_resistance_ohms : float Surface resistance of the conductor (Ohms). characteristic_impedance_ohms : float Characteristic impedance of the microstrip (Ohms). width_m : float Width of the microstrip line (meters). Returns ------- alpha_c : float Attenuation constant in dB/m. References ---------- Equation (3): α_c (dB/m) = 8.68588 * (R_s / (Z₀ * width_m)) """ return 8.68588 * ( surface_resistance_ohms / (characteristic_impedance_ohms * width_m) )
[docs] def R_s(frequency_Hz, conductivity_S_per_m, permeability_free_space=mu_0.value): """ Calculate the surface resistivity (R_s) of a conductor at a given frequency. The surface resistivity is a measure of how much a conductor resists current flow along its surface, and it increases with frequency due to the skin effect. Parameters ---------- frequency_Hz : float Frequency at which the resistivity is calculated (Hz). conductivity_S_per_m : float Electrical conductivity of the conductor (S/m). permeability_free_space : float, optional Permeability of free space (H/m). Default is the value from mu_0. Returns ------- surface_resistance_ohms : float Surface resistivity in Ohms. Formula ------- R_s = sqrt(ω * μ₀ / (2 * σ)) Where: ω = 2π * frequency_Hz (angular frequency in rad/s) μ₀ = Permeability of free space (H/m) σ = Conductivity (S/m) """ frequency_rad_s = 2 * np.pi * frequency_Hz return np.sqrt( frequency_rad_s * permeability_free_space / (2 * conductivity_S_per_m) )