hermespy-rt

Minimalistic signal processing ray-tracer in C
git clone https://git.ea.contact/hermespy-rt
Log | Files | Refs

test.py (2800B)


      1 import numpy as np
      2 
      3 import sys, os
      4 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
      5 import hermespy_rt as rt
      6 
      7 # Define inputs
      8 mesh_filepath = __file__[:__file__.rfind('/') + 1] + '../scenes/simple_reflector.hrt'
      9 rx_positions = np.array([[0., 0., .15]], dtype=np.float64)
     10 tx_positions = np.array([[0., 0., .151]], dtype=np.float64)
     11 rx_velocities = np.array([[0., 0., 0.]], dtype=np.float64)
     12 tx_velocities = np.array([[0., 0., 0.]], dtype=np.float64)
     13 carrier_frequency = 3.0
     14 num_rx = 1
     15 num_tx = 1
     16 num_paths = 10000
     17 num_bounces = 3
     18 
     19 # Call compute_paths
     20 los, scatter = rt.compute_paths(
     21     mesh_filepath,
     22     rx_positions,
     23     tx_positions,
     24     rx_velocities,
     25     tx_velocities,
     26     carrier_frequency,
     27     num_rx,
     28     num_tx,
     29     num_paths,
     30     num_bounces
     31 )
     32 
     33 print("#####################")
     34 print("LoS:")
     35 print("#####################")
     36 print(f"shape(los.directions_rx): {los.directions_rx.shape}")
     37 print(f"shape(los.directions_tx): {los.directions_tx.shape}")
     38 print(f"shape(los.a_te): {los.a_te.shape}")
     39 print(f"shape(los.a_tm): {los.a_tm.shape}")
     40 print(f"Delays: {los.tau}")
     41 print(f"los.a_te.real min, max: {np.min(los.a_te.real)}, {np.max(los.a_te.real)}")
     42 print(f"los.a_te.imag min, max: {np.min(los.a_te.imag)}, {np.max(los.a_te.imag)}")
     43 print(f"los.a_tm.real min, max: {np.min(los.a_tm.real)}, {np.max(los.a_tm.real)}")
     44 print(f"los.a_tm.imag min, max: {np.min(los.a_tm.imag)}, {np.max(los.a_tm.imag)}")
     45 
     46 print("\n#####################")
     47 print("Scatter:")
     48 print("#####################")
     49 print(f"shape(scatter.directions_rx): {scatter.directions_rx.shape}")
     50 print(f"shape(scatter.directions_tx): {scatter.directions_tx.shape}")
     51 print(f"shape(scatter.a_te): {scatter.a_te.shape}")
     52 print(f"shape(scatter.a_tm): {scatter.a_tm.shape}")
     53 print(f"Delays: {scatter.tau}")
     54 print(f"scatter.a_te.real min, max: {np.min(scatter.a_te.real)}, {np.max(scatter.a_te.real)}")
     55 print(f"scatter.a_te.imag min, max: {np.min(scatter.a_te.imag)}, {np.max(scatter.a_te.imag)}")
     56 print(f"scatter.a_tm.real min, max: {np.min(scatter.a_tm.real)}, {np.max(scatter.a_tm.real)}")
     57 print(f"scatter.a_tm.imag min, max: {np.min(scatter.a_tm.imag)}, {np.max(scatter.a_tm.imag)}")
     58 
     59 # Asssert shapes
     60 # LoS
     61 assert los.num_paths == 1
     62 assert (
     63     (num_rx, num_tx, 1, 3)
     64     == los.directions_rx.shape
     65     == los.directions_tx.shape
     66 )
     67 assert (
     68     (num_rx, num_tx, 1)
     69     == los.a_te.shape
     70     == los.a_tm.shape
     71     == los.tau.shape
     72     == los.freq_shift.shape
     73 )
     74 # Scatter
     75 assert scatter.num_paths == num_bounces * num_paths
     76 assert (
     77     (num_rx, num_tx, scatter.num_paths, 3)
     78     == scatter.directions_rx.shape
     79     == scatter.directions_tx.shape
     80 )
     81 assert (
     82     (num_rx, num_tx, scatter.num_paths)
     83     == scatter.a_te.shape
     84     == scatter.a_tm.shape
     85     == scatter.tau.shape
     86     == scatter.freq_shift.shape
     87 )