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)
)]
## 300 MHz propagation

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()
../_images/notebooks_irregular_terrain_12_0.png
## 3 GHz propagation
[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.
../_images/notebooks_irregular_terrain_17_1.png
Amplitude of the field along axis x at the height z = 30 m
[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()
../_images/notebooks_irregular_terrain_19_0.png
[11]: