Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №99. Артем Геташвили (Seni...

Moscow Python Meetup №99. Артем Геташвили (Senior Python Developer). Как работает спутниковая связь и при чём тут Python?

- Рассмотрим основы работы спутниковой связи, включая ключевые принципы
передачи данных через спутники.
- Поговорим о том, как Python может быть использован для автоматизации
процессов в космической сфере

Видео: https://moscowpython.ru/meetup/99/how-sputnik-connection-works/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Moscow Python Meetup

February 24, 2025
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. 01 05 04 02 03 Космические новости Передача сигнала Примеры

    Python Спутниковая связь Спутниковая система
  2. Мы живем в удивительное время На Землю летит астероид Японцы

    запускают деревяный спутник Наши космонавты летают с американцами
  3. Как работает спутниковая связь? Земная станция отправителя передает сигнал на

    спутник, который его усиливает и переизлучает к земной станции получателя
  4. Почему вообще пользуются спутниками? Высокая дальность действия Надежность Работает в

    зонах с ограниченным покрытием традиционных сетей связи
  5. Из чего состоит система? Космос Спутники Земля Наземные станции Пользователь

    1 2 3 Спутники постоянно передают навигационные сигналы с точным временем Приёмники принимают сигналы и могут запрашивать дополнительные корректировки через наземный сегмент Станции управления отправляют корректирующие данные на спутники для поддержания точности
  6. Какие бывают типы орбит в зависимости от высоты над поверхностью

    Земли Геостационарная орбита (GEO) Средневысотная орбита (MEO) Низковысотная орбита (LEO) - Высота: 36000 км над уровнем моря - Движется синхронно с вращением Земли - Спутник может охватывать до трети Земли Телекоммуникация - Высота: 2000-35000 км GPS - Высота: 160-2000 км - Минимальная задержка сигнала Снимки с Земли
  7. Какие бывают частоты L C S Навигационные системы (GPS, ГЛОНАСС)

    Метеорологические спутники Метеорологические исследования Научные спутники Телекоммуникационные системы Военные системы связи X Радиолокационные системы Специальные системы наблюдения
  8. Какие бывают частоты Ku Ka K Спутниковое телевидение Широкополосный интернет

    Высокоскоростной интернет Сети 5G Передовые телекоммуникационные системы
  9. Этапы обработки сигнала - Преобразование исходного сигнала - Наложение информации

    на несущую частоту - Защита от помех - Передача модулированного сигнала на спутник - Усиление сигнала на спутнике - Перенаправление к получателю - Извлечение исходного сигнала - Обработка и восстановление информации - Восстановление оригинального сигнала Модуляция Передача и усиление Демодуляция
  10. Где применяют Python? Python Анализ данных Обработка изображений Моделирование и

    симуляция Автоматизация Научные вычисления Разработка GUI Машинное обучение
  11. Анализ данных и обработка изображений Обработка изображений со спутников земной

    поверхности NASA's Landsat Анализ данных с марсоходов (Curiosity, Perseverance) Анализ данных от телескопа Hubble и других космических обсерваторий
  12. import rasterio import numpy as np import matplotlib.pyplot as plt

    with rasterio.open('1979_St_Helens.tif') as dataset: red = dataset.read(1) nir = dataset.read(3) def calculate_ndvi(nir, red): ndvi =(nir.astype(float) - red.astype(float)) / (nir + red) return ndvi ndvi = calculate_ndvi(nir, red)
  13. plt.figure(figsize=(10,10)) plt.title("NDVI") plt.imshow(ndvi, cmap='RdYlGn') plt.colorbar() plt.show() with rasterio.open( 'ndvi.tif', 'w',

    driver='GTiff', height=ndvi.shape[0], width=ndvi.shape[1], count=1, dtype=ndvi.dtype, crs=dataset.crs, transform=dataset.transform, ) as dst: dst.write(ndvi, 1)
  14. Научные вычисления и моделирование • Траекторные расчеты для миссий (SpiceyPy

    - Python версия SPICE библиотеки) Симуляция условий на других планетах и Луне (Хабр) Моделирование работы космических аппаратов в программе OpenMDAO
  15. """Расчет расстояния между объектами в космосе.""" import spiceypy as spice

    import datetime def get_spice_date(date): return spice.utc2et(date.strftime('%Y-%m-%dT%H:%M:%S')) # Инициализация SPICE def load_spice_kernels(): spice.furnsh('siding_spring_s46.bsp’) # Траектория кометы spice.furnsh('naif0012.tls’) # Високосные секунды
  16. def calculate_distance_between_comet_and_mars(date): et = get_spice_date(date) comet_state, _ = spice.spkgeo( targ=399,

    et=et, ref='ECLIPJ2000’, obs=10, ) mars_state, _ = spice.spkgeo( targ=499, et=et, ref='ECLIPJ2000’, obs=10, ) vector = [mars_state[i] - comet_state[i] for i in range(3)] distance_km = spice.vnorm(vector) return distance_km
  17. Разработка прототипов • Быстрое создание ПО наземных станций для связи

    со спутниками (cFS-EDS-GroundStation) Разработка экспериментальных программ для МКС (pISSStream) Прототипирование систем управления малыми спутниками CubeSat (PyCubed)
  18. """Визуализация телеметрических данных с помощью spacepy.""" from spacepy import pycdf

    def analyze_themis_data(file_path): with pycdf.CDF(file_path) as cdf: print("Available variables:", list(cdf.keys())) if 'thb_fbk_time' in cdf: time_data = cdf['thb_fbk_time'][...] if 'thb_fbh' in cdf: fbh_data = cdf['thb_fbh'][...] plt.figure(figsize=(10, 6)) plt.plot(time_data, fbh_data) plt.title('THEMIS FBK Data (THB_FBH)’) plt.xlabel('Time’) plt.ylabel('FBH Value’) plt.grid(True) plt.show() else: print("FBH data not found in the file.")
  19. """Анализ и визуализация телеметрических данных.""" import pandas as pd import

    matplotlib.pyplot as plt NORMAL_TEMPERATURE_RANGE = (-30, 50) NORMAL_BATTERY_VOLTAGE_RANGE = (3.5, 5.0) def load_telemetry_data(file_path): data = pd.read_csv(file_path, sep=',', encoding='utf-8’) print("Данные успешно загружены.") return data def find_outliers(data, column, normal_range, column_name): outliers = data[~data[column].between(*normal_range)] if not outliers.empty: print(f"Обнаружены аномалии{column_name}:{len(outliers)} записей") return outliers
  20. def analyze_telemetry(data): temp_outliers = find_outliers( data, 'Temperature’, NORMAL_TEMPERATURE_RANGE, 'температуры’, )

    voltage_outliers = find_outliers( data, 'BatteryVoltage’, NORMAL_BATTERY_VOLTAGE_RANGE, 'напряжения батареи’, ) return { 'temperature_outliers': temp_outliers, 'battery_voltage_outliers': voltage_outliers, } def plot_telemetry(data): plt.figure(figsize=(12, 6))
  21. def create_subplot(ax_num, data_col, title, ylabel, normal_range, color): plt.subplot(2, 1, ax_num)

    plt.plot(data_col, label=title, color=color) plt.axhline( normal_range[0], color='red’, linestyle='--’, label='Нижний предел’, ) plt.axhline( normal_range[1], color='green’, linestyle='--’, label='Верхний предел’, ) plt.title(title) plt.xlabel('Время') plt.ylabel(ylabel) plt.legend()
  22. create_subplot( 1, data['Temperature’], 'Изменение температуры’, 'Температура, °C’, NORMAL_TEMPERATURE_RANGE, 'blue’, )

    create_subplot( 2, data['BatteryVoltage’], 'Изменение напряжения батареи’, 'Напряжение, В’, NORMAL_BATTERY_VOLTAGE_RANGE, 'orange’, ) plt.tight_layout() plt.show()
  23. Образование и обучение • Проект Astro Pi, где используются Raspberry

    Pi и Python для научных экспериментов на МКС • Образовательные программы по управлению спутниками (например, European Space Agency's ESERO) • Конкурсы по разработке программного обеспечения для космических миссий (Hackathons NASA)
  24. """Расчет баллистической траектории.""” def ballistic_trajectory(v0, angle, cd=0.5, rho=1.225, A=0.01, m=1.0,

    g=9.81, dt=0.01): angle_rad = np.radians(angle) vx = v0 * np.cos(angle_rad) vy = v0 * np.sin(angle_rad) x = 0 y = 0 trajectory_x = [x] trajectory_y = [y] while y >= 0: v = np.sqrt(vx**2 + vy**2) Fd = 0.5 * cd * rho * A * v**2 ax = -Fd * vx / (m * v) ay = -g - Fd * vy / (m * v) vx += ax * dt vy += ay * dt x += vx * dt y += vy * dt trajectory_x.append(x) trajectory_y.append(y) return trajectory_x, trajectory_y
  25. initial_velocity = 30 # м/с launch_angle = 45 # градусы

    mass = 0.1 # кг cross_section_area = 0.005 # м^2 x, y = ballistic_trajectory( initial_velocity, launch_angle, m=mass, A=cross_section_area, ) plt.figure(figsize=(8, 6)) plt.plot(x, y) plt.xlabel("Дальность (м)") plt.ylabel("Высота (м)") plt.title("Баллистическая траектория с сопротивлением воздуха") plt.grid(True) plt.show()
  26. А где еще используется Python? • NASA использует Python для

    анализа данных от Mars Rover (Хабр) • ESA применяет Python в проектах с малыми спутниками • Python используется в проекте Open Source Rover NASA
  27. Используемая литература 1. http://www.satcomdv.ru/telefony/stati/statya_likbez/ 2. https://studfile.net/preview/7242538/page:16/ 3. https://www.nkj.ru/archive/articles/16271/ 4. https://thecode.media/viasat/

    5. http://www.sat.belastro.net/glava2/glava2.php 6. https://www.sciencedirect.com/topics/computer-science/artificial-system 7. https://studfile.net/preview/4633603/ 8. https://education.yandex.ru/journal/sputnikovyj-internet-eto-nashe-budushee 9. https://poisknews.ru/kosmos/zachem-v-kosmos-zapuskayut-sputniki/ 10. https://glonass-iac.ru/guide/glonass.php 11. https://spacepy.github.io/ 12. https://spiceypy.readthedocs.io/en/stable/index.html 13. https://rasterio.readthedocs.io/en/stable/ 14. https://themis.ssl.berkeley.edu/data/ 15. https://naif.jpl.nasa.gov/pub/naif/generic_kernels/ 16. https://landsat.visibleearth.nasa.gov/ 17. https://iz.ru/1837851/2025-02-12/nasa-anonsirovalo-polet-crew-dragon-s-rossiiskim-kosmonavtom-k-mks-na-12-marta 18. https://www.rbc.ru/life/news/6729f7959a794758b3eef673 19. https://rg.ru/2025/02/19/nasa-veroiatnost-stolknoveniia-90-metrovogo-asteroida-s-zemlej-vozrosla-do-31.html 20. https://habr.com/ru/articles/331834/