FIX(simulation): imt bs beamsteering angles#208
Merged
brunohcfaria merged 1 commit intodevelopmentfrom Aug 12, 2025
Merged
Conversation
e8526a5 to
f52fa03
Compare
brunohcfaria
approved these changes
Aug 12, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR guarantees IMT azimuth angles are in [-180, 180) range.
fixes #202
The incorrect behavior of beamforming angle was introduced with the
horizontal_beamsteering_rangeparameter.We probably should include this bugfix in v1.0.1 #207
Bug specifics
At first we suspected that it was simply a problem of wrapping around the bs azimuth. However, there is still a bug present after fixing this. The beamsteering angle clipping was still wrong.
For example when bs azimuth = -180 a bug would still happen.
Consider azim = -180 and beamsteering range = [-60, 60]
Then beamsteering limits are -240, -120. That means they also need wrap around behavior.But after wrapping them around there still is a problem:
new range = 120, -120
np.clip does not behave correctly with this kind of range. Angle clipping should consider this wrap around behavior, and always clip to the closest angle limit.
For the vertical beamsteering the current implementation already works correctly. The elevations come from
arccos, so it is always in the [0, 180] range. The beamsteering limits are also in the same range, witha_min < a_maxalways, sonp.clipis appropriate.The same cannot be said for a range that wraps around (e.g. a 2deg range from 179 to -179).
Impact estimation
All simulations with beamsteering ran in a branch with the commit
0020d8023ee869c3459a7a661d9146c17d386706or any other commit that permits settinghorizontal_beamsteering_rangeparameter for BS may have been affected. If the previous statement applies, your simulation has been affected if macrocell or hotspot IMT BS is used.Para macrocell o impacto é:
considerando AZIMUTH = [60, 180, 300]
Para hotspot o impacto é mais aleatório, mas cada BS segue a mesma lógica em relação a ser afetada ou não.
considerando que candidate_azimuth = 360 * random_number_gen.rand(1)
Então o azimute pode ir de 0 a 360, de forma uniforme.
Ou seja, a não utilização de limites beamsteering em uma simulação feita em ambiente problemático foi mais grave, pois os beams podiam passar a apontar para o azimute - 180, ou seja, diretamente para trás da BS.
No entanto, caso o parâmetro tenha sido passado corretamente, igual a (-60, 60), o impacto é menos grave, tendo funcionamento normal garantido em 1/3 dos casos, apontamento definido em azimute - 60 para 1/3 dos casos, e o outro 1/3 tendo comportamento misto (mais análise necessária para determinar o comportamento desse 1/3).
Pode-se dizer que é menos grave pois para os cálculos realizados, o que ocorreu é um viés para a antena apontar para a sua direita.