Satellitic
A collection of tools for satellite assessments
Take note that while this package aims to introduce simulation methods many of the derived statistical properties does not require full simulations. The reason is that satellite movements are well modelled by assuming that they are ergodic. Thus time averages are equal to ensemble averages.
Install
Install the package using :
pip install satellitic
Example
In order to create a similar image as this:
place the content of this projects data folder in you run root and execute the below code
from satellitic.init import ALL_CELESTRAK_GROUPS,PREFERRED_BANDS
import satellitic.simulation as satsim
out = satsim.run_snapshot_simulation(
out_dir="sim_20251212_dev",
groups=ALL_CELESTRAK_GROUPS, # CELESTRAK_GROUPS,
local_tle_file="tle_local.txt", # LOCAL_TLE_FALLBACK,
N_target=10000, # set to 35000 for full-scale runs (ensure resources)
grid_nlat=120,
grid_nlon=240,
model="multibeam",
n_beams_per_sat=7,
beam_half_angle_deg=0.8,
beam_pattern="hex",
beam_max_tilt_deg=10.0,
beam_gain_model="gaussian",
gain_threshold=0.25,
frequency_band="E-band",
preferred_bands=PREFERRED_BANDS,
chunk_sat=256,
chunk_ground=20000,
use_gpu_if_available=False, # set True if you installed cupy
compute_power_map = False,
do_random_sampling = True,
)
print("Simulation finished. Outputs:", out)
import pandas as pd
tdf = pd.concat( ( pd.read_csv(out['total_csv']), pd.read_csv(out['pref_csv']), pd.read_csv(out['cofreq_csv']), pd.read_csv(out['nvis_csv'])) )
print ( tdf .describe() )
Forcing qt5 in VisPy
>>> from vispy import app
... print(app.use_app('pyqt5', True)) # force PyQt5
To view an orbital simulation
Note that the streaming 3D vispy visualisation cannot handle huge amounts of satellites. Test with a small tle file and then offload to the trajectory file
>>> from satellitic.simulation import newtonian_simulator
ImportSuccess: HAS JAX IN ENVIRONMENT
>>> newtonian_simulator( run_parameters = { 'dt':5e1,
'Nsteps':None ,
'steps_per_frame':100 ,
'mass_epsilon':None ,
'mass_rule':None } ,
satellite_topology = {'Earth':'data/local_small_tle.txt'} )
To write a trajectory file you can specify
>>> newtonian_simulator( run_parameters = { 'dt':5e1,
'Nsteps':None ,
'steps_per_frame':100 ,
'mass_epsilon':None ,
'mass_rule':None } ,
satellite_topology = {'Earth':'data/local_small_tle.txt'} ,
bAnimated = True , bWriteTrajectory = True,
trajectory_filename = "trajectory.trj", bVerbose = False )
Creating a TLE file from default system definitions
If you have access to the SRS database then this method will create TLE:s from it:
from satellitic.constellation import SRSDatabase, get_active_constellations, build_unique_satellite_rows, generate_tle_file_from_srs_df
path_ = "Data/Satellit/SRS/srs3048/"
mdb_files = [
path_ + "srs3048_part1of4.mdb",
path_ + "srs3048_part2of4.mdb",
path_ + "srs3048_part3of4.mdb",
path_ + "srs3048_part4of4.mdb",
]
db = SRSDatabase(mdb_files)
db .show_table("geo")
db .show_table("orbit_set")
df = get_active_constellations(db)
df = build_unique_satellite_rows( df )
generate_tle_file_from_srs_df( df , filename="srs3048.tle" )
Running a non-visual GPU chunked simulation using dictionary defined satellites
A viable dictionary can be supplied to the below defined function satellite topology (instead of a tle file name). The dictionaries of the systems as defined in the ITU defintions are already included as defaults:
from satellitic.constants import systems_5Cs142dE
if __name__=='__main__':
selection = ['A','B','D']
systems = { s_:systems_5Cs142dE[s_] for s_ in selection }
print ( systems )
These can be directly supplied to simulator functions:
from satellitic.simulator import jax_chunked_simulator
jax_chunked_simulator( \
run_parameters = { 'dt':5e-1,
'Nframes': 20000 ,
'steps_per_frame':100 ,
'write positions' : True ,
'write velocities' : False ,
'write masses' : False } ,
satellite_topology = { 'Earth':systems } ,
bWriteTrajectory = True, trajectory_filename = None ,
bVerbose = True )
Release files for satellitic 0.1.30
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| satellitic-0.1.30.tar.gz | 3.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| satellitic-0.1.30-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.7 MB
Release files / satellitic-0.1.30.tar.gz
| Download URL | satellitic-0.1.30.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6959f4412d55069fe2455f5a1f3a9bf855ff502df2a15a292655ed458aa1e326
|
|
BLAKE2b-256 checksum How to use checksums |
cfa81d7f05bbd7e75a5a16aaacd1bd607810c08d3ff7d26c540fc554e86e707a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.12
|
Release files / satellitic-0.1.30-py3-none-any.whl
| Download URL | satellitic-0.1.30-py3-none-any.whl |
|---|---|
| Size | 94.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c2fbcf505df87ad03b581c1b4c405e0aa28a633fa1338c169560515089526ae
|
|
BLAKE2b-256 checksum How to use checksums |
88d51581793f7079a8e70d66bf133484a691c3b49b856926b9bd01f49345046a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.12
|