Skip to main content

A collection of satellite methods and approaches to satellite simulations

Project description

Satellitic

A collection of tools for satellite assessments

License PyPI Downloads

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: text

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 )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

satellitic-0.1.30.tar.gz (3.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

satellitic-0.1.30-py3-none-any.whl (94.2 kB view details)

Uploaded Python 3

File details

Details for the file satellitic-0.1.30.tar.gz.

File metadata

  • Download URL: satellitic-0.1.30.tar.gz
  • Upload date:
  • Size: 3.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.12

File hashes

Hashes for satellitic-0.1.30.tar.gz
Algorithm Hash digest
SHA256 6959f4412d55069fe2455f5a1f3a9bf855ff502df2a15a292655ed458aa1e326
MD5 0b532353d7bb2b678690edfcd3e43085
BLAKE2b-256 cfa81d7f05bbd7e75a5a16aaacd1bd607810c08d3ff7d26c540fc554e86e707a

See more details on using hashes here.

File details

Details for the file satellitic-0.1.30-py3-none-any.whl.

File metadata

  • Download URL: satellitic-0.1.30-py3-none-any.whl
  • Upload date:
  • Size: 94.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.12

File hashes

Hashes for satellitic-0.1.30-py3-none-any.whl
Algorithm Hash digest
SHA256 7c2fbcf505df87ad03b581c1b4c405e0aa28a633fa1338c169560515089526ae
MD5 85013df1d243d62413fe4df06b9d97ed
BLAKE2b-256 88d51581793f7079a8e70d66bf133484a691c3b49b856926b9bd01f49345046a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page