De meetopstelling bestaat uit twee parallelle koperdraden (diameter 2 mm, lengte 1 m) op een hoogte van 20 mm boven een aardvlak, onderlinge afstand 30 mm. Voor het nauwkeurig bepalen van de overspraak tussen geleider 1 en 2 is het noodzakelijk de karakteristieke impedantie van de individuele geleiders te kennen.
# Standard libraries, functions and physical constants
import numpy as np
import matplotlib.pyplot as plt
from math import tau, sqrt, acosh
from scipy.constants import mu_0, epsilon_0
Eigenschappen van de meetopstelling.
# Relative permeability and permittivity of air at standard temperature and pressure (STP)
mu_r = 1.00000037
epsilon_r = 1.00059
# Parameters of interest
target_l = 1 # wire length = 1 m
target_d = 2 # wire diameter = 2 mm
target_h = 20 # wire height over ground = 20 mm
target_z = 220 # expected characteristic impedance = 220 Ω
De golfimpedantie is een maat voor de relatieve sterkte van de elektrische en magnetische golven in een medium. Totdat $\mu_0$ geherdefinieerd werd in relatie tot de fijnstructuurconstante, was de golfimpedantie van het vacuüm exact gelijk aan $c \cdot 4 \pi \cdot 10^{-7}$ waarbij $c$ de lichtsnelheid is.
# Derived variables
waveimp_0 = sqrt(mu_0 / epsilon_0) # free space wave impedance ~= 377 Ω
waveimp_r = sqrt(mu_r / epsilon_r) # relative wave impedance of air at STP ~= 0.9997
# Tau-normalised constants (tau = 2 pi)
# for easier and faster calculation in each wire_plane_[*] function
mu_0_tau = mu_0 / tau
epsilon_0_tau = epsilon_0 * tau
waveimp_0_tau = waveimp_0 / tau
# Variables for plotting
xrange = np.linspace(0.4, 5, 100)
heights = (target_h // 2, target_h, target_h * 2)
legend = list(map(lambda x: "h = {} mm".format(x), heights))
Onderstaande code is een adaptie van de formules voor de zelfinductie $L_l$, eigen capaciteit $C_l$ en resulterende impedantie $Z_0$ van één draad boven een aardvlak.
# Inductance of a wire above a ground plane
# http://zakii.la.coocan.jp/tline_e/14_microstripline_z0.htm
# params:
# h_mm = height of wire centre above plane in mm
# d_mm = wire diameter (not radius!) in mm
# len_m = wire length in m (default: 1)
# mu = relative magnetic permeability (default: 1.00000037 for air at STP)
# returns:
# wire to plane inductance in H
def wire_plane_ind(h_mm, d_mm, len_m = 1, mu = mu_r):
mu *= mu_0_tau
ach = acosh(2 * h_mm / d_mm)
return len_m * mu * ach
# Capacitance of a wire above a ground plane
# http://zakii.la.coocan.jp/tline_e/14_microstripline_z0.htm
# https://en.wikipedia.org/wiki/Capacitance#Capacitance_of_conductors_with_simple_shapes
# params:
# h_mm = height of wire centre above plane in mm
# d_mm = wire diameter (not radius!) in mm
# len_m = wire length in m (default: 1)
# eps = relative electric permittivity (default: 1.00059 for air at STP)
# returns:
# wire to plane capacitance in F
def wire_plane_cap(h_mm, d_mm, len_m = 1, eps = epsilon_r):
eps *= epsilon_0_tau
ach = acosh(2 * h_mm / d_mm)
return len_m * eps / ach
# Characteristic impedance of a wire above a ground plane
# Direct calculation, which is the same as sqrt(L/C)
# http://zakii.la.coocan.jp/tline_e/14_microstripline_z0.htm
# params:
# h_mm = height of wire centre above plane in mm
# d_mm = wire diameter (not radius!) in mm
# wimp = relative wave impedance = sqrt(mu_r/eps_r) (default: 0.9997 for air at STP)
# returns:
# wire characteristic impedance in Ω
def wire_plane_imp(h_mm, d_mm, wimp = waveimp_r):
wimp *= waveimp_0_tau
ach = acosh(2 * h_mm / d_mm)
return wimp * ach
Berekening van de eigenschappen van de draden in de meetopstelling: zelfinductie $L_l$, eigen capaciteit $C_l$ en karakteristieke impedantie $Z_0$ van een draad boven een aardvlak waarbij $l$ = 1 m, $d$ = 2 mm, $h$ = 20 mm. De inductie en capaciteit zijn allebei recht evenredig met de lengte van de draad. De impedantie is (de wortel van) de verhouding van de inductie en capaciteit en dus onafhankelijk van de lengte van de draad.
from decimal import *
getcontext().prec = 3
# Inductance, capacitance, characteristic impedance of a wire (1 m x 2 mm) at height 20 mm
print("L_l =", Decimal(wire_plane_ind(target_h, target_d, target_l)).normalize().to_eng_string(), "H")
print("C_l =", Decimal(wire_plane_cap(target_h, target_d, target_l)).normalize().to_eng_string(), "F")
print("Z_0 =", Decimal(wire_plane_imp(target_h, target_d)).normalize().to_eng_string(), "Ω")
L_l = 738E-9 H C_l = 15.1E-12 F Z_0 = 221 Ω
Grafieken van de zelfinductie $L_l$ en eigen capaciteit $C_l$ per meter tegen de diameter $d$ van een draad boven een aardvlak, voor verschillende hoogtes $h$. De gebruikte draaddiameter $d$ = 2 mm is aangegeven als stippellijn.
plt.figure(figsize=(16, 8))
plt.subplot(121)
plt.title('Line inductance per unit length (nH/m)')
plt.xlabel("wire diameter (mm)")
plt.minorticks_on()
plt.grid(which="major", linestyle="-")
plt.grid(which="minor", linestyle=":")
for h in heights:
plt.plot(xrange, [wire_plane_ind(h, d) * 1e9 for d in xrange])
plt.legend(legend)
plt.axvline(x=target_d, color="r", linestyle="--")
plt.subplot(122)
plt.title('Line capacitance per unit length (pF/m)')
plt.xlabel("wire diameter (mm)")
plt.minorticks_on()
plt.grid(which="major", linestyle="-")
plt.grid(which="minor", linestyle=":")
for h in heights:
plt.plot(xrange, [wire_plane_cap(h, d) * 1e12 for d in xrange])
plt.legend(legend)
plt.axvline(x=target_d, color="r", linestyle="--")
plt.tight_layout()
plt.show()
Grafiek van de karakteristieke impedantie $Z_0$ tegen de diameter $d$ van een draad boven een aardvlak, voor verschillende hoogtes $h$. De gebruikte draaddiameter $d$ = 2 mm en de verwachte impedantie $Z_0$ = 220 Ω zijn aangegeven als stippellijnen.
plt.figure(figsize=(16, 12))
plt.title("Characteristic impedance of a wire at different heights above a ground plane")
plt.xlabel("wire diameter (mm)")
plt.ylabel("$Z_0$ (Ω)")
plt.minorticks_on()
plt.grid(which="major", linestyle="-")
plt.grid(which="minor", linestyle=":")
for h in heights:
plt.plot(xrange, [wire_plane_imp(h, d) for d in xrange])
plt.legend(legend)
plt.axvline(x=target_d, color="r", linestyle="--")
plt.axhline(y=target_z, color="r", linestyle="--")
plt.show()