Repository navigation
beamsim v0.3.0
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 fromcontext["trial_seed"].NNSTabu(Ascent_Tabu) — the algorithm MCMD's slot-7 weight (W_High[7] = 0.8742in 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 withn_x × n_yelements in the xy-plane at half-wavelength spacing, azimuth-only steering uniform over[0, 2π), mirroring MATLABplacodebook.m.PlanarFreeSpaceLosChannel— companion LOS channel; works withBPLMStatevia the samew.conj() @ H @ fcontract as the existing ULA channel.- Default factories:
make_default_planar_ue_codebook()(2×2 UPA, 6 beams) andmake_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.