# Transmission Line Losses on a Loaded Lossy Line¶

When dealing with RF power, for instance in radio, industry or scientific applications, a recurrent problem is to handle the inevitable RF losses correctly to avoid overheating of cables and components.

## Matched Load¶

In this example, we will use `scikit-rf`

to evaluate the losses in a 50 Ohm, 20 meters long, RG-8 cable (VF=0.84) charged with a resistive load \(R_L=50\Omega\) at 13.56 MHz. The cable losses are estimated to 1.483 dB/100 meters and the source power to 400W.

First, the usual Python imports:

```
[1]:
```

```
%matplotlib inline
```

```
[2]:
```

```
import matplotlib.pyplot as plt
import numpy as np
import skrf as rf
```

```
[3]:
```

```
rf.stylely()
```

Let’s define the problem constants:

```
[4]:
```

```
Pin = 400 # W
z0 = 50 # Ohm
freq = rf.Frequency(13.56, npoints=1, unit='MHz')
VF = 0.84
RL = 50 # Ohm
L = 20 # m
```

The propagation constant of the transmission line \(\gamma=\alpha+j\beta\) is:

```
[5]:
```

```
alpha = rf.db_2_np(1.483/100) # Np/m
beta = freq.w/rf.c/VF
gamma = alpha + 1j*beta
```

The matched line loss (or power attenuation), \(a=e^{2\alpha L}\), is:

```
[6]:
```

```
a = np.exp(2*alpha*L) # also simply 2.84/100*20
print('Matched line loss: a=', rf.mag_2_db10(a), 'dB')
```

```
Matched line loss: a= 0.29660000000000003 dB
```

If the line is charged with a matched load, ie. \(R_L=50\Omega\), then the total line loss is \(a\). The power lost in the cable will thus be:

```
[7]:
```

```
print('(Forward) Power delivered to the load:', Pin/a, 'W')
print('Power lost in the cable:', Pin *( 1 - 1/a), 'W')
```

```
(Forward) Power delivered to the load: 373.59408479883416 W
Power lost in the cable: 26.405915201165886 W
```

Which can also be checked by the `scikit-rf`

transmission line function `zl_2_total_loss`

:

```
[8]:
```

```
a_skrf = rf.zl_2_total_loss(z0, zl=RL, theta=gamma*L)
print('Power lost in the cable:',
Pin * (1 - 1/a_skrf), 'W')
```

```
Power lost in the cable: [26.4059152] W
```

Another way to evaluate the total power dissipated in the circuit is to evaluate the power expression:

where \(V\) and \(I\) are the (peak) total voltage and current. They can be evaluate using the transmission line function `voltage_current_propagation`

:

```
[9]:
```

```
# reflection coefficient and input impedance
Gamma_in = rf.zl_2_Gamma_in(z0, RL, theta=gamma*L)
Z_in = rf.zl_2_zin(z0, RL, theta=gamma*L)
# voltage and current at the line input as a function of source power
V_in = np.sqrt(2*z0*Pin)*(1 + Gamma_in)
I_in = V_in/Z_in
# voltage and current at z=L
V,I = rf.voltage_current_propagation(V_in, I_in, z0, gamma*L)
P_delivered = 1/2 * np.real(V * np.conj(I))
print('Power delivered to the load: ', P_delivered, 'W')
print('Power dissipated in the cable: ',Pin - P_delivered, 'W')
```

```
Power delivered to the load: [373.5940848] W
Power dissipated in the cable: [26.4059152] W
```

## Non Matched load¶

However, if the load is not perfectly matched to the line characteristic impedance \(z_0\), for example with \(R_L=200 + 30j\Omega\), additional losses are induced by the reflected wave. The reflection coefficient \(\Gamma_{load}\) induced by this load is:

```
[10]:
```

```
z0 = 50
ZL = 200 - 30j
Gamma_load = rf.zl_2_Gamma0(z0, ZL)
print('|Gamma_load|=', np.abs(Gamma_load))
```

```
|Gamma_load|= [0.6075238]
```

while the reflection coefficient seen at the input of the transmission line \(\Gamma_{in}\) is:

```
[11]:
```

```
Gamma_in = rf.zl_2_Gamma_in(z0, ZL, theta=gamma*L)
SWR = rf.Gamma0_2_swr(rf.zl_2_Gamma_in(z0, ZL, theta=gamma*L))
print('|Gamma_in|=', np.abs(Gamma_in), '(SWR=', SWR,')')
```

```
|Gamma_in|= [0.56741825] (SWR= [3.62340355] )
```

The total loss in dB due to SWR is often stated as:

```
[12]:
```

```
10*np.log10(a) + 10*np.log10((1 - np.abs(Gamma_in)**2)/(1 - np.abs(Gamma_load)**2))
```

```
[12]:
```

```
array([0.60942359])
```

However, this expression is only correct if either properties are verified: - (i) the characteristic impedance of the line is real (distorsionless line) - (ii) reflection coefficient is real (ie real \(Z_L/Z_0\)) [1].

The 1st condition is met here, however it will not be the case in the next section.

Anyway, the `scikit-rf`

transmission line function `zl_2_total_loss`

is correct in all conditions:

```
[13]:
```

```
a = rf.zl_2_total_loss(z0, zl=ZL, theta=gamma * L)
print('Total power loss: ', rf.mag_2_db10(a), 'dB' )
print('Delivered power:', Pin/a, 'W')
print('The total power loss is the cable:', Pin*(1 - 1/a), 'W')
```

```
Total power loss: [0.60942359] dB
Delivered power: [347.63030721] W
The total power loss is the cable: [52.36969279] W
```

```
[14]:
```

```
# reflection coefficient and input impedance
Gamma_in = rf.zl_2_Gamma_in(z0, ZL, theta=gamma*L)
Z_in = rf.zl_2_zin(z0, ZL, theta=gamma*L)
# voltage and current at the line input as a function of source power
V_in = np.sqrt(2*z0*Pin)*(1 + Gamma_in)
I_in = V_in/Z_in
# voltage and current at z=L
V,I = rf.voltage_current_propagation(V_in, I_in, z0, gamma*L)
P_delivered = 1/2 * np.real(V * np.conj(I))
print('Power delivered to the load: ', P_delivered, 'W')
print('Power dissipated in the cable: ',Pin - P_delivered, 'W')
```

```
Power delivered to the load: [235.70604719] W
Power dissipated in the cable: [164.29395281] W
```

```
[15]:
```

```
rf.Gamma0_2_swr(Gamma_in)
```

```
[15]:
```

```
array([3.62340355])
```

```
[16]:
```

```
10*np.log10(P_delivered/Pin)
```

```
[16]:
```

```
array([-2.29689267])
```

## A more advanced example¶

This example reproduces the example presented in reference [1].

```
[17]:
```

```
Z_L = 4.5 - 1673j
R_0 = 402.75
freq = rf.Frequency(1.83, npoints=1, unit='MHz')
VF = 0.915
L = rf.feet_2_meter(100)
```

First, we can derive the propagation constant \(\gamma=\alpha+j\beta\) with \(\beta=\frac{\omega}{c }\sqrt{\epsilon_r}\) from the problem parameters:

```
[18]:
```

```
alpha = rf.db_2_np(rf.db_per_100feet_2_db_per_100meter(0.095)/100)
beta = freq.w/rf.c/VF
gamma = alpha + 1j*beta
print(gamma)
```

```
[0.00035883+0.0419169j]
```

\[Z_0 = R_0 + j X_0 \approx R_0 - j \frac{\alpha}{\beta}R_0\]

\[X_0 \approx - \frac{\alpha}{\beta}R_0\]

```
[19]:
```

```
X_0 = -alpha/beta*R_0
Z_0 = R_0 + 1j*X_0
print('X_0=', X_0)
```

```
X_0= [-3.44778935]
```

Now that we have both the characteristic impedance and the propagation constant of the line, the reflection coefficients, input impedance and total loss can be deduced:

```
[20]:
```

```
print('Gamma at load:', np.abs(rf.zl_2_Gamma0(Z_0, Z_L)))
print('Gamma at input:', np.abs(rf.zl_2_Gamma_in(Z_0, Z_L, theta=gamma*L)))
print('SWR at load:', rf.Gamma0_2_swr(rf.zl_2_Gamma0(Z_0, Z_L)))
print('SWR at input:', rf.Gamma0_2_swr(rf.zl_2_Gamma_in(Z_0, Z_L, theta=gamma*L)))
print('Input impedance:', rf.input_impedance_at_theta(Z_0, Z_L, theta=gamma*L ), 'Ohm')
total_loss_db = rf.mag_2_db10(np.abs(rf.zl_2_total_loss(z0=Z_0, zl=Z_L, theta=gamma*L)))
print('Total loss:', total_loss_db, 'dB')
```

```
Gamma at load: [0.99489308]
Gamma at input: [0.97336654]
SWR at load: [390.62580446]
SWR at input: [74.09350335]
Input impedance: [5.25687961-22.99765972j] Ohm
Total loss: [13.27540882] dB
```

which match the results presented in reference [1].

## References¶

[1] Steve Stearns (K6OIK), A Transmission Line Power Paradox and Its Resolution, ARRL Pacificon Antenna Seminar, Santa Clara, CA October 10-12, 2014: https://www.fars.k6ya.org/docs/K6OIK-A_Transmission_Line_Power_Paradox_and_Its_Resolution.pdf

```
[ ]:
```

```
```