Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add refraction path simulation #546

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

Anplus
Copy link

@Anplus Anplus commented Aug 15, 2024

Description

This pull request introduces a refraction simulation feature. The refraction model is based on the single slab model with internal reflections as described on page 14 of the ITU document [1]. This addition addresses the discussion raised in (#528).

[1] “Effects of building materials and structures on radiowave propagation above about 100 MHz.”

Here is a demonstration of the traced refraction paths in examples/Sionna_Ray_Tracing_Refraction.ipynb:

image

This PR is contributed by Dr. Zhenlin An, Dr. Longfei Shangguan (University of Pittsburgh), Prof. Kyle Jamieson (Princeton University), John Kaewell, and Philip Pietraski (InterDigital).

  • Fixes a bug?

NA.

  • Adds a new feature?

New refraction simulation implemented as follows

My approach first revises the _list_candidates_fibonacci() method to additionally trace possible refraction paths and logs the incident points. We trace the first-order refraction ray and then let them pass through the objects and have multi-order reflection interactions. I add a refraction_image_method() to use the image method to check the valid refraction with multiple reflections, record the one-order refraction directly received by the receivers, and merge them with existing paths. We also add a new refraction type in the path class to store the traced refraction paths. Subsequently, I added a refraction_transition_matrices() to calculate the transmission and reflection coefficients based on the ITU slab model and revised the compute_field() method to access the object thickness and compute the refraction path coefficients.

  • Introduces API changes?

All changes do not impact the existing path tracing.

Changes Introduced in  scene.py:

  1. Revised trace_path() and compute_field() Function:
    - Added refraction flag to the path tracing and field computation.

  2. New Testing Scenarios in scene:
    - Added a test scenario involving a scene with two thick brick walls and a thick concrete floor to validate the new refraction logic.

Changes Introduced in  solver_path.py:

  1. Enhanced _list_candidates_fibonacci() Function:
    - Introduced to trace the first-order refraction and subsequent multiple-order reflection paths (TX-hitting→penetration→hitting→reflection ... reflection →RX).
    - Updated to return candidates and hitting points that account for refraction effects.

  2. New _refraction_image_method() Function:
    - Modified to add first-order refraction simulation and record hitting points.

  3. New _refraction_transition_matrices() Function:
    - Added to compute the refraction matrix using ITU R2040 slab model.

Changes Introduced in  solver_base.py:

  1. revise _build_scene_object_properties_tensors Function:
    - Access the thickness property for scene objects for field computation.

Changes Introduced in radio_material.py:

  1. Revised well_define()  Function:
    - Made the function differentiable to support frequency updates in gradient-based optimization.

  2. Added Thickness properties:
    - Introduced a new attribute/interface for thickness in the material initialization.
    - Update the constructor to accept and initialize the thickness property.

Changes Introduced in path.py:

  1. Updated cir() Function:
    - Included merging for refraction paths in the CIR() computation.

Changes Introduced in utils.py:

  1. Added layer_refraction_coefficient() and layer_reflection_coefficient()Function:
    - compute the refraction and reflection coefficient considering the thickness of the layer using the slab model in the ITU R2040 document for accurate refraction calculations.
  • Other contributions

Please detail the nature of the submission.

Checklist

  • Detailed description
  • Added references to issues and discussions
  • Added / modified documentation as needed
  • Added / modified unit tests as needed
  • Passes all tests
  • Lint the code
  • Performed a self review
  • Ensure you Signed-off the commits. Required to accept contributions!
  • Co-authored with someone? Add Co-authored-by: user@domain and ensure they signed off their commits too.

@jhoydis
Copy link
Collaborator

jhoydis commented Sep 2, 2024

Hi @Anplus,

Thank you for this substantial PR. As indicated already in #528, we have an ongoing effort to support refraction which will simultaneously address the exact path computation as well as coverage maps. For this reason, we cannot review your PR. Hope for your understanding.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants