Propagation over irregular terrainΒΆ
[1]:
import os
os.chdir('../../../')
from rwp.antennas import GaussAntenna
from rwp.environment import *
from rwp.sspade import *
from rwp.vis import *
Preparing environment
[2]:
environment = Troposphere()
environment.terrain = Terrain(
elevation=gauss_hill_func(
height_m=125,
length_m=40E3,
x0_m=50E3
),
ground_material=WetGround()
)
elevated_duct = interp1d(
x=[0, 100, 150, 300],
y=[0, 32, 10, 45],
fill_value="extrapolate")
environment.M_profile = lambda x, z: elevated_duct(z)
environment.vegetation = [Impediment(
left_m=30E3,
right_m=70E3,
height_m=25,
material=CustomMaterial(eps=1.004, sigma=180e-6)
)]
Preparing transmitting antenna
[3]:
antenna = GaussAntenna(freq_hz=300E6,
height=30,
beam_width=2,
elevation_angle=0,
polarz='H')
Calculating the electromagnetic field
[4]:
params = RWPSSpadeComputationalParams(
max_range_m=100E3,
max_height_m=300,
dx_m = 100, # output grid steps affects only on the resulting field, NOT the computational grid
dz_m = 1
)
field = rwp_ss_pade(antenna=antenna, env=environment, params=params)
Visualising results
[5]:
vis300mhz = FieldVisualiser(field, env=environment, label='Pade + Transparent BC: 300 MHz', x_mult=1E-3)
Two dimensional distribution of the field amplitude
[6]:
plt = vis300mhz.plot2d(min=-80, max=0, show_terrain=True)
plt.title('10log|u|')
plt.xlabel('Range (km)')
plt.ylabel('Height (m)')
plt.tight_layout()
plt.grid(True)
plt.show()

[7]:
antenna = GaussAntenna(freq_hz=6E9,
height=30,
beam_width=2,
elevation_angle=0,
polarz='H')
[8]:
field = rwp_ss_pade(antenna=antenna, env=environment, params=params)
[9]:
vis3ghz = FieldVisualiser(field, env=environment, label='Pade + Transparent BC: 6 GHz', x_mult=1E-3)
[10]:
plt = vis3ghz.plot_hor(30, vis300mhz)
plt.xlabel('Range (km)')
plt.ylabel('10log|u| (dB)')
plt.grid(True)
plt.tight_layout()
plt.show()
WARNING:root:z grid is not equal. It may cause some unexpected differences in the results.

[11]:
plt = vis3ghz.plot2d(min=-90, max=10, show_terrain=True)
plt.title('10log|u|')
plt.xlabel('Range (km)')
plt.ylabel('Height (m)')
plt.tight_layout()
plt.grid(True)
plt.show()

[11]: