anomaly-detection-material-parameters-calibration

Sionna param calibration (research proj)
git clone https://git.ea.contact/anomaly-detection-material-parameters-calibration
Log | Files | Refs | README

itu_materials.py (10044B)


      1 #
      2 # SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
      3 # SPDX-License-Identifier: Apache-2.0
      4 #
      5 """
      6 Instantiates a set of radio materials for the scene objects.
      7 These materials are from Table 3 of the Recommendation ITU-R P.2040-2.
      8 """
      9 
     10 import numpy as np
     11 from .radio_material import RadioMaterial
     12 from . import scene
     13 
     14 def instantiate_itu_materials(dtype):
     15     #########################################
     16     # Vacuum (~ air)
     17     #########################################
     18 
     19     def vacuum_properties(f_hz): # pylint: disable=unused-argument
     20         return (1.0, 0.0)
     21 
     22     rm = RadioMaterial("vacuum",
     23                        frequency_update_callback=vacuum_properties,
     24                        dtype=dtype)
     25     scene.Scene().add(rm)
     26 
     27 
     28     #########################################
     29     # Concrete
     30     #########################################
     31 
     32     def concrete_properties(f_hz):
     33         f_ghz = f_hz / 1e9
     34         if f_ghz < 1.0 or f_ghz > 100.:
     35             return (-1.0, -1.0)
     36 
     37         relative_permittivity = 5.24
     38         conductivity = 0.0462*np.power(f_ghz, 0.7822)
     39         return (relative_permittivity, conductivity)
     40 
     41     # Materials parameters will be updated when the frequency is set
     42     rm = RadioMaterial("itu_concrete",
     43                       frequency_update_callback=concrete_properties,
     44                       dtype=dtype)
     45     scene.Scene().add(rm)
     46 
     47     ##########################################
     48     # Brick
     49     ##########################################
     50 
     51     def brick_properties(f_hz):
     52         f_ghz = f_hz / 1e9
     53         if f_ghz < 1.0 or f_ghz > 40.:
     54             return (-1.0, -1.0)
     55 
     56         relative_permittivity = 3.91
     57         conductivity = 0.0238*np.power(f_ghz, 0.16)
     58         return (relative_permittivity, conductivity)
     59 
     60     # Materials parameters will be updated when the frequency is set
     61     rm = RadioMaterial("itu_brick",
     62                        frequency_update_callback=brick_properties,
     63                        dtype=dtype)
     64     scene.Scene().add(rm)
     65 
     66     #########################################
     67     # Plasterboard
     68     #########################################
     69 
     70     def plasterboard_properties(f_hz):
     71         f_ghz = f_hz / 1e9
     72         if f_ghz < 1.0 or f_ghz > 100.:
     73             return (-1.0, -1.0)
     74 
     75 
     76         relative_permittivity = 2.73
     77         conductivity = 0.0085*np.power(f_ghz, 0.9395)
     78         return (relative_permittivity, conductivity)
     79 
     80     # Materials parameters will be updated when the frequency is set
     81     rm = RadioMaterial("itu_plasterboard",
     82                        frequency_update_callback=plasterboard_properties,
     83                        dtype=dtype)
     84     scene.Scene().add(rm)
     85 
     86     #########################################
     87     # Wood
     88     #########################################
     89 
     90     def wood_properties(f_hz):
     91         f_ghz = f_hz / 1e9
     92         if f_ghz < 0.001 or f_ghz > 100.:
     93             return (-1.0, -1.0)
     94 
     95         relative_permittivity = 1.99
     96         conductivity = 0.0047*np.power(f_ghz, 1.0718)
     97         return (relative_permittivity, conductivity)
     98 
     99     # Materials parameters will be updated when the frequency is set
    100     rm = RadioMaterial("itu_wood",
    101                        frequency_update_callback=wood_properties,
    102                        dtype=dtype)
    103     scene.Scene().add(rm)
    104 
    105     #########################################
    106     # Glass
    107     #########################################
    108 
    109     def glass_properties(f_hz):
    110         f_ghz = f_hz / 1e9
    111         if 0.1 <= f_ghz <= 100.:
    112             relative_permittivity = 6.31
    113             conductivity = 0.0036*np.power(f_ghz, 1.3394)
    114             return (relative_permittivity, conductivity)
    115         elif 220. <= f_ghz <= 450.:
    116             relative_permittivity = 5.79
    117             conductivity = 0.0004*np.power(f_ghz, 1.658)
    118             return (relative_permittivity, conductivity)
    119         else:
    120             return (-1.0, -1.0)
    121 
    122     # Materials parameters will be updated when the frequency is set
    123     rm = RadioMaterial("itu_glass",
    124                        frequency_update_callback=glass_properties,
    125                        dtype=dtype)
    126     scene.Scene().add(rm)
    127 
    128     #########################################
    129     # Ceiling board
    130     #########################################
    131 
    132     def ceiling_board_properties(f_hz):
    133         f_ghz = f_hz / 1e9
    134         if 1. <= f_ghz <= 100.:
    135             relative_permittivity = 1.48
    136             conductivity = 0.0011*np.power(f_ghz, 1.0750)
    137             return (relative_permittivity, conductivity)
    138         elif 220. <= f_ghz <= 450.:
    139             relative_permittivity = 1.52
    140             conductivity = 0.0029*np.power(f_ghz, 1.029)
    141             return (relative_permittivity, conductivity)
    142         else:
    143             return (-1.0, -1.0)
    144 
    145     # Materials parameters will be updated when the frequency is set
    146     rm = RadioMaterial("itu_ceiling_board",
    147                        frequency_update_callback=ceiling_board_properties,
    148                        dtype=dtype)
    149     scene.Scene().add(rm)
    150 
    151     #########################################
    152     # Chipboard
    153     #########################################
    154 
    155     def chipboard_properties(f_hz):
    156         f_ghz = f_hz / 1e9
    157         if f_ghz < 1.0 or f_ghz > 100.0:
    158             return (-1.0, -1.0)
    159 
    160         relative_permittivity = 2.58
    161         conductivity = 0.0217*np.power(f_ghz, 0.7800)
    162         return (relative_permittivity, conductivity)
    163 
    164     # Materials parameters will be updated when the frequency is set
    165     rm = RadioMaterial("itu_chipboard",
    166                        frequency_update_callback=chipboard_properties,
    167                        dtype=dtype)
    168     scene.Scene().add(rm)
    169 
    170     #########################################
    171     # Plywood
    172     #########################################
    173 
    174     def plywood_properties(f_hz):
    175         f_ghz = f_hz / 1e9
    176         if f_ghz < 1.0 or f_ghz > 40.0:
    177             return (-1.0, -1.0)
    178 
    179         relative_permittivity = 2.71
    180         conductivity = 0.33
    181         return (relative_permittivity, conductivity)
    182 
    183     # Materials parameters will be updated when the frequency is set
    184     rm = RadioMaterial("itu_plywood",
    185                        frequency_update_callback=plywood_properties,
    186                        dtype=dtype)
    187     scene.Scene().add(rm)
    188 
    189     #########################################
    190     # Marble
    191     #########################################
    192 
    193     def marble_properties(f_hz):
    194         f_ghz = f_hz / 1e9
    195         if f_ghz < 1.0 or f_ghz > 60.0:
    196             return (-1.0, -1.0)
    197 
    198         relative_permittivity = 7.074
    199         conductivity = 0.0055*np.power(f_ghz, 0.9262)
    200         return (relative_permittivity, conductivity)
    201 
    202     # Materials parameters will be updated when the frequency is set
    203     rm = RadioMaterial("itu_marble",
    204                        frequency_update_callback=marble_properties,
    205                        dtype=dtype)
    206     scene.Scene().add(rm)
    207 
    208     #########################################
    209     # Floorboard
    210     #########################################
    211 
    212     def floorboard_properties(f_hz):
    213         f_ghz = f_hz / 1e9
    214         if f_ghz < 50.0 or f_ghz > 100.0:
    215             return (-1.0, -1.0)
    216 
    217         relative_permittivity = 3.66
    218         conductivity = 0.0044*np.power(f_ghz, 1.3515)
    219         return (relative_permittivity, conductivity)
    220 
    221     # Materials parameters will be updated when the frequency is set
    222     rm = RadioMaterial("itu_floorboard",
    223                        frequency_update_callback=floorboard_properties,
    224                        dtype=dtype)
    225     scene.Scene().add(rm)
    226 
    227     #########################################
    228     # Metal
    229     #########################################
    230 
    231     def metal_properties(f_hz):
    232         f_ghz = f_hz / 1e9
    233         if f_ghz < 1.0 or f_ghz > 100.0:
    234             return (-1.0, -1.0)
    235 
    236         relative_permittivity = 1.0
    237         conductivity = 1e7
    238         return (relative_permittivity, conductivity)
    239 
    240     # Materials parameters will be updated when the frequency is set
    241     rm = RadioMaterial("itu_metal",
    242                        frequency_update_callback=metal_properties,
    243                        dtype=dtype)
    244     scene.Scene().add(rm)
    245 
    246     #########################################
    247     # Very dry ground
    248     #########################################
    249 
    250     def very_dry_ground_properties(f_hz):
    251         f_ghz = f_hz / 1e9
    252         if f_ghz < 1.0 or f_ghz > 10.0:
    253             return (-1.0, -1.0)
    254 
    255         relative_permittivity = 3.0
    256         conductivity = 0.00015*np.power(f_ghz, 2.52)
    257         return (relative_permittivity, conductivity)
    258 
    259     # Materials parameters will be updated when the frequency is set
    260     rm = RadioMaterial("itu_very_dry_ground",
    261                        frequency_update_callback=very_dry_ground_properties,
    262                        dtype=dtype)
    263     scene.Scene().add(rm)
    264 
    265     #########################################
    266     # Medium dry ground
    267     #########################################
    268 
    269     def medium_dry_ground_properties(f_hz):
    270         f_ghz = f_hz / 1e9
    271         if f_ghz < 1.0 or f_ghz > 10.0:
    272             return (-1.0, -1.0)
    273 
    274         relative_permittivity = 15.0*np.power(f_ghz, -0.1)
    275         conductivity = 0.035*np.power(f_ghz, 1.63)
    276         return (relative_permittivity, conductivity)
    277 
    278     # Materials parameters will be updated when the frequency is set
    279     rm = RadioMaterial("itu_medium_dry_ground",
    280                        frequency_update_callback=medium_dry_ground_properties,
    281                        dtype=dtype)
    282     scene.Scene().add(rm)
    283 
    284     #########################################
    285     # Wet ground
    286     #########################################
    287 
    288     def wet_ground_properties(f_hz):
    289         f_ghz = f_hz / 1e9
    290         if f_ghz < 1.0 or f_ghz > 10.0:
    291             return (-1.0, -1.0)
    292 
    293         relative_permittivity = 30.0*np.power(f_ghz, -0.4)
    294         conductivity = 0.15*np.power(f_ghz, 1.30)
    295         return (relative_permittivity, conductivity)
    296 
    297     # Materials parameters will be updated when the frequency is set
    298     rm = RadioMaterial("itu_wet_ground",
    299                        frequency_update_callback=wet_ground_properties,
    300                        dtype=dtype)
    301     scene.Scene().add(rm)