{"id":51013690,"url":"https://github.com/fundacio-i2cat/i2satsim","last_synced_at":"2026-06-21T07:02:14.349Z","repository":{"id":360728233,"uuid":"1251243215","full_name":"Fundacio-i2CAT/i2SATsim","owner":"Fundacio-i2CAT","description":"i2SATsim is a satellite network emulator to study how a mobile terminal connects to satellites and how handovers perform as the orbits propagate.","archived":false,"fork":false,"pushed_at":"2026-05-27T15:55:17.000Z","size":518,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"public","last_synced_at":"2026-05-27T17:22:57.554Z","etag":null,"topics":["3gpp","5g","6g","handovers","mobility","ntn"],"latest_commit_sha":null,"homepage":"https://www.i2cat.net","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Fundacio-i2CAT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-27T11:38:56.000Z","updated_at":"2026-05-27T15:55:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Fundacio-i2CAT/i2SATsim","commit_stats":null,"previous_names":["fundacio-i2cat/i2satsim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Fundacio-i2CAT/i2SATsim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fundacio-i2CAT%2Fi2SATsim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fundacio-i2CAT%2Fi2SATsim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fundacio-i2CAT%2Fi2SATsim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fundacio-i2CAT%2Fi2SATsim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Fundacio-i2CAT","download_url":"https://codeload.github.com/Fundacio-i2CAT/i2SATsim/tar.gz/refs/heads/public","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Fundacio-i2CAT%2Fi2SATsim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34597337,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3gpp","5g","6g","handovers","mobility","ntn"],"created_at":"2026-06-21T07:02:13.510Z","updated_at":"2026-06-21T07:02:14.342Z","avatar_url":"https://github.com/Fundacio-i2CAT.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src='assets/i2satsim_logo.png' alt=\"i2SATsim's logo\" width='50%' /\u003e\n\ni2SATsim is a satellite network simulator to study how 3GPP NTN UEs connect to satellites and how **handover events** perform as the orbits propagate.\n\n## Architecture\n\nThe simulator is structured in **two main phases**:\n\n1. **Data generation** – running the simulation\n2. **Data analysis and visualization** – plotting results.\n\ni2SATsim is inspired by tools like [Gpredict](https://github.com/csete/gpredict), [Orbitron](http://www.stoff.pl/), and [Pypredict](https://github.com/spel-uchile/Pypredict), on which —originally— it was largely based (see details [below](#Licensing)).\n\n## Features\n\nThe following are some of the key features of i2SATsim:\n\n- **Real-Time Tracking**: Displays the position and orbital parameters of satellites in real time.\n- **TLE Data Management**:\n  - Updates TLE data from [CelesTrak](https://www.celestrak.com/NORAD/elements/).\n  - Allows the user to open TLE data from a text file.\n  - Saves the TLE data of displayed satellites into a new text file.\n- **Satellite Simulation**:\n  - Simulates satellite deployments based on varying velocities, considering the mass of the satellites.\n  - Supports configuration of start and end times for simulations.\n- **Coverage and Anomalies**: (WiP)\n\n## Installation\n\nTo install i2SATsim and run the simulation, follow these steps:\n\n1. **Clone the repository:**\n\n   ```bash\n    git clone https://gitlab.i2cat.net/areas/mwi/handovers/i2satsim.git\n    cd i2satsim\n   ```\n\n2. **Install all the dependencies**\n\nBefore you begin, make sure you have:\n\n- Python 3.7 or higher installed\n- Pip (Python’s package manager)\n\n  Install the required packages with:\n\n  ```bash\n  pip install -r requirements.txt\n  ```\n\n## Usage\n\n### Data generation\n\nTo generate simulation data, run the following command:\n\n```bash\npython3 -m satsim\n```\n\nBefore running, make sure to configure the desired parameters in your main script:\n\n| **Parameter**                    | **Purpose**                                       |\n| ----------------------------------| ---------------------------------------------------|\n| `terminal_coords`                | Terminal location (longitude, latitude, altitude) |\n| `terminal_speed`                 | Terminal speed in m/s (0 = static)                |\n| `scenario`                       | Propagation environment                           |\n| `frequency`                      | Carrier frequency in Hz                           |\n| `eirp_density`                   | Satellite EIRP density (dBW/4 kHz)                |\n| `bandwidth`                      | Bandwidth of the signal in Hz                     |\n| `scs`                            | Subcarrier spacing                                |\n| `simulation_satellites_filename` | TLE file containing satellite constellation data  |\n| `output_data_filename`           | Output filename for the generated simulation data |\n| `constellation_name`             | Name of the satellite constellation               |\n| `update_tle_file`                | Whether to fetch new TLEs                         |\n\nThis will generate an output file in output_data folder (e.g., `ue_north0.txt`) with the simulation results for each configuration.\n\n---\n\n### Analysis and plotting\n\nOnce data has been generated, you can analyze and visualize the results by running:\n\n```bash\npython3 plot.py\n```\n\nBefore doing so, configure the simulation strategies in `satsim/plot.py`:\n\n| **Parameter**            | **Purpose**                                 |\n| --------------------------| ---------------------------------------------|\n| `strategies_names`       | Labels for each strategy being compared     |\n| `strategy`               | Handover logic type                         |\n| `a3_offset`              | Offset for triggering A3 event              |\n| `a3_hys`                 | Hysteresis for A3 handover                  |\n| `a4_threshold`           | Threshold for A4 event                      |\n| `ttt`                    | Time-to-Trigger duration (A3)               |\n| `num_neighbors`          | Number of neighbor satellites to consider   |\n| `k`                      | Number of top satellites used for selection |\n| `ue_connectivity_window` | Optional window for evaluating connectivity |\n\nThen choose one or more of the following plots depending on the analysis you want to perform:\n\n- `plot_effective_time`: Shows the duration of valid connectivity for each strategy.\n- `plot_events`: Displays handover and disconnection events over time.\n- `plot_call_drop_probability`: Overall probability of call drops.\n- `plot_call_drop_distribution_by_zone`: Geographic distribution of dropped calls.\n- `plot_distance_ho_cdf` and `plot_distance_cdf`: Cumulative distribution of handover distances and distances in general.\n- `plot_rsrp_boxplot`: RSRP (Reference Signal Received Power) comparison.\n- `plot_tos_cdf`: Time-of-stay (duration connected to the same satellite) distribution.\n\n\u003e **Note**: You can find examples of the plots that can be generated in `satsim/plot.py`.\n\n## Licensing\n\nThis software is licensed under the GNU Affero General Public License v3.\n\nThe repository includes code from [Pypredict](https://github.com/spel-uchile/Pypredict) (the whole `satsim/node.py` and most of `satsim/sat.py` files), which is licensed with GPL 3.0. In accordance with Section 13 of both licenses, the combined work as a whole is distributed under the terms of the AGPL 3.0.\n\n## Authorsip and citations\n\nThis code was authored by Anna Esteve and Pau Feixa, from the [Mobile Wireless Internet](https://i2cat.net/research-group/mobile-wireless-internet/) research group at [Fundació i2CAT](https://www.i2cat.net) in Barcelona, Catalunya.\n\nYou can cite our research as:\n\n```LaTeX\n@INPROCEEDINGS{2026001343,\n  author={Feixa, Pau and Esteve, Anna and {Pueyo Centelles}, Roger and Camps-Mur, Daniel}\n  booktitle={2026 IEEE International Conference on Communications (ICC)},\n  title={Never Look Back: Optimizing 5G Handovers in a OneWeb-like LEO NTN Constellation},\n  year={2026},\n  keywords={5G, NTN, Mobility, Handover, 3GPP},\n  doi={TBC}\n}\n```\n\n## Acknowledgments\n\nThis work was co-funded by the Government of Catalonia, in the scope of the [NewSpace Strategy Programme for Catalonia](https://politiquesdigitals.gencat.cat/ca/economia/estrategia-new-space-catalunya/index.html), and by the European Union’s Horizon Europe under [Grant Agreement no. 101096526 – ETHER](https://ether-project.eu/).\n\n## Miscellaneous\n\ni2SATsim is stylized with uppercase SAT, or as **\u003cspan style=\"color:#f25623ff\"\u003ei2\u003c/span\u003e\u003cspan style=\"color:black\"\u003esat\u003c/span\u003e\u003cspan style=\"color:#999999ff\"\u003esim\u003c/span\u003e\u003csup\u003e\u003cspan style=\"background-color:black\"\u003e\u003cspan style=\"color:white\"\u003e🛰\u003c/span\u003e\u003c/span\u003e\u003c/sup\u003e**, mimicking i2CAT's **\u003cspan style=\"color:#f25623ff\"\u003ei2\u003c/span\u003e\u003cspan style=\"color:black\"\u003ecat\u003c/span\u003e\u003csup\u003e\u003cspan style=\"background-color:black\"\u003e\u003cspan style=\"color:white\"\u003eR\u003c/span\u003e\u003c/span\u003e\u003c/sup\u003e**'s branding.\n\n\u003e **Note**: Coloured Markdown may not be rendered by GitLab/GitHub.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffundacio-i2cat%2Fi2satsim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffundacio-i2cat%2Fi2satsim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffundacio-i2cat%2Fi2satsim/lists"}