Terms
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.
Terms
Description
There's no coverage map function.
with_receivers_gridexists,compute_pathsexists, but there's nothing to tie them together into a 2D power map. Two milestone issues already assume this capability exists:smoothing.ipynbbuilds something like a coverage map manually (~40 lines of orchestration), using0.5 ** bouncesinstead of actual EM.Internally it would place receivers on a grid, loop over orders 0 to
max_order, callcompute_pathsthencompute_received_powerper order, and accumulate. Plus adraw_coverage_mapindiffert.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_sizeandchunk_sizeshould handle it if documented properly.This needs
compute_received_powerfrom #427 first. Once that's in, this becomes straightforward, and it directly addresses #206 and #202.