Hata path loss in a large city#
# Hata model expects MHz for frequency and km for the distance
F = 900 # MHz
H_PATIENT = 1.5 # m
H_PATIENT2 = 4.5 # m
H_BASE_STATION = 50 # m
DISTANCE = 5 # km
# Assume Hata model
from sympy import symbols, log
def log10(x):
return log(x)/log(10)
f, h_b, h_m, c_h, d = symbols(r"f h_\mathrm{b} h_\mathrm{m} c_\mathrm{h} d")
loss = 69.55 + 26.16 * log10(f) - 13.82 * log10(h_b) - c_h + (44.9 - 6.55 * log10(h_b)) * log10(d)
loss
\[\displaystyle - c_\mathrm{h} + \frac{\left(- \frac{6.55 \log{\left(h_\mathrm{b} \right)}}{\log{\left(10 \right)}} + 44.9\right) \log{\left(d \right)}}{\log{\left(10 \right)}} + \frac{26.16 \log{\left(f \right)}}{\log{\left(10 \right)}} - \frac{13.82 \log{\left(h_\mathrm{b} \right)}}{\log{\left(10 \right)}} + 69.55\]
Assume large city, \(200 \lt f \le 1500\). Antenna correction factor is
c_h_large_upto_1500 = 3.2 * log10(11.75 * h_m)**2 - 4.97
c_h_large_upto_1500
\[\displaystyle \frac{3.2 \log{\left(11.75 h_\mathrm{m} \right)}^{2}}{\log{\left(10 \right)}^{2}} - 4.97\]
c_h_large_upto_1500.evalf(subs={h_m: 1.5})
\[\displaystyle -0.000919046954494651\]
loss_c_h_large_upto_1500 = loss.subs(c_h, c_h_large_upto_1500)
# sympy objects are immutable, so assigned new.
loss_c_h_large_upto_1500
\[\displaystyle \frac{\left(- \frac{6.55 \log{\left(h_\mathrm{b} \right)}}{\log{\left(10 \right)}} + 44.9\right) \log{\left(d \right)}}{\log{\left(10 \right)}} + \frac{26.16 \log{\left(f \right)}}{\log{\left(10 \right)}} - \frac{13.82 \log{\left(h_\mathrm{b} \right)}}{\log{\left(10 \right)}} - \frac{3.2 \log{\left(11.75 h_\mathrm{m} \right)}^{2}}{\log{\left(10 \right)}^{2}} + 74.52\]
Loss for all scenarios:
for h in (H_PATIENT, H_PATIENT2):
loss_evald = loss_c_h_large_upto_1500.evalf(subs={
f: F,
h_m: h,
h_b: H_BASE_STATION,
d: DISTANCE,
})
print(f"Loss for h: {h} => {int(loss_evald)}")
Loss for h: 1.5 => 146
Loss for h: 4.5 => 142
For verifying the result:
https://www.rfwireless-world.com/calculators/Hata-model-path-loss-calculator.html