Radio frequency (RF) Models¶
For more information on these RF models, see Ref. 1.
rf
¶
Sax generic RF models.
Functions:
| Name | Description |
|---|---|
admittance |
Generalized two-port admittance element. |
capacitor |
Ideal two-port capacitor model. |
gamma_0_load |
Connection with given reflection coefficient. |
impedance |
Generalized two-port impedance element. |
inductor |
Ideal two-port inductor model. |
tee |
Ideal three-port RF power divider/combiner (T-junction). |
admittance
¶
admittance(f: FloatArrayLike, y: ComplexLike = 1 / 50) -> SDict
Generalized two-port admittance element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Frequency in Hz |
required |
y
|
ComplexLike
|
Admittance in siemens |
1 / 50
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary representing the admittance element |
References
[@pozar2012]
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
s = sax.models.rf.admittance(f=f, y=1 / 75)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o1")]), label="|S11|")
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]), label="|S12|")
plt.plot(f / 1e9, np.abs(s[("o2", "o2")]), label="|S22|")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Magnitude")
plt.legend()
Source code in src/sax/models/rf.py
capacitor
¶
capacitor(
f: FloatArrayLike = 5000000000.0,
capacitance: FloatLike = 1e-15,
z0: ComplexLike = 50,
) -> SDict
Ideal two-port capacitor model.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Frequency in Hz |
5000000000.0
|
capacitance
|
FloatLike
|
Capacitance in Farads |
1e-15
|
z0
|
ComplexLike
|
Reference impedance in Ω. |
50
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary representing the capacitor element |
References
[@pozar2012]
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
s = sax.models.rf.capacitor(f=f, capacitance=1e-12, z0=50)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o1")]), label="|S11|")
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]), label="|S12|")
plt.plot(f / 1e9, np.abs(s[("o2", "o2")]), label="|S22|")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Magnitude")
plt.legend()
Source code in src/sax/models/rf.py
gamma_0_load
¶
gamma_0_load(
f: FloatArrayLike = 5000000000.0, gamma_0: ComplexLike = 0, n_ports: IntLike = 1
) -> SDict
Connection with given reflection coefficient.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Array of frequency points in Hz |
5000000000.0
|
gamma_0
|
ComplexLike
|
Reflection coefficient Γ₀ of connection |
0
|
n_ports
|
IntLike
|
Number of ports in component. The diagonal ports of the matrix are set to Γ₀ and the off-diagonal ports to 0. |
1
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary where :math: |
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
gamma_0 = 0.5 * np.exp(1j * np.pi / 4)
s = sax.models.rf.gamma_0_load(f=f, gamma_0=gamma_0, n_ports=2)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o1")]), label="|S11|")
plt.plot(f / 1e9, np.abs(s[("o2", "o2")]), label="|S22|")
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]), label="|S12|")
plt.plot(f / 1e9, np.abs(s[("o2", "o1")]), label="|S21|")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Magnitude")
plt.legend()
Source code in src/sax/models/rf.py
impedance
¶
impedance(f: FloatArrayLike, z: ComplexLike = 50, z0: ComplexLike = 50) -> SDict
Generalized two-port impedance element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Frequency in Hz |
required |
z
|
ComplexLike
|
Impedance in Ω |
50
|
z0
|
ComplexLike
|
Reference impedance in Ω. |
50
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary representing the impedance element |
References
[@pozar2012]
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
s = sax.models.rf.impedance(f=f, z=75, z0=50)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o1")]), label="|S11|")
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]), label="|S12|")
plt.plot(f / 1e9, np.abs(s[("o2", "o2")]), label="|S22|")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Magnitude")
plt.legend()
Source code in src/sax/models/rf.py
inductor
¶
inductor(
f: FloatArrayLike = 5000000000.0,
inductance: FloatLike = 1e-12,
z0: ComplexLike = 50,
) -> SDict
Ideal two-port inductor model.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Frequency in Hz |
5000000000.0
|
inductance
|
FloatLike
|
Inductance in Henries |
1e-12
|
z0
|
ComplexLike
|
Reference impedance in Ω. |
50
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary representing the inductor element |
References
[@pozar2012]
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
s = sax.models.rf.inductor(f=f, inductance=1e-9, z0=50)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o1")]), label="|S11|")
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]), label="|S12|")
plt.plot(f / 1e9, np.abs(s[("o2", "o2")]), label="|S22|")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Magnitude")
plt.legend()
Source code in src/sax/models/rf.py
tee
¶
tee(f: FloatArrayLike = 5000000000.0) -> SDict
Ideal three-port RF power divider/combiner (T-junction).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
f
|
FloatArrayLike
|
Array of frequency points in Hz |
5000000000.0
|
Returns:
| Type | Description |
|---|---|
SDict
|
S-dictionary representing ideal RF T-junction behavior |
Examples:
# mkdocs: render
import matplotlib.pyplot as plt
import numpy as np
import sax
sax.set_port_naming_strategy("optical")
f = np.linspace(1e9, 10e9, 500)
s = sax.models.rf.tee(f=f)
plt.figure()
plt.plot(f / 1e9, np.abs(s[("o1", "o2")]) ** 2, label="|S12|^2")
plt.plot(f / 1e9, np.abs(s[("o1", "o3")]) ** 2, label="|S13|^2")
plt.plot(f / 1e9, np.abs(s[("o2", "o3")]) ** 2, label="|S23|^2")
plt.xlabel("Frequency [GHz]")
plt.ylabel("Power")
plt.legend()
Source code in src/sax/models/rf.py
-
David M. Pozar. Microwave Engineering. John Wiley & Sons, Inc., 4 edition, 2012. ISBN 978-0-470-63155-3. ↩