Skip to content

[FEATURE] compute_coverage_map #430

@rwydaegh

Description

@rwydaegh

Terms

  • Checked the existing issues to see if my suggestion has not already been suggested;

Description

There's no coverage map function. with_receivers_grid exists, compute_paths exists, but there's nothing to tie them together into a 2D power map. Two milestone issues already assume this capability exists:

smoothing.ipynb builds something like a coverage map manually (~40 lines of orchestration), using 0.5 ** bounces instead of actual EM.

def compute_coverage_map(
    self,
    frequency: Float[ArrayLike, ""],
    *,
    max_order: int = 2,
    grid_size: tuple[int, int] = (50, 50),
    height: Float[ArrayLike, ""] = 1.5,
    method: Literal["exhaustive", "hybrid"] = "hybrid",
    dB: bool = True,
    coherent: bool = False,
    bvh: TriangleBvh | None = None,
    **kwargs,
) -> tuple[Float[Array, "m n"], Float[Array, " m"], Float[Array, " n"]]:
    """2D received power map over a receiver grid.
    Returns (power_map, x_coords, y_coords).
    """

Internally it would place receivers on a grid, loop over orders 0 to max_order, call compute_paths then compute_received_power per order, and accumulate. Plus a draw_coverage_map in differt.plotting.

This depends on #427 (compute_received_power). Without actual EM there's not much point.

For testing: open scene with one TX should match FSPL falloff, scene with a reflector should show the interference pattern, and ideally a comparison against Sionna (which directly addresses #206).

Main practical concern is memory for larger grids. 50x50 receivers with many path candidates can get heavy, but batch_size and chunk_size should handle it if documented properly.

This needs compute_received_power from #427 first. Once that's in, this becomes straightforward, and it directly addresses #206 and #202.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestnice-to-haveA nice to have feature (or else)

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions