Skip to content

beamsim v0.3.0

Choose a tag to compare

@Marimuda Marimuda released this 09 May 17:19
· 5 commits to main since this release

beamsim v0.3.0

Minor release: closes the largest gaps from the MATLAB-parity audit by porting four standalone algorithms and adding Uniform Planar Array (UPA) support — the original predecessor MATLAB simulator exposed all of these but the Python re-implementation did not.

Four algorithms ported from tracking_algos/

  • AgeMx — standalone least-recently-measured beam-pair scan, exposing the age criterion as an MBP policy independent of MCMD.
  • RandomSearch — randperm-then-mark scan baseline; RNG seeded from context["trial_seed"].
  • NNSTabu (Ascent_Tabu) — the algorithm MCMD's slot-7 weight (W_High[7] = 0.8742 in the MATLAB simulator) actually points at; distinct from plain NNS by using the global argmax of |Y_obs| for relocation when the five-cell list is exhausted.
  • ContextInformationMBS — multi-BS CI: picks the closest BS by L2 distance, then runs the standard sin-space CI match in that BS's frame.

Uniform Planar Array (UPA) support

  • PlanarCodebook + planar_steering_vector — UPA with n_x × n_y elements in the xy-plane at half-wavelength spacing, azimuth-only steering uniform over [0, 2π), mirroring MATLAB placodebook.m.
  • PlanarFreeSpaceLosChannel — companion LOS channel; works with BPLMState via the same w.conj() @ H @ f contract as the existing ULA channel.
  • Default factories: make_default_planar_ue_codebook() (2×2 UPA, 6 beams) and make_default_planar_bs_codebook() (4×4 UPA, 12 beams).

BPLMState now accepts either Codebook (ULA) or PlanarCodebook (UPA) on each side; the switch is purely at construction time.

What's still ULA-only

The full TR 38.901 cluster channel (ChannelRealisation) still uses ULA steering internally. The end-to-end planar path today is PlanarCodebook + PlanarFreeSpaceLosChannel. Extending the cluster channel to UPA is tracked in docs/ROADMAP.md.

Why hand-rolled numpy

The planar steering implementation is hand-rolled numpy rather than a wrapper around a mature wireless-simulation library. NVIDIA Sionna and DeepMIMO are the closest candidates and both are at least an order of magnitude heavier than the codebook layer alone needs. DeepMIMO is the natural integration when ray-traced channels are added, at the channel layer rather than the codebook layer.

Test count

216 → 248 passing.


Engineering log: CHANGELOG.md. Audit: docs/MATLAB_PARITY.md. Deferred work: docs/ROADMAP.md.