惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
Security Latest
Security Latest
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
N
News | PayPal Newsroom
S
Secure Thoughts
NISL@THU
NISL@THU
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
GRAHAM CLULEY
T
Troy Hunt's Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog RSS Feed
Latest news
Latest news
N
News and Events Feed by Topic
O
OpenAI News
IT之家
IT之家
Hacker News: Ask HN
Hacker News: Ask HN
H
Help Net Security
博客园_首页
MyScale Blog
MyScale Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Simon Willison's Weblog
Simon Willison's Weblog
Microsoft Azure Blog
Microsoft Azure Blog
P
Privacy International News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric
SecWiki News
SecWiki News
S
Security Affairs
L
LINUX DO - 热门话题
A
Arctic Wolf
T
Tor Project blog
博客园 - 聂微东
T
Tenable Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
G
Google Developers Blog
I
InfoQ
量子位
The Register - Security
The Register - Security
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
H
Hacker News: Front Page
Recorded Future
Recorded Future

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Спутниковая связь в симуляторе NS-3. Часть 6
Игорь Пластов · 2026-06-18 · via Все публикации подряд на Хабре

6.17 Классы управления атрибутами

Этот раздел главы 6 будет посвящен рассмотрению классов управления атрибутами модуля Satellite, использование этих классов в значительной мере облегчает управление настройками моделей. Кроме того, эти классы позволяют загружать значения атрибутов и их трассы (изменения атрибута во времени) из файлов.

6.17.1 Класс SimulationHelperConf

Класс SimulationHelperConf предназначенный для хранения параметров симуляции, которые загружаются из XML-файла. Он используется классом SimulationHelper (подраздел 6.18.1) для применения настроек, таких как время симуляции, включенные лучи, количество пользовательских терминалов и активация статистики.

Описание полей

Нет публичных полей.

Описание атрибутов

  • SimTime (TimeValue, по умолчанию: 100 с)

Время симуляции.

  • BeamsIDs (StringValue, по умолчанию: «10 11 12 23 24 25»)

Идентификаторы включенных лучей.

  • UserCountPerUt (PointerValue, по умолчанию: ns3::ConstantRandomVariable[Constant=1]): 

Количество пользователей на пользовательский терминал.

  • UserCountPerMobileUt (PointerValue, по умолчанию: ns3::ConstantRandomVariable[Constant=1]): 

Количество пользователей на мобильный пользовательский терминал.

  • UtCountPerBeam (PointerValue, по умолчанию: ns3::ConstantRandomVariable[Constant=1])

Количество пользовательских терминалов, связанных с каждым лучом.

  • ActivateStatistics (BooleanValue, по умолчанию: true)

Включение вывода значений из помощников статистики.

  • ActivateProgressLogs (BooleanValue, по умолчанию: true): 

Включение вывода прогресса симуляции.

  • MobileUtsFolder (StringValue, по умолчанию: путь к папке data/utpositions/mobiles/): 

Выбор папки, в которой должны находиться трассировки мобильных пользовательских терминалов.

Описание методов

  • SimulationHelperConf()

Конструктор по умолчанию. Инициализирует поля объекта базовыми значениями.

  • устанавливает время симуляции в ноль; 

  • очищает строку идентификаторов лучей; 

  • обнуляет указатели на потоки случайных величин для пользовательских терминалов и пользователей; 

  • отключает активацию статистики и логирования прогресса. 

  • ~SimulationHelperConf()

Виртуальный деструктор по умолчанию.

  • GetTypeId(void)

Статический метод, возвращающий идентификатор типа TypeId для данного класса.

  • регистрирует класс в системе объектов NS-3

  • связывает публичные поля класса с NS-3 атрибутами для возможности их загрузки из XML

  • задает значения по умолчанию для всех атрибутов. 

  • GetInstanceTypeId(void) const

Метод, возвращает идентификатор типа TypeId для конкретного экземпляра объекта.

6.17.2 Класс SatConf

Класс SatConf представляет собой центральный объект конфигурации для модуля Satellite. С помощью его атрибутов настраиваются параметры пользовательских и фидерных линий. Пропускная способность и рабочая частота канала могут задаваться индивидуально для каждой линии. Атрибуты конфигурации пропускной способности каналов FWD (прямого направления) и RTN (обратного направления) описывают все перечисленные параметры. Класс выполняет хранение и управление параметрами спутниковой сети, включая:

  • частоты и полосы пропускания для прямых и обратных линий связи (фидерных и пользовательских); 

  • конфигурации лучей; 

  • количество каналов и несущих; 

  • режимы регенерации сигнала на спутнике. 

Кроме того, класс отвечает за загрузку конфигурационных данных из внешних файлов, таких как геопозиции шлюзов и пользовательских терминалов, орбитальные данные спутников (TLE) и параметры волновых форм (Волновая форма-полностью определённый физический сигнал, используемый для передачи данных по радиоканалу. Это вектор параметров, характеризующих способ передачи данных, например: [модуляция, канальное кодирование (FEC), структура кадра, способ формирования спектра, алгоритм множественный доступа, синхросигналы). Пропускная способность пользовательской линии делится на равные каналы с помощью атрибутов ns3::SatConf::FwdUserLinkChannels и ns3::SatConf::RtnUserLinkChannels для прямого и обратного направлений соответственно.  Фидерная линия делится на каналы аналогичным образом для обоих направлений с помощью атрибутов ns3::SatConf::FwdFeederLinkChannels и ns3::SatConf::RtnFeederLinkChannels. Модуль спутника проверяет корректность конфигурации, контролируя, что пропускная способность каналов одинакова для обеих линий в рамках одного направления (прямого или обратного). В случае несоответствия моделирование завершается фатальной ошибкой.

Описание полей

У данного класса есть публичные поля, но все они являются статическими константами:

    static const uint32_t BEAM_ID_INDEX = 0;

    static const uint32_t U_FREQ_ID_INDEX = 1;

    static const uint32_t GW_ID_INDEX = 2;

    static const uint32_t F_FREQ_ID_INDEX = 3;

    static const uint32_t BEAM_ELEM_COUNT = 4;

Описание атрибутов

  • FwdFeederLinkBandwidth (DoubleValue, по умолчанию: 2.0e9): 

полоса пропускания прямой фидерной линии связи.

  • FwdFeederLinkBaseFrequency (DoubleValue, по умолчанию: 27.5e9): 

базовая частота прямой фидерной линии связи.

  • RtnFeederLinkBandwidth (DoubleValue, по умолчанию: 2.0e9): 

полоса пропускания обратной фидерной линии связи.

  • RtnFeederLinkBaseFrequency (DoubleValue, по умолчанию: 17.7e9): 

базовая частота обратной фидерной линии связи.

  • FwdUserLinkBandwidth (DoubleValue, по умолчанию: 0.5e9): 

полоса пропускания прямой пользовательской линии связи.

  • FwdUserLinkBaseFrequency (DoubleValue, по умолчанию: 19.7e9): 

базовая частота прямой пользовательской линии связи.

  • RtnUserLinkBandwidth (DoubleValue, по умолчанию: 0.5e9): 

полоса пропускания обратной пользовательской линии связи.

  • RtnUserLinkBaseFrequency (DoubleValue, по умолчанию: 29.5e9): 

базовая частота обратной пользовательской линии связи.

  • FwdUserLinkChannels (UintegerValue, по умолчанию: 4): 

количество каналов в прямой пользовательской линии.

  • RtnUserLinkChannels (UintegerValue, по умолчанию: 4): 

количество каналов в обратной пользовательской линии.

  • FwdFeederLinkChannels (UintegerValue, по умолчанию: 16): 

количество каналов в прямой фидерной линии.

  • RtnFeederLinkChannels (UintegerValue, по умолчанию: 16): 

количество каналов в обратной фидерной линии.

  • SuperFrameConfForSeq0 (EnumValue, по умолчанию: Configuration_0): 

конфигурация суперкадра, используемая для последовательности 0.

  • FwdCarrierAllocatedBandwidth (DoubleValue, по умолчанию: 0.125e9): 

выделенная полоса частот для несущих прямой связи в Гц.

  • FwdCarrierRollOff (DoubleValue, по умолчанию: 0.20): 

коэффициент спада (rolloff) для несущих прямой связи.

  • FwdCarrierSpacing (DoubleValue, по умолчанию: 0.00): 

коэффициент расстояния между несущими прямой связи.

  • RtnScpcCarrierAllocatedBandwidth (DoubleValue, по умолчанию: 0.125e9): 

ширина выделенной полосы частот для несущих SCPC (Single Channel Per Carrier) обратной линии связи в Гц.

  • RtnScpcCarrierRollOff (DoubleValue, по умолчанию: 0.20): 

коэффициент спада (rolloff) для несущих SCPC обратной связи.

  • RtnScpcCarrierSpacing (DoubleValue, по умолчанию: 0.00): 

коэффициент расстояния между несущими SCPC обратной связи.

  • ForwardLinkRegenerationMode (EnumValue, по умолчанию: TRANSPARENT): 

режим регенерации сигнала, используемый на спутниках для прямой линии связи.

  • ReturnLinkRegenerationMode (EnumValue, по умолчанию: TRANSPARENT): 

режим регенерации сигнала, используемый на спутниках для обратной линии связи.

Описание методов

  • GetTypeId(void)

статический метод для регистрации TypeId класса в системе NS-3 и его атрибутов.

  • GetInstanceTypeId(void) const

возвращает TypeId экземпляра объекта.

  • SatConf()

конструктор по умолчанию, инициализирующий члены класса нулевыми значениями.

  • Initialize(...)

основной метод инициализации, принимающий пути к конфигурационным файлам и флаг режима созвездия. Аргументы метода включают:

  • rtnConf (файл конфигурации обратной линии);

  • fwdConf (файл конфигурации прямой линии); 

  • gwPos (файл позиций шлюзов); 

  • satPos (файл позиции спутника); 

  • utPos (файл позиций пользовательских терминалов); 

  • wfConf (файл конфигурации волновой формы); 

  • isConstellation (флаг, указывающий на использование созвездия). 

Метод загружает конфигурации лучей, обновляет привязку шлюзов к лучам (если используется созвездие) и вызывает метод настройки несущих.

  • Configure(std::string wfConf): 

настраивает параметры прямой и обратной линий связи. Проверяет равенство полос пропускания питающих и пользовательских линий для режимов прозрачной регенерации или регенерации на физическом уровне, создает конфигурации несущих (объекты SatFwdCarrierConf) и настраивает последовательность суперкадров (SatSuperframeSeq) с использованием указанного файла волновых форм.

  • GetCarrierFrequencyHz(...): 

вычисляет и возвращает центральную частоту несущей в герцах в основе типа канала, идентификатора частоты и идентификатора несущей.

  • GetCarrierBandwidthHz(...): 

возвращает полосу пропускания несущей в герцах на основе типа канала, идентификатора несущей и типа запрашиваемой полосы (выделенная, занятая или эффективная).

  • OpenFile(std::string filePathName) const: 

вспомогательный метод для открытия файла по указанному пути. Если файл не найден по первому пути, выполняется попытка открыть его с добавлением префикса «../../».

  • LoadSatConf(std::string filePathName) const

загружает конфигурацию спутника из файла, содержащего идентификаторы луча, пользовательского канала, шлюза и питающего канала. Возвращает вектор векторов с данными конфигурации.

  • SetUtPositionsPath(std::string inputFileUtListPositions): 

обновляет путь к файлу со списком позиций пользовательских терминалов и перезагружает их.

  • LoadPositions(std::string filePathName, PositionContainer_t& container): 

загружает геодезические координаты (широту, долготу, высоту) из указанного файла в переданный контейнер.

  • LoadTles(...): 

загружает данные орбитальных элементов (TLE) и время начала симуляции из указанных файлов. Принимает путь к файлу с TLE и путь к файлу с датой начала. Возвращает вектор строк с TLE.

  • LoadIsls(std::string filePathName): 

загружает информацию о межспутниковых линиях связи (ISL) из файла. Возвращает вектор пар идентификаторов спутников, соединенных линиями ISL.

  • GetBeamCount() const

возвращает количество лучей в конфигурации.

  • GetGwCount() const: 

возвращает количество шлюзов.

  • GetUtCount() const: 

возвращает количество пользовательских терминалов.

  • GetSatCount() const: 

возвращает количество спутников (на основе загруженных позиций или TLE).

  • GetBeamConfiguration(uint32_t beamId, SatEnums::SatLinkDir_t dir) const

возвращает вектор конфигурации (идентификаторы луча, частоты, шлюза и т.д.) для указанного луча и направления связи (прямое или обратное).

  • GetRtnLinkCarrierCount() const

возвращает количество несущих в обратной линии связи из конфигурации суперкадра.

  • GetFwdLinkCarrierCount() const

возвращает количество несущих в прямой линии связи.

  • GetForwardLinkRegenerationMode() const

возвращает режим регенерации для прямой линии связи.

  • GetReturnLinkRegenerationMode() const

возвращает режим регенерации для обратной линии связи.

  • GetFwdLinkCarrierBandwidthHz(...): 

возвращает полосу пропускания несущей прямой линии на основе её идентификатора и типа полосы.

  • GetRtnLinkCarrierBandwidthHz(...): 

возвращает полосу пропускания несущей обратной линии на основе её идентификатора и типа полосы.

  • GetGwPosition(uint32_t gwId) const

возвращает геодезическую позицию шлюза по его идентификатору.

  • GetUtPosition(uint32_t utId) const

возвращает геодезическую позицию пользовательского терминала по его идентификатору.

  • GetSatPosition() const

возвращает геодезическую позицию спутника (для сценария с одним спутником).

  • GetStartTimeStr() const

возвращает строку с временем начала симуляции в формате «YYYY-MM-DD hh:mm:ss».

  • GetSuperframeSeq()

возвращает указатель на объект последовательности суперкадров (SatSuperframeSeq).

6.17.3 Класс SatSuperframeConf

Класс SatSuperframeConf предназначен для управления конфигурацией суперкадра ( superframe) в спутниковой системе связи. Суперкадр представляет собой структуру, объединяющую несколько кадров (frames), которые, в свою очередь, состоят из несущих и временных слотов. Данный класс отвечает за хранение параметров этих кадров, таких как:

  • allocated bandwidth; 

  • rolloff

  • spacing factor

  • spreading factor

Он также управляет логикой выделения несущих, поддерживает конфигурацию для каналов произвольного доступа (Random Access) и каналов логина, а также обеспечивает расчет частот несущих на основе их идентификаторов. Класс является базовым для конкретных реализаций конфигураций (они представляют собой подклассы, например SatSuperframeConf0, о них будет рассказано в следующем подразделе), которые определяют конкретные значения атрибутов через систему TypeId в NS3.

Описание полей

У данного класса есть одно публичное поле, но оно является статической константой:

static const uint8_t m_maxFrameCount = 10;

Описание атрибутов

  • FrameCount (UintegerValue): 

количество кадров, входящих в состав суперкадра.

  • FrameConfigType (EnumValue): 

тип конфигурации кадра (например, ConfigType_0, ConfigType_1 и т.д.), определяющий логику распределения ресурсов.

  • MaxCarrierSubdivision (UintegerValue): 

максимальный уровень подразделения одной несущей (используется для ConfigType_3).

  • Frame{N}_AllocatedBandwidthHz (DoubleValue): 

выделенная полоса пропускания в герцах для кадра с индексом N.

  • Frame{N}_CarrierAllocatedBandwidthHz (DoubleValue)

выделенная полоса пропускания для несущей внутри кадра N.

  • Frame{N}_CarrierRollOff (DoubleValue)

коэффициент спада (rolloff) для несущих кадра N.

  • Frame{N}_CarrierSpacing (DoubleValue)

фактор расстояния между несущими (spacing factor) для кадра N.

  • Frame{N}_SpreadingFactor (UintegerValue)

коэффициент расширения спектра (spreading factor ) для несущих кадра N.

  • Frame{N}_RandomAccessFrame (BooleanValue)

флаг, указывающий, используется ли кадр N для произвольного доступа.

  • Frame{N}_LowerLayerService (UintegerValue)

идентификатор службы нижнего уровня, используемой для кадра N.

  • Frame{N}_LogonFrame (BooleanValue)

флаг, указывающий, предназначен ли кадр N для процедуры логина.

  • Frame{N}_GuardTimeSymbols (UintegerValue)

длительность защитного интервала в символах для кадра N.

Описание методов

  • CreateSuperframeConf(SuperFrameConfiguration_t conf)

статический фабричный метод для создания экземпляра конкретной конфигурации суперкадра на основе переданного перечисления (например, SUPER_FRAME_CONFIG_0). Возвращает умный указатель на созданный объект.

  • Configure(...)

основной метод настройки конфигурации. Принимает выделенную полосу пропускания, целевую длительность суперкадра и указатель на конфигурацию волновой формы. Аргументы метода: 

  • allocatedBandwidthHz (выделенная полоса); 

  • targetDuration (длительность); 

  • waveformConf (конфигурация сигнала). 

Метод проверяет совместимость параметров (например, ACM), очищает старые кадры и создает новые на основе атрибутов, добавляя их в контейнер суперкадра.

  • AddFrameConf(...)

метод для добавления конфигурации кадра в суперкадр. Принимает параметры кадра (объект SatFrameConfParams_t), полосу пропускания, rolloff, spacing, spreading factor и уровень подразделения. Создает объекты BTU (Basic Time Unit), формирует кадры и, если это кадр произвольного доступа, регистрирует соответствующие каналы.

  • GetCarrierFrequencyHz(uint32_t carrierId) const

вычисляет и возвращает центральную частоту для заданной несущей. Метод определяет, к какому кадру принадлежит несущая, и суммирует смещения частот предыдущих кадров с частотой внутри текущего кадра.

  • GetCarrierBandwidthHz(uint32_t carrierId, SatEnums::CarrierBandwidthType_t bandwidthType) const

возвращает полосу пропускания несущей (выделенную, занятую или эффективную) на основе её идентификатора и запрашиваемого типа полосы.

  • GetFrameConf(uint8_t index) const

возвращает указатель на конфигурацию кадра (SatFrameConf) по его индексу в суперкадре.

  • GetCarrierCount() const

возвращает общее количество несущих во всех кадрах суперкадра.

  • GetCarrierId(uint8_t frameId, uint16_t frameCarrierId) const

вычисляет глобальный идентификатор несущей на основе идентификатора кадра и идентификатора несущей внутри этого кадра.

  • GetRaSlots(uint8_t raChannel)

возвращает контейнер с конфигурациями временных слотов для указанного канала произвольного доступа.

  • GetRaSlotCount(uint8_t raChannel)

возвращает количество временных слотов в указанном канале произвольного доступа.

  • GetRaChannelCount() const

возвращает общее количество каналов произвольного доступа, сконфигурированных в суперкадре.

  • GetRaChannelFrameId(uint8_t raChannel) const

возвращает идентификатор кадра, в котором находится указанный канал произвольного доступа.

  • IsLogonEnabled() const

возвращает true, если в суперкадре сконфигурирован канал для логина.

  • GetLogonChannelIndex() const

возвращает индекс канала, используемого для логина.

  • GetCarrierFrame(uint32_t carrierId) const

вспомогательный метод, определяющий идентификатор кадра, к которому принадлежит заданная глобальная несущая.

6.17.4 Подклассы  SatSuperframeConf

Класс SatSuperframeConf имеет несколько конкретных реализаций (подклассов), каждая из которых задает специфический профиль конфигурации суперкадра для различных сценариев использования спутниковой связи. Они различаются типом конфигурации (ConfigType), который влияет на такие аспекты, как:

  • использование адаптивного кодирования и модуляции (ACM); 

  • возможность подразделения несущих; 

  • проверку лимитов слотов. 

Все подклассы определяют 10 кадров, где один из них (обычно с индексом 1) выделен для произвольного доступа, а остальные являются выделенными (dedicated).

Подкласс SatSuperframeConf0

Класс, реализующий конфигурацию типа 0 (CONFIG_TYPE_0). Представляет собой базовую конфигурацию суперкадра, состоящую из 10 кадров. В этой конфигурации используется волновая форма по умолчанию, а адаптивное кодирование и модуляция (ACM) отключены.

  • структура кадров: 

    • кадр 0: выделенная полоса 12.5 МГц, не используется для произвольного доступа; 

    • кадр 1: выделенная полоса 1.25 МГц, используется для произвольного доступа; 

    • кадры 2-9: выделенная полоса 12.5 МГц, не используются для произвольного доступа. 

  • методы: 

    • GetTypeId(void)

регистрирует TypeId и атрибуты класса, устанавливая количество кадров равным 10, максимальный уровень подразделения несущих 5 и задавая параметры полос частот для всех 10 кадров согласно конфигурации типа 0;

  • DoConfigure()

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

Подкласс SatSuperframeConf1

Класс, реализующий конфигурацию типа 1 (CONFIG_TYPE_1). Структура кадров аналогична SatSuperframeConf0 (10 кадров, один для произвольного доступа), но данный тип конфигурации требует, чтобы адаптивное кодирование и модуляция (ACM) были включены. Это позволяет динамически изменять параметры модуляции и кодирования в зависимости от условий канала.

  • структура кадров: 

    • кадр 0: выделенная полоса 12.5 МГц; 

    • кадр 1: выделенная полоса 1.25 МГц (произвольный доступ); 

    • кадры 2-9: выделенная полоса 12.5 МГц. 

  • методы: 

    • GetTypeId(void)

регистрирует TypeId с настройкой FrameConfigType в значение SatSuperframeConf::CONFIG_TYPE_1 и параметрами кадров, идентичными конфигурации 0;

  • DoConfigure()

пустая реализация, логика обработки ACM управляется базовым классом на основе типа конфигурации.

Подкласс SatSuperframeConf2

Класс, реализующий конфигурацию CONFIG_TYPE_2. Конфигурация, аналогичная предыдущим по структуре кадров, но с отличиями в логике обработки. В этом режиме отключена проверка лимитов количества временных слотов, что позволяет использовать конфигурации с превышением стандартных ограничений.

  • структура кадров: 

    • кадр 0: выделенная полоса 12.5 МГц; 

    • кадр 1: выделенная полоса 1.25 МГц (произвольный доступ); 

    • кадры 2-9: выделенная полоса 12.5 МГц. 

  • методы: 

    • GetTypeId(void)

регистрирует TypeId с типом конфигурации CONFIG_TYPE_2. Параметры кадров (полосы, rolloff, spacing) соответствуют значениям из конфигурации 0.

  • DoConfigure()

не содержит дополнительного кода, особенность поведения (отсутствие проверки лимитов) обеспечивается типом конфигурации в базовом классе.

Подкласс SatSuperframeConf3

Класс, реализующий конфигурацию CONFIG_TYPE_3. Данный тип конфигурации поддерживает разбиение несущих (carrier subdivision) до максимального уровня 5. Это позволяет более гибко распределять полосу пропускания, деля несущие на более мелкие части. Проверка лимитов слотов также отключена.

  • структура кадров: 

    • кадр 0: выделенная полоса 12.5 МГц; 

    • кадр 1: выделенная полоса 1.25 МГц (произвольный доступ); 

    • кадры 2-9: выделенная полоса 12.5 МГц. 

  • методы: 

    • GetTypeId(void)

регистрирует TypeId с типом CONFIG_TYPE_3 и устанавливает атрибут MaxCarrierSubdivision в значение 5.

  • DoConfigure()

пустая реализация, логика подразделения несущих активируется в базовом классе при обнаружении типа конфигурации 3.

Подкласс SatSuperframeConf4

Класс, реализующий конфигурацию типа 4 (CONFIG_TYPE_4). Конфигурация, сочетающая использование волновой формы по умолчанию (как в типе 0) с отключенной проверкой лимитов слотов (как в типе 2). Структура кадров остается стандартной.

  • структура кадров: 

    • кадр 0: выделенная полоса 12.5 МГц; 

    • кадр 1: выделенная полоса 1.25 МГц (произвольный доступ); 

    • кадры 2-9: выделенная полоса 12.5 МГц. 

  • методы: 

    • GetTypeId(void)

регистрирует TypeId с типом CONFIG_TYPE_4. Параметры кадров совпадают с конфигурацией 0.

  • DoConfigure()

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

6.17.5 Класс SatWaveformConf

Класс SatWaveformConf предназначен для управления конфигурациями волновых форм DVB-RCS2, используемыми в обратной линии спутниковой связи. Он отвечает за чтение определений волновых форм из внешних файлов, хранение их параметров (модуляция, скорость кодирования, размер полезной нагрузки, длительность) и предоставление интерфейса для выбора наиболее подходящей формы в зависимости от условий канала. Класс поддерживает механизм адаптивного кодирования и модуляции (ACM), позволяя динамически изменять параметры передачи для оптимизации пропускной способности при заданном целевом уровне блочных ошибок (BLER). Конфигурация волновой формы, влияет на конфигурацию временных слотов суперкадров. Кадры в суперкадре формируются из временных слотов с использованием волновой формы, определённой атрибутом ns3::SatWaveformConf::DefaultWfId. Это означает, что длительность кадра определяется количеством таких временных слотов, которые могут поместиться в заданную целевую длительность.

Типы конфигурации суперкадра

тип 0:

временной слот, построенный на основе атрибута ns3::SatWaveformConf::DefaultWfId, всегда используется планировщиком SatBeamScheduler для планирования временных слотов пользовательских терминалов (UT).

тип 1:

временной слот, построенный на основе атрибута ns3::SatWaveformConf::DefaultWfId, задаёт длительность для планируемых временных слотов пользовательских терминалов. Выбор волновой формы для временного слота основывается на оценке C/N0 (где это возможно). Тем не менее, для служебных временных слотов (control timeslots) всегда используется наиболее помехоустойчивая волновая форма.

типа 2:

временной слот, построенный на основе атрибута ns3::SatWaveformConf::DefaultWfId, не влияет на планируемые временные слоты пользовательских терминалов. Выбор волновой формы для временного слота основывается на оценке C/N0 (где это возможно), как и для конфигурации 1. Однако, помимо выбора волновой формы, может также изменяться длительность временного слота (в зависимости от использования коротких или длинных волновых форм). Снова, для служебных временных слотов всегда используется наиболее помехоустойчивая волновая форма.  Для типов 1 и 2 атрибут ns3::SatWaveformConf::AcmEnabled устанавливается в значение true (включено). В противном случае поведение аналогично конфигурации 0. Если оценка C/N0 неизвестна, то при использовании типов конфигурации 1 или 2 применяется наиболее помехоустойчивая волновая форма.

Описание полей

У данного класса есть публичные поля, но все они являются статическими константами:

static const uint32_t SHORT_BURST_LENGTH = 536;

static const uint32_t LONG_BURST_LENGTH = 1616;

Описание атрибутов

  • TargetBLER (DoubleValue, по умолчанию: 0.00001): 

целевой коэффициент блочных ошибок, используемый для определения требований к Eb/N0 для каждой волновой формы.

  • AcmEnabled (BooleanValue, по умолчанию: false): 

флаг, указывающий, включен ли механизм адаптивного кодирования и модуляции (ACM). Если отключен, используется волновая форма по умолчанию.

  • BurstLength (EnumValue, по умолчанию: ShortAndLongBurst): 

определяет поддерживаемую длину пакета (в символах) для волновых форм, которая может быть короткой, длинной или обеими одновременно.

Описание методов

  • SatWaveformConf(std::string directoryPathName): 

Основной конструктор. Принимает путь к директории, содержащей файлы конфигурации.

  • читает файл waveforms.txt для загрузки таблицы доступных волновых форм и их параметров; 

  • читает файл default_waveform.txt для получения идентификатора волновой формы, используемой по умолчанию; 

  • заполняет внутренний ассоциативный массив объектов SatWaveform, преобразуя строковые представления скорости кодирования в числовые значения. 

  • ReadFromFile(std::string filePathName): 

Метод для парсинга файла с определениями волновых форм.

  • построчно считывает данные, извлекая идентификатор, количество модулированных битов, скорость кодирования (в формате дроби), размер полезной нагрузки и длительность пакета; 

  • обрабатывает опциональное поле длительности преамбулы; 

  • создает объекты SatWaveform и сохраняет их в контейнере, вычисляя минимальный и максимальный идентификаторы. 

  • ReadFromFileDefaultWaveform(std::string filePathName)

Метод для чтения идентификатора волновой формы по умолчанию из отдельного файла.

  • открывает указанный файл и считывает первое значение как идентификатор; 

  • выполняет попытку открыть файл по альтернативному пути, если первый путь недействителен. 

  • InitializeEbNoRequirements(Ptr linkResults): 

Метод инициализации требований к отношению энергии бита к спектральной плотности шума (Eb/N0).

  • использует переданный объект результатов моделирования линии для получения значений Eb/N0 для каждой волновой формы при целевом BLER

  • преобразует полученные значения из децибел в линейный масштаб и сохраняет их внутри соответствующих объектов волновых форм. 

  • GetBestWaveformId(...)

Выбирает оптимальную волновую форму на основе текущего качества канала (C/N0) и требований к длине пакета.  Аргументы метода:

  • cno (текущее отношение C/N0 (несущая/шум)); 

  • symbolRateInBaud (символьная скорость для расчета порогов); 

  • wfId (ссылка для возврата ID выбранной формы); 

  • cnoThreshold (ссылка для возврата рассчитанного порога C/N0 ); 

  • burstLength (запрашиваемая длина пакета в символах). 

Если ACM отключен или C/N0 не является числом, возвращает идентификатор волновой формы по умолчанию. В противном случае выполняет итерацию по волновым формам в порядке убывания спектральной эффективности. Выбирает первую волновую форму, порог C/N0 которой меньше или равен текущему C/N0 канала, обеспечивая максимальную пропускную способность с соблюдением требований к качеству связи.

  • GetMostRobustWaveformId(uint32_t& wfId, uint32_t burstLength = SHORT_BURST_LENGTH) const

Находит наиболее надежную (robust) волновую форму из доступных.

  • выполняет поиск среди форм с указанной длиной пакета той, которая имеет наименьший размер полезной нагрузки в байтах; 

  • при успешном поиске возвращает true и записывает идентификатор в wfId, иначе false

  • ConvertToModCod(uint32_t modulatedBits, uint32_t codingRateNumerator, uint32_t codingRateDenominator) const

Вспомогательный метод для преобразования числовых параметров модуляции и кодирования в перечисление SatModcod_t.

  • анализирует количество модулированных битов (1 для BPSK, 2 для QPSK, 3 для 8PSK, 4 для 16QAM) и значения числителя/знаменателя скорости кодирования; 

  • возвращает соответствующий элемент перечисления или вызывает ошибку, если комбинация параметров не поддерживается стандартом. 

  • GetWaveform(uint32_t wfId) const

Возвращает указатель на объект SatWaveform с заданным идентификатором.

  • проверяет, попадает ли запрашиваемый идентификатор в диапазон между минимальным и максимальным доступными ID

  • возвращает объект из внутреннего ассоциативного массива или вызывает ошибку, если ID не найден. 

  • GetDefaultWaveformId() const

Возвращает идентификатор волновой формы, которая должна использоваться по умолчанию (когда ACM отключен).

  • Dump(...)

Выводит в консоль подробную информацию о всех загруженных волновых формах.  Аргументы метода:

  • carrierBandwidthInHz (полоса пропускания несущей); 

  • symbolRateInBaud (символьная скорость). 

Для каждой волновой формы выводит её ID, параметры модуляции и кодирования, размер полезной нагрузки, длительность, требования к Eb/N0, длительность пакета, пропускную способность и спектральную эффективность.

  • GetModCod(uint32_t wfId) const

Возвращает значение перечисления SatModcod_t для волновой формы с указанным идентификатором.

  • IsAcmEnabled() const: 

Возвращает true, если адаптивное кодирование и модуляция включены, иначе false.

  • GetSupportedBurstLengths() const

Возвращает константную ссылку на вектор, содержащий поддерживаемые длины пакетов (в символах).

  • GetDefaultBurstLength() const

Возвращает длину пакета в символах для волновой формы по умолчанию.

  • GetMinWfId()

Возвращает минимальный идентификатор доступной волновой формы.

  • GetMaxWfId()

Возвращает максимальный идентификатор доступной волновой формы.

6.17.6 Класс SatLowerLayerServiceConf

Класс SatLowerLayerServiceConf предназначен для конфигурации служб нижнего уровня (Lower Layer Services) в стандартах спутниковой связи DVBRCS/DVBRCS2. Он управляет параметрами для двух основных категорий служб:

  • службы с выделенным доступом (DA — Dedicated Assignment); 

  • службы с произвольным доступом (RA — Random Access). 

Для DA служб класс определяет параметры статического и динамического распределения ресурсов, такие как разрешение на постоянное назначение (CRA), запрос по скорости (RBDC), запрос по объему (VBDC), а также минимальные и максимальные скорости и размер буфера. Для RA служб он настраивает параметры протоколов множественного доступа (Slotted Aloha, CRDSA, ESSA), включая алгоритмы выдержки (backoff), вероятности отказа, пороги нагрузки и количество реплик пакетов.

Описание полей

У данного класса есть публичные поля, но все они являются статическими константами:

static const uint8_t m_minDaServiceEntries = 2;

static const uint8_t m_minRaServiceEntries = 1;

static const uint8_t m_maxDaServiceEntries = 4;

static const uint8_t m_maxRaServiceEntries = 3;

Описание атрибутов

  • DaServiceCount (UintegerValue, по умолчанию: 4): 

количество служб с выделенным доступом (DA), используемых в конфигурации.

  • RaServiceCount (UintegerValue, по умолчанию: 1): 

количество служб с произвольным доступом (RA), используемых в конфигурации.

  • RaServiceDefault (UintegerValue, по умолчанию: 0): 

индекс службы RA, которая используется по умолчанию для несущих без явного присвоения службы.

  • DynamicRatePersistence (UintegerValue, по умолчанию: 5): 

значение сохранения динамической скорости для службы нижнего уровня.

  • VolumeBacklogPersistence (UintegerValue, по умолчанию: 7): 

значение сохранения объема накопленных данных для службы нижнего уровня.

  • DefaultControlRandomizationInterval (TimeValue, по умолчанию: 100ms): 

интервал рэндомизации управляющих сигналов по умолчанию.

  • DaService{N}_ConstantAssignmentProvided (BooleanValue): 

флаг, указывающий, предоставлено ли постоянное назначение ресурсов (CRA) для службы DA с индексом N.

  • DaService{N}_RbdcAllowed (BooleanValue): 

флаг, разрешающий запрос ресурсов на основе скорости (RBDC) для службы DA с индексом N.

  • DaService{N}_VolumeAllowed (BooleanValue)

флаг, разрешающий запрос ресурсов на основе объема (VBDC) для службы DA с индексом N.

  • DaService{N}_ConstantServiceRate (PointerValue)

поток случайной величины, задающий постоянную скорость обслуживания в Кбит/с для службы DA с индексом N.

  • DaService{N}_MaximumServiceRate (UintegerValue)

максимальная скорость обслуживания в Кбит/с для службы DA с индексом N.

  • DaService{N}_MinimumServiceRate (UintegerValue)

минимальная скорость обслуживания в Кбит/с для службы DA с индексом N.

  • DaService{N}_MaximumBacklogSize (UintegerValue): 

максимальный размер буфера данных в Кбайтах для службы DA с индексом N.

  • RaService{N}_MaximumUniquePayloadPerBlock (UintegerValue)

максимальное количество уникальных полезных нагрузок в одном блоке для службы RA с индексом N.

  • RaService{N}_MaximumConsecutiveBlockAccessed (UintegerValue)

максимальное количество последовательных блоков, к которым пользовательский терминал может получить доступ для службы RA с индексом N.

  • RaService{N}_MinimumIdleBlock (UintegerValue)

минимальное количество простаивающих блоков, требуемое между сеансами доступа для службы RA с индексом N.

  • RaService{N}_BackOffTimeInMilliSeconds (UintegerValue)

время выдержки (backoff) в миллисекундах перед повторной попыткой доступа для службы RA с индексом N.

  • RaService{N}_HighLoadBackOffTimeInMilliSeconds (UintegerValue): 

время выдержки в миллисекундах при высокой нагрузке сети для службы RA с индексом N.

  • RaService{N}_BackOffProbability (UintegerValue)

вероятность применения выдержки для службы RA с индексом N.

  • RaService{N}_HighLoadBackOffProbability (UintegerValue)

вероятность применения выдержки при высокой нагрузке для службы RA с индексом N.

  • RaService{N}_NumberOfInstances (UintegerValue)

количество экземпляров (реплик) сигнала для службы RA с индексом N (используется для протоколов типа CRDSA).

  • RaService{N}_AverageNormalizedOfferedLoadThreshold (DoubleValue)

порог среднего нормализованного предлагаемой нагрузки, используемый для переключения режимов доступа в службе RA с индексом N.

  • RaService{N}_SlottedAlohaAllowed (BooleanValue)

флаг, разрешающий использование протокола Slotted Aloha для службы RA с индексом N.

  • RaService{N}_CrdsaAllowed (BooleanValue): 

флаг, разрешающий использование протокола CRDSA для службы RA с индексом N.

  • RaService{N}_EssaAllowed (BooleanValue): 

флаг, разрешающий использование протокола ESSA для службы RA с индексом N.

Описание методов

  • GetTypeId(void)

статический метод для регистрации TypeId класса и всех его атрибутов в системе NS3. Использует макросы для автоматического добавления атрибутов для всех служб DA и RA.

  • GetInstanceTypeId(void) const

возвращает TypeId экземпляра объекта.

  • GetDaConstantAssignmentProvided(uint8_t index) const

возвращает true, если для службы DA с указанным индексом предоставлено постоянное назначение ресурсов (CRA).

  • SetDaConstantAssignmentProvided(uint8_t index, bool constAssignmentProvided): 

устанавливает флаг постоянного назначения ресурсов для службы DA с указанным индексом.

  • GetDaRbdcAllowed(uint8_t index) const: 

возвращает true, если для службы DA с указанным индексом разрешен запрос ресурсов на основе скорости (RBDC).

  • SetDaRbdcAllowed(uint8_t index, bool bdcAllowed)

устанавливает флаг разрешения RBDC для службы DA с указанным индексом.

  • GetDaVolumeAllowed(uint8_t index) const

возвращает true, если для службы DA с указанным индексом разрешен запрос ресурсов на основе объема (VBDC).

  • SetDaVolumeAllowed(uint8_t index, bool volumeAllowed)

устанавливает флаг разрешения VBDC для службы DA с указанным индексом.

  • GetDaConstantServiceRateInKbps(uint8_t index) const

возвращает постоянную скорость обслуживания в Кбит/с для службы DA с указанным индексом.

  • GetDaConstantServiceRateStream(uint8_t index) const

возвращает указатель на поток случайной величины (RandomVariableStream), используемый для генерации постоянной скорости службы DA.

  • SetDaConstantServiceRateStream(uint8_t index, Ptr constantServiceRateStream)

устанавливает поток случайной величины для определения постоянной скорости службы DA с указанным индексом.

  • GetDaMaximumServiceRateInKbps(uint8_t index) const

возвращает максимальную допустимую скорость обслуживания в Кбит/с для службы DA с указанным индексом.

  • SetDaMaximumServiceRateInKbps(uint8_t index, uint16_t maximumServiceRateKbps): 

устанавливает максимальную скорость обслуживания для службы DA с указанным индексом.

  • GetDaMinimumServiceRateInKbps(uint8_t index) const

возвращает минимальную гарантированную скорость обслуживания в Кбит/с для службы DA с указанным индексом.

  • SetDaMinimumServiceRateInKbps(uint8_t index, uint16_t minimumServiceRateKbps)

устанавливает минимальную скорость обслуживания для службы DA с указанным индексом.

  • GetDaMaximumBacklogInKbytes(uint8_t index) const

возвращает максимальный размер буфера в Кбайтах для службы DA с указанным индексом.

  • SetDaMaximumBacklogInKbytes(uint8_t index, uint16_t maximumBacklogInKbytes)

устанавливает максимальный размер буфера для службы DA с указанным индексом.

  • GetRaMaximumUniquePayloadPerBlock(uint8_t index) const

возвращает максимальное количество уникальных полезных нагрузок в блоке для службы RA с указанным индексом.

  • SetRaMaximumUniquePayloadPerBlock(uint8_t index, uint8_t uniquePayloadPerBlock)

устанавливает ограничение на количество уникальных полезных нагрузок для службы RA с указанным индексом.

  • GetRaMaximumConsecutiveBlockAccessed(uint8_t index) const

возвращает максимальное количество последовательных блоков, которые пользовательский терминал может занять для службы RA с указанным индексом.

  • SetRaMaximumConsecutiveBlockAccessed(uint8_t index, uint8_t consecutiveBlockAccessed)

устанавливает ограничение на количество последовательных блоков доступа для службы RA с указанным индексом.

  • GetRaMinimumIdleBlock(uint8_t index) const

возвращает требуемое минимальное количество простаивающих блоков между доступами для службы RA с указанным индексом.

  • SetRaMinimumIdleBlock(uint8_t index, uint8_t minimumIdleBlock)

устанавливает требуемое минимальное количество простаивающих блоков для службы RA с указанным индексом.

  • GetRaBackOffTimeInMilliSeconds(uint8_t index) const

возвращает базовое время выдержки в миллисекундах для службы RA с указанным индексом.

  • SetRaBackOffTimeInMilliSeconds(uint8_t index, uint16_t backOffTimeInMilliSeconds): 

устанавливает базовое время выдержки для службы RA с указанным индексом.

  • GetRaHighLoadBackOffTimeInMilliSeconds(uint8_t index) const

возвращает время выдержки в миллисекундах, применяемое при высокой нагрузке сети, для службы RA с указанным индексом.

  • SetRaHighLoadBackOffTimeInMilliSeconds(uint8_t index, uint16_t backOffTimeInMilliSeconds)

устанавливает время выдержки для высокой нагрузки для службы RA с указанным индексом.

  • GetRaBackOffProbability(uint8_t index) const

возвращает вероятность применения механизма выдержки для службы RA с указанным индексом.

  • SetRaBackOffProbability(uint8_t index, uint16_t backOffProbability)

устанавливает вероятность применения выдержки для службы RA с указанным индексом.

  • GetRaHighLoadBackOffProbability(uint8_t index) const

возвращает вероятность применения выдержки при высокой нагрузке для службы RA с указанным индексом.

  • SetRaHighLoadBackOffProbability(uint8_t index, uint16_t highLoadBackOffProbability)

устанавливает вероятность применения выдержки при высокой нагрузке для службы RA с указанным индексом.

  • GetRaNumberOfInstances(uint8_t index) const

возвращает количество экземпляров (реплик) передачи, используемых службой RA с указанным индексом.

  • SetRaNumberOfInstances(uint8_t index, uint8_t numberOfInstances)

устанавливает количество экземпляров (реплик) для службы RA с указанным индексом.

  • GetRaAverageNormalizedOfferedLoadThreshold(uint8_t index) const

возвращает пороговое значение нормализованной нагрузки, при котором изменяется поведение службы RA с указанным индексом.

  • SetRaAverageNormalizedOfferedLoadThreshold(uint8_t index, double averageNormalizedOfferedLoadThreshold)

устанавливает пороговое значение средней нормализованной предлагаемой нагрузки для службы RA с указанным индексом.

  • GetRaIsSlottedAlohaAllowed(uint8_t index) const

возвращает true, если для службы RA с указанным индексом разрешен протокол Slotted Aloha.

  • SetRaIsSlottedAlohaAllowed(uint8_t index, bool isSlottedAlohaAllowed)

устанавливает разрешение на использование протокола Slotted Aloha для службы RA с указанным индексом.

  • GetRaIsCrdsaAllowed(uint8_t index) const

возвращает true, если для службы RA с указанным индексом разрешен протокол CRDSA.

  • SetRaIsCrdsaAllowed(uint8_t index, bool isCrdsaAllowed)

устанавливает разрешение на использование протокола CRDSA для службы RA с указанным индексом.

  • GetRaIsEssaAllowed(uint8_t index) const

возвращает true, если для службы RA с указанным индексом разрешен протокол ESSA.

  • SetRaIsEssaAllowed(uint8_t index, bool isEssaAllowed)

устанавливает разрешение на использование протокола ESSA для службы RA с указанным индексом.

6.17.7 Класс SatBbFrameConf

Класс SatBbFrameConf реализует конфигурацию и управление параметрами BB-фреймов (Base Band Frames) для стандартов DVB-S2 и DVB-S2X. Он отвечает за создание и хранение доступных «волновых форм» (сочетаний модуляции и кодирования MODCOD с типом кадра), вычисление длительности фреймов и размера полезной нагрузки, а также предоставляет логику для адаптивного кодирования и модуляции (ACM), позволяя выбирать наиболее эффективный MODCOD на основе текущего соотношения несущая/шум (C/N0). Класс также управляет настройками, связанными с пилот-сигналами, заголовками фреймов и порогами заполнения.

Описание полей

Нет публичных полей.

Описание атрибутов

  • SymbolsPerSlot (UintegerValue, по умолчанию: 90): 

количество символов, содержащихся в одном временном слоте.

  • PilotBlockInSymbols (UintegerValue, по умолчанию: 36): 

размер пилот-блока в символах.

  • PilotBlockIntervalInSlots (UintegerValue, по умолчанию: 16): 

интервал между пилот-блоками, измеряемый в слотах.

  • PlHeaderInSlots (UintegerValue, по умолчанию: 1): 

размер заголовка физического уровня (PL Header) в слотах.

  • DummyFrameInSlots (UintegerValue, по умолчанию: 36): 

размер фиктивного кадра (Dummy Frame) в слотах.

  • TargetBLER (DoubleValue, по умолчанию: 0.00001): 

целевое значение коэффициента блочных ошибок (BLER).

  • AcmEnabled (BooleanValue, по умолчанию: false): 

флаг, включающий или отключающий функцию адаптивного кодирования и модуляции (ACM).

  • DefaultModCod (StringValue, по умолчанию: «QPSK_1_TO_2»): 

строковое представление схемы модуляции и кодирования (MODCOD), используемой по умолчанию.

  • DefaultModCodDummyFramesS2X (StringValue, по умолчанию: «QPSK_1_TO_4»): 

схема MODCOD по умолчанию для фиктивных кадров в стандарте DVB-S2X.

  • BbFrameHeaderInBytes (UintegerValue, по умолчанию: 10): 

размер заголовка BB-фрейма в байтах.

  • BbFrameHighOccupancyThreshold(DoubleValue, по умолчанию: 0.9): 

верхний порог заполнения BB-фрейма (значение от 0 до 1).

  • BbFrameLowOccupancyThreshold(DoubleValue, по умолчанию: 0.5): 

нижний порог заполнения BB-фрейма (значение от 0 до 1).

  • BBFrameUsageMode (EnumValue, по умолчанию: NormalFrames): 

режим использования BB-фреймов, определяющий, какие типы кадров (короткие, нормальные или оба) доступны.

  • BBFramePilotsS2X (BooleanValue, по умолчанию: true): 

флаг, указывающий на использование пилот-сигналов в BB-фреймах стандарта DVB-S2X.

  • ModCodsUsed (StringValue, по умолчанию: «»): 

строка со списком используемых схем MODCOD, разделенных пробелами. Если строка пуста, используются все доступные схемы.

Описание методов

  • SatBbFrameConf(double symbolRate, SatEnums::DvbVersion_t dvbVersion)

Основной конструктор класса. Принимает символьную скорость и версию стандарта DVB.

  • инициализирует внутренние параметры и загружает значения атрибутов; 

  • заполняет таблицы количества слотов для коротких и нормальных фреймов в зависимости от модуляции; 

  • формирует список используемых схем MODCOD на основе атрибута ModCodsUsed или выбирает все доступные для указанной версии DVB; 

  • создает объекты волновых форм (SatDvbS2Waveform) для каждой комбинации MODCOD и типа фрейма, вычисляя их полезную нагрузку и длительность; 

  • определяет наиболее устойчивые (robust) схемы MODCOD для коротких и нормальных фреймов; 

  • выполняет проверку корректности конфигурации, например, совпадения наиболее устойчивых MODCOD при использовании смешанного режима. 

  • InitializeCNoRequirements(Ptr linkResults)

Метод для инициализации требований к соотношению несущая/шум (C/N0). Принимает указатель на результаты моделирования линии связи.

  • проходит по всем созданным волновым формам; 

  • для каждой формы получает требуемое Es/N0 из результатов линка для целевого BLER

  • преобразует Es/N0 в C/N0, используя формулу: C/N0 = Es ⋅ symbolRate/N0 ; 

  • устанавливает вычисленное значение C/N0 для соответствующей волновой формы. 

  • GetBestModcod(double cNo, SatEnums::SatBbFrameType_t frameType)

Метод выбора наилучшей схемы MODCOD на основе текущего качества канала.

  • если ACM отключен, возвращает схему MODCOD по умолчанию; 

  • перебирает волновые формы в обратном порядке (от наиболее спектрально-эффективных к менее эффективным); 

  • возвращает первую схему MODCOD, требование к C/N0 которой не превышает текущее значение C/N0; 

  • если подходящая схема не найдена, возвращает схему по умолчанию. 

  • CalculateBbFramePayloadBits(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType)

Приватный метод вычисления размера полезной нагрузки фрейма в битах.

  • определяет количество информационных слотов на основе типа фрейма и количества модулируемых битов на символ;

  • вычисляет полезную нагрузку как произведение количества слотов, символов в слоте, модулируемых битов и скорости кодирования.

  • CalculateBbFrameDuration(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType)

Приватный метод вычисления длительности BB-фрейма.

  • определяет количество слотов с данными и добавляет слоты под заголовок PL

  • вычисляет общее количество символов данных; 

  • рассчитывает количество пилот-символов на основе интервала между пилот-блоками; 

  • суммирует символы данных и пилот-символы, затем делит на символьную скорость для получения времени в секундах. 

  • GetModCodsList()

Приватный метод для парсинга списка схем MODCOD.

  • если строка m_modCodsUsedStr пуста, загружает полный список доступных MODCOD для выбранной версии DVB (S2 или S2X) из перечислений; 

  • если строка не пуста, разбивает её на части по пробелам и конвертирует строковые имена в перечисления SatModcod_t, добавляя соответствующие префиксы и суффиксы в зависимости от версии DVB и настроек пилотов; 

  • сортирует полученный список по возрастанию. 

  • GetBbFrameDuration(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType)

Метод получения длительности фрейма для заданных MODCOD и типа.

  • обращается к ассоциативному массиву волновых форм m_waveforms по ключу, состоящему из пары MODCOD и типа фрейма; 

  • возвращает значение m_frameDuration из найденного объекта волновой формы. 

  • GetBbFramePayloadBits(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType)

Метод получения размера полезной нагрузки фрейма в битах.

  • ищет соответствующую волновую форму во внутреннем ассоциативном массиве; 

  • возвращает значение m_payloadBits

  • GetDummyBbFrameDuration()

Метод получения длительности фиктивного кадра. Вычисляет время на основе размера фиктивного кадра в слотах, количества символов в слоте и символьной скорости.

  • GetMostRobustModcod(SatEnums::SatBbFrameType_t frameType)

Метод получения наиболее устойчивой (robust) схемы MODCOD для указанного типа фрейма. Возвращает предварительно вычисленное значение m_mostRobustShortFrameModcod или m_mostRobustNormalFrameModcod в зависимости от аргумента.

  • GetDefaultModCod()

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

  • GetDefaultModCodDummyFramesS2X()

Метод-геттер для получения схемы MODCOD, используемой для фиктивных кадров в стандарте DVB-S2X.

  • GetDvbVersion()

Метод для определения используемой версии стандарта DVB (S2 или S2X).

  • GetModCodsUsed()

Метод для получения списка используемых схем MODCOD.

  • DumpWaveforms()

Метод для вывода (для отладки) детальной информации обо всех сконфигурированных волновых формах в стандартный поток вывода.

6.18 Классы помощники

При разработке сценариев симуляции в NS-3, большую помощь оказывают вспомогательные классыпомощники (helper classes), поскольку позволяют до поры до времени не углубляться в изучение тонких настроек моделей. Они помогают сделать код лаконичным и высокоуровневым, что в конечном итоге экономит массу времени. Модуль Satellite, следуя данному подходу, предлагает набор иерархических вспомогательных классовпомощников для формирования сцены эксперимента при моделировании. Эти классы позволяют учитывать такие параметры, как масштаб сцены (количество лучей), число пользовательских терминалов (UT), технология доступа к наземной сети, количество оконечных пользователей и запущенные на них приложения.

Иерархия помощников показана на рисунке 6.1.  

Рисунок 6.1: Иерархия помощников модуля Satellite

Рисунок 6.1: Иерархия помощников модуля Satellite

Исходный код хелперов находится отдельно от кода модели, а именно в директории: ~/workspace_ns3.43/ns-3.43/contrib/satellite/helper 

6.18.1 Класс SimulationHelper 

Единственная цель этого класса — облегчить создание сценариев спутниковой связи с помощью простых вызовов функций, которые позволяют определить, например, используемые лучи, количество пользователей, метеорологические данные, параметры сбора статистики и отдельные группы настроек. Всё, что остаётся сделать пользователю после вызова SimulationHelper, — это установить приложения на созданные узлы. Структура данного вспомогательного класса представлена на рисунке 6.1. Методы SimulationHelper позволяют настраивать большинство ключевых групп атрибутов через простые вызовы функций. В то же время, при использовании SimulationHelper сохраняется возможность тонкой настройки параметров в стиле NS-3, а именно через вызовы функций Config::SetDefault(…) и Object::SetAttribute(…). Класс SimulationHelper наследник ns3::Object. Он управляет жизненным циклом симуляции: от создания топологии (спутник, шлюзы, пользовательские терминалы) и настройки параметров физического и MAC уровней (ACM, ARQ, произвольный доступ) до сбора статистики и управления выводом результатов.

Описание полей

Нет публичных полей.

Описание атрибутов

Класс не декларирует пользовательских NS-3 атрибутов. Все внутренние параметры конфигурации задаются программно через Config::SetDefault внутри методов инициализации или передаются через аргументы конструктора.

Описание методов

Методы класса можно разделить на несколько логических групп по их назначению.

1. Инициализация и создание сценария

  • SimulationHelper(std::string simulationName)

Основной конструктор. Принимает имя симуляции, устанавливает параметры по умолчанию для NCC (Network Control Center), конфигурацию суперкадров (Superframe) и включает по умолчанию RBDC (Rate-Based Dynamic Capacity).

  • SetDefaultValues()

Устанавливает «безопасный» набор значений по умолчанию для всей симуляции. Отключает замирания (fading), настраивает частотные полосы, включает эмуляцию ошибок канала, задает параметры фреймов и включает ACM (Adaptive Coding and Modulation).

  • CreateSatScenario(SatHelper::PreDefinedScenario_t scenario, ...)

Метод создания топологию спутниковой сети. Он настраивает путь к выходным данным, проверяет наличие конфигурации Beam Hopping (переключения лучей), создает основной объект SatHelper и парсит папку со сценой для развертывания топологии.

2. Конфигурация топологии (пользователи и терминалы)

  • SetUtCountPerBeam(...)

Набор перегруженных методов для установки количества пользовательских терминалов (UT) на луч. Можно задать фиксированное число или использовать случайную величину (RandomVariableStream) как для всех лучей, так и для конкретного beamId.

  • SetUserCountPerUt(...) и SetUserCountPerMobileUt(...)

Устанавливают количество пользователей, подключенных к одному терминалу (стационарному или мобильному).

  • SetGwUserCount(uint32_t gwUserCount)

Задает количество пользователей, подключенных к шлюзу.

  • SetCommonUtPositionAllocator(...) и SetUtPositionAllocatorForBeam(...): 

Позволяют задать аллокатор позиций для размещения терминалов на карте. Можно задать общее правило или индивидуальное для конкретного луча.

  • EnableUtListPositionsFromInputFile(...)

Включает режим чтения координат терминалов из внешнего файла.

3. Управление параметрами симуляции

  • SetSimulationTime(double seconds)

Задает длительность симуляции.

  • SetOutputPath(std::string path) и SetOutputTag(std::string tag)

Определяют директорию для сохранения результатов и тег (метку) текущего запуска для организации файлов.

  • AddDefaultUiArguments(CommandLine& cmd, ...)

Добавляет стандартные аргументы командной строки (например, путь к выходному или входному XML-файлу) для парсинга параметров запуска.

4. Конфигурация MAC и PHY уровней (канал, доступ, модуляция)

  • SetErrorModel(...) и SetInterferenceModel(..): 

Настраивают модели ошибок (например, AVI, Constant) и модели помех (Per packet, Constant) на физическом уровне.

  • EnableAcm(...) DisableAcm(..): 

Включают или отключают адаптивное кодирование и модуляцию (ACM) для прямого (Forward) и обратного (Return) каналов.

  • EnableArq(SatEnums::SatLinkDir_t dir)

Включает механизм ARQ (Automatic Repeat reQuest) для повышения надежности доставки данных. Настраивает размеры окон, таймеры и количество повторных попыток передачи.

  • SetIdealPhyParameterization()

Переводит физический уровень в «идеальный» режим (отключает ошибки, помехи и замирания) для отладки или теоретических расчетов.

5. Настройка произвольного доступа (Random Access)

  • DisableRandomAccess()

Полностью отключает механизмы произвольного доступа.

  • EnableSlottedAloha()

Включает протокол Slotted ALOHA для произвольного доступа.

  • EnableCrdsa()

Включает протокол CRDSA (Contention Resolution Diversity Slotted ALOHA).

  • EnableRandomAccess()

Базовый метод, настраивающий общие параметры для произвольного доступа (модель помех, устранение коллизий, динамический контроль нагрузки и т.д.).

6. Назначение ресурсов (Capacity Assignment)

Эти методы управляют тем, как спутник выделяет ресурсы терминалам:

  • DisableAllCapacityAssignmentCategories()

Сбрасывает все настройки назначения ресурсов.

  • EnableOnlyConstantRate(uint32_t rcIndex, double rateKbps)

Включает CRA (Constant Rate Assignment) — выделение фиксированной скорости.

  • EnableOnlyRbdc(uint32_t rcIndex)

Включает RBDC (Rate-Based Dynamic Capacity) — динамическое выделение скорости на основе запросов.

  • EnableOnlyVbdc(uint32_t rcIndex)

Включает VBDC (Volume-Based Dynamic Capacity) — выделение объема данных.

  • EnableFca() DisableFca(): 

Управляют FCA (Free Capacity Assignment) — назначением свободной емкости.

  • EnablePeriodicalControlSlots(Time periodicity)

Настраивает периодические управляющие слоты.

7. Настройка трассировки и статистики

  • CreateDefaultStats()

Создает контейнер статистики и добавляет стандартные сборщики данных.

  • CreateDefaultFwdLinkStats() и CreateDefaultRtnLinkStats(): 

Добавляют детализированные метрики для прямого и обратного каналов соответственно: пропускная способность (throughput), задержка (delay), SINR, ошибки пакетов, загрузка фреймов.

  • GetStatisticsContainer()

Возвращает указатель на контейнер статистики, тип SatStatsHelperContainer (подраздел 6.18.10) для добавления пользовательских метрик.

  • EnableOutputTraces()

Включает вывод детальных трасс уровня PHY (SINR, мощность сигнала, затухание) в файлы.

  • EnableExternalFadingInputTrace()

Позволяет загрузить внешние трассы затухания из файлов вместо использования генераторов NS-3.

8. Специфичные настройки и утилиты

  • ConfigureFrequencyBands()

Задает частоты и полосы пропускания для фидерных (Feeder) и пользовательских (User) линков.

  • ConfigureLinkBudget()

Настраивает параметры бюджета линии (усиление антенн, мощность передатчика, температура шумов, потери) для спутника, шлюза и терминала.

  • ConfigureFwdLinkBeamHopping()

Включает и настраивает технологию переключения лучей (Beam Hopping) на прямой линии.

  • GetTrafficHelper(), GetGroupHelper(), GetCnoHelper()

Геттеры, возвращающие (и создающие при необходимости) вспомогательные объекты для генерации трафика, группировки пользователей и оценки C/N0.

  • ProgressCb(): 

Callbackфункция, вызываемая периодически для вывода прогресса симуляции в консоль.

6.18.2 Класс SatHelper

Класс SatHelper является основным вспомогательным классом, который берет на себя всю сложность взаимодействия с вложенными хелперами, описанными ниже. Этот класс поддерживает генерацию сценариев трех типов: модель с одним спотовым лучом, полная эталонная модель, а также произвольное подмножество полной эталонной модели (с задаваемым пользователем количеством лучей). При этом создание любого сценария всегда соответствует параметризованной эталонной системе. Описание атрибутов SatHelper приведено в одноименном подразделе. Класс SatHelper (наследник ns3::Object) является основным классом-конструктором топологии спутниковой сети в модуле Satellite. Его главная задача — создание и связывание всех узлов сети (спутников, шлюзов GW, пользовательских терминалов UT) на основе конфигурационных файлов и параметров сценария. Он отвечает за чтение топологических данных (положение спутников, лучи, шлюзы), создание соответствующих узлов, установку мобильности (геостационарные орбиты, SGP4(«Упрощенная модель общих возмущений 4» стандартный математический алгоритм для быстрого и точного прогнозирования положения и скорости спутников на околоземной орбите) для созвездий, трассы мобильности), установку сетевого стека и настройку маршрутизации (включая межспутниковые связи ISL). SatHelper поддерживает как простые сценарии с одним спутником, так и сложные созвездия (LEO/MEO) с ретрансляцией на сетевом уровне.

Описание полей

Нет публичных полей.

Описание атрибутов

Атрибуты класса задаются через систему TypeId и позволяют настраивать поведение хелпера через конфигурацию NS-3 или аргументы командной строки.

1. Сетевая конфигурация (IP-адресация)

  • BeamNetworkAddress (Ipv4Address, по умолчанию: 40.1.0.0): 

Начальный адрес сети для распределения адресов спутниковым устройствам (UT/GW). Используется вместе с маской BeamNetworkMask.

  • BeamNetworkMask (Ipv4Mask, по умолчанию: 255.255.0.0): 

  • GwNetworkAddress (Ipv4Address, по умолчанию: 90.1.0.0): 

Маска подсети для устройств в луче. Начальный адрес сети для шлюзов (GW), маршрутизаторов и пользователей шлюза.

  • GwNetworkMask (Ipv4Mask, по умолчанию: 255.255.0.0): 

Маска подсети для сети шлюза.

  • UtNetworkAddress (Ipv4Address, по умолчанию: 10.1.0.0): 

Начальный адрес сети для пользовательских терминалов (UT) и их пользователей.

  • UtNetworkMask (Ipv4Mask, по умолчанию: 255.255.0.0): 

Маска подсети для сети UT.

2. Количество узлов (топология)

  • UtCount(uint32_t, по умолчанию: 3): 

Количество терминалов UT, создаваемых в каждом луче в полных (full) сценах.

  • UtUsers(uint32_t, по умолчанию: 3): 

Количество пользователей, создаваемых для каждого UT.

  • GwUsers(uint32_t, по умолчанию: 5): 

Количество пользователей, создаваемых для каждого GW.

3. Управление поведением и логированием

  • HandoversEnabled(Boolean, по умолчанию: false)

Если включено (true), разрешает хэндоверы (передачу обслуживания) для всех UT и GW. Если выключено — только для движущихся UT.

  • PacketTraceEnabled(Boolean, по умолчанию: false): 

Включает трассировку пакетов на уровне PHY/MAC.

  • ScenarioCreationTraceEnabled(Boolean, по умолчанию: false): 

Включает вывод базовых логов процесса создания сценария в файл.

  • DetailedScenarioCreationTraceEnabled(Boolean, по умолчанию: false): 

Включает детальный вывод логов создания (включая внутренние компоненты).

  • ScenarioCreationTraceFileName(String, по умолчанию: «CreationTraceScenario»): 

Имя файла для логов создания сценария.

  • UtCreationTraceFileName(String, по умолчанию: «CreationTraceUt»): 

Имя файла для логов создания UT.

4. Источники трассировки (Trace sources)

  • Creation

Выводит детальную информацию о каждом шаге создания узла.

  • CreationSummary

Выводит сводную информацию о созданном сценарии.

Описание методов

Методы класса можно разделить на группы по их функционалу: создание сценария, управление мобильностью, настройка маршрутизации и инициализация.

1. Инициализация и конструкторы

  • SatHelper(std::string scenarioPath)

Основной конструктор. Принимает путь к папке с конфигурацией сцены.

  • инициализирует объект класса SatConf для чтения конфигурации лучей и волновых форм; 

  • проверяет наличие файлов орбит (TLE для созвездий или статические позиции); 

  • создает SatBeamHelper и SatUserHelper

  • если обнаружены файлы TLE, загружает топологию созвездия. 

  • LoadConstellationTopology(...)

Загружает данные о созвездии: двухстрочные элементы орбиты (TLE) из файлов и список межспутниковых линий (ISL).

2. Создание топологии сети

Это основная группа методов, создающих узлы и устанавливающих соединения.

  • CreatePredefinedScenario(PreDefinedScenario_t scenario)

Фабричный метод для создания одной из встроенных сцен: SIMPLE (минимальный набор), LARGER (несколько лучей) или FULL (все доступные лучи).

  • CreateUserDefinedScenario(BeamUserInfoMap_t& infos)

Создает сцену на основе карты, предоставленной пользователем, где указаны ID лучей, количество UT и пользователей для каждого.

  • CreateUserDefinedScenarioFromListPositions(...)

Аналогичен предыдущему, но позволяет жестко задать координаты UT из входного файла, с возможностью проверки принадлежности позиции лучу.

  • LoadConstellationScenario(...)

Специфичный метод для созвездий. Распределяет UT по ближайшим спутникам и лучам на основе их географических координат, а не жесткой привязки.

  • DoCreateScenario(BeamUserInfoMap_t& beamInfos, uint32_t gwUsers)

Главный метод реализации, вызываемый всеми методами создания выше. Выполняет следующие действия:

  • создает узлы GW и устанавливает их мобильность; 

  • для каждого луча в запросе создает узлы UT, устанавливает их мобильность и добавляет пользователей; 

  • вызывает m_beamHelper->Install для создания и установки спутниковых NetDevice (моделей PHY/MAC) на GW и UT, а также для подключения их к соответствующему спутнику; 

  • если включен режим созвездия, устанавливает ISL (межспутниковые линии) и маршрутизацию между ними; 

  • если стандарт LORA, устанавливает стек LoRaWAN

  • инициализирует m_beamHelper->Init()

3. Управление мобильностью (Mobility)

Методы для назначения моделей движения узлам.

  • SetGwMobility(NodeContainer gwNodes)

Устанавливает стационарную мобильность (SatConstantPositionMobilityModel) для шлюзов на основе координат из конфигурации. Также устанавливает наблюдатели мобильности.

  • SetUtMobility(NodeContainer uts, uint32_t satId, uint32_t beamId)

Устанавливает мобильность для UT. Использует аллокатор позиций (лучевой, список или пользовательский) для размещения UT внутри зоны покрытия луча. Устанавливает SatConstantPositionMobilityModel (если UT не мобильный).

  • SetSatMobility(Ptr node)

Устанавливает стационарное положение для спутника (для GEO).

  • SetSatMobility(Ptr node, std::string tle)

Устанавливает модель мобильности SatSGP4MobilityModel для спутника, используя TLE данные (для LEO/MEO созвездий).

  • LoadMobileUTsFromFolder(...)

Загружает подвижные UT из трасс-файлов в указанной папке. Создает узлы с SatTracedMobilityModel (движение по заданному треку).

  • InstallMobilityObserver(uint32_t satId, NodeContainer nodes)

Агрегирует объект-наблюдатель SatMobilityObserver с узлами. Наблюдатель необходим для расчета параметров канала (например, задержки распространения, углов визирования) в реальном времени симуляции.

4. Настройка маршрутизации и адресации

  • SetMulticastGroupRoutes(...)

Настраивает multicastмаршрутизацию. Определяет, через какие устройства и узлы должен проходить трафик multicastгруппы, исходящей от заданного отправителя к получателям. Взаимодействует с SatBeamHelper для добавления маршрутов на уровне спутниковой сети.

  • SetBeamRoutingConstellations()

Специфичный метод для созвездий. Заполняет таблицы маршрутизации для распределения трафика от GW к UT через динамически изменяющуюся топологию спутников.

  • SetGwAddressInUts()

В созвездиях UT должны знать MAC-адрес текущего обслуживающего GW. Этот метод обновляет этот адрес в MAC-слое всех UT.

  • GetUserAddress(Ptr node)

Вспомогательный метод для получения IP-адреса узла.

5. Конфигурация и утилиты

  • SetGroupHelper(Ptr groupHelper)

Устанавливает хелпер для группировки пользователей (используется для управления доступом или статистикой по группам).

  • SetAntennaGainPatterns(Ptr ...)

Устанавливает контейнер с диаграммами усиления антенн спутника.

  • SetCustomUtPositionAllocator(Ptr ...)

Позволяет переопределить стандартный аллокатор позиций для UT на пользовательский (например, для точного размещения в определенных точках).

  • GetBeamHelper(), GetUserHelper(), GetGroupHelper()

Геттеры для доступа к соответствующим вспомогательным объектам.

6. Трассировка и логирование (Traces)

  • EnableCreationTraces()

Включает вывод логов процесса создания топологии в текстовый файл.

  • EnableDetailedCreationTraces()

Включает более детальные трассы создания, включая логи от m_userHelper и m_beamHelper.

  • EnablePacketTrace()

Делегирует вызов в m_beamHelper для включения трассировки пакетов на уровне PHY/MAC.

7. Поддержка LoRa (LoRaWAN)

Методы внутри DoCreateScenario() проверяют тип выбранного стандарта. Если выбран стандарт LORA выполняется специфичная логика:

  • генерация адресов LoraDeviceAddress; 

  • установка LoraNetworkServer и LoraForwarder на узлы GW

6.18.3 Класс SatTrafficHelper

Класс SatTrafficHelper является вспомогательным инструментом для создания и управления сетевым трафиком в симуляциях спутниковой связи. Он упрощает процесс установки различных генераторов трафика (таких как CBR, OnOff, HTTP, LoRa) на узлы пользовательских терминалов и шлюзов, а также обеспечивает автоматическую настройку сбора статистических данных о производительности сети, таких как пропускная способность и задержки пакетов.

Описание полей

Нет публичных полей.

Описание атрибутов

  • enableDefaultStatistics(Boolean, по умолчанию: true): 

флаг, управляющий включением вывода значений из вспомогательных классов статистики.

Описание методов

  • SatTrafficHelper(Ptr satHelper, Ptr satStatsHelperContainer)

Основной конструктор класса. Принимает указатели на основной помощник симуляции и контейнер статистики.

  • инициализирует указатель на SatHelper для доступа к конфигурации сети; 

  • инициализирует указатель на SatStatsHelperContainer для сбора метрик; 

  • устанавливает значение флага m_enableDefaultStatistics в false

  • AddLoraPeriodicTraffic(...)

Метод для создания периодического трафика LoRa на узлах пользовательских терминалов.

  • принимает параметры интервала отправки, размера пакета, контейнера узлов пользовательских терминалов, времени старта и остановки, а также начальной задержки; 

  • создает и устанавливает приложения типа LoraPeriodicSender на указанных узлах; 

  • имеет перегруженную версию с аргументом percentage, позволяющую установить приложение только на заданный процент узлов в контейнере. 

  • AddLoraCbrTraffic(...)

Метод для создания CBR-трафика (постоянной скорости передачи) от пользователей пользовательских терминалов к пользователям шлюза.

  • принимает параметры интервала, размера пакета, контейнеры пользователей шлюза и пользовательских терминалов, временные параметры старта, остановки и задержки; 

  • использует помощники CbrHelper и PacketSinkHelper для настройки отправителей и приемников трафика по протоколу UDP

  • имеет перегруженную версию с аргументом percentage для фильтрации узлов-отправителей. 

  • AddCbrTraffic(...)

Метод для создания стандартного CBR-трафика с возможностью выбора направления (прямое/обратное) и транспортного протокола (TCP/UDP).

  • принимает направление (RTN_LINK или FWD_LINK), тип протокола, интервал, размер пакета, контейнеры узлов шлюза и пользовательских терминалов, а также временные параметры; 

  • устанавливает приложения отправки (CbrHelper) на стороне источника и приложения-приемники (PacketSinkHelper) на стороне назначения в зависимости от выбранного направления; 

  • если флаг m_enableDefaultStatistics установлен в true, автоматически добавляет задачи для сбора статистики пропускной способности (глобальной, на пользовательские терминалы и на шлюзы); 

  • имеет перегруженную версию с аргументом percentage для частичной установки на узлы. 

  • AddOnOffTraffic(...)

Метод для создания OnOff-трафика, который чередует периоды активности и простоя.

  • принимает направление, тип протокола, скорость передачи данных, размер пакета, строковые шаблоны для распределения времени On и Off, контейнеры узлов и временные параметры; 

  • использует SatOnOffHelper для генерации трафика с переменной интенсивностью и настраивает приемники пакетов; 

  • поддерживает автоматическую активацию сбора статистики пропускной способности аналогично методу AddCbrTraffic, если включен соответствующий флаг; 

  • имеет перегруженную версию с аргументом percentage для выбора подмножества узлов. 

  • AddHttpTraffic(...)

Метод для создания HTTP-трафика, моделирующего веб-сессии.

  • принимает направление передачи, контейнеры узлов шлюза и пользовательских терминалов, время старта, остановки и задержку; 

  • использует ThreeGppHttpHelper для установки серверных и клиентских HTTP-приложений, конфигурируя их в соответствии с направлением трафика; 

  • при активированном флаге m_enableDefaultStatistics настраивает сбор статистики времени прохождения пакета (PLT ) и пропускной способности для различных уровней сети (глобально, на пользовательские терминалы и шлюзы). 

6.18.4 Класс SatBeamHelper

SatBeamHelper вспомогательный класс в отвечающий за создание и конфигурацию топологии отдельного спутникового луча. Он выступает в роли «оркестратора», связывающего шлюзы (GW), спутники и пользовательские терминалы (UT).

  • отвечает за создание и настройку каналов связи, включая фидерные и пользовательские линии; 

  • управляет установкой сетевых устройств и конфигурацией протоколов уровня MAC, PHY и LLC

  • поддерживает различные стандарты связи (DVB-S2, LoRa), режимы регенерации спутника, настройку межспутниковых линий (ISL) и маршрутизацию трафика. 

Описание полей

Нет публичных полей.

Описание атрибутов

  • CarrierFrequencyConverter(Callback, по умолчанию: пусто): 

обратный вызов для конвертации идентификатора несущей в частоту генерации.

  • FadingModel(Enum, по умолчанию: FADING_MARKOV): 

модель замираний сигнала (отключена, трассировка или марковская).

  • RandomAccessModel(Enum, по умолчанию: RA_MODEL_OFF): 

модель произвольного доступа (Slotted ALOHA, CRDSA и др.).

  • RaInterferenceModel(Enum, по умолчанию: IF_CONSTANT): 

модель помех для произвольного доступа.

  • RaInterferenceEliminationModel(Enum, по умолчанию: SIC_PERFECT): 

модель устранения помех для произвольного доступа.

  • RaCollisionModel( Enum, по умолчанию: RA_COLLISION_CHECK_AGAINST_SINR): 

модель обработки коллизий при произвольном доступе.

  • RaConstantErrorRate(Double, по умолчанию: 0.0): 

постоянная вероятность ошибки для модели произвольного доступа.

  • PropagationDelayModel(Enum, по умолчанию: PD_CONSTANT_SPEED): 

модель задержки распространения сигнала.

  • ConstantPropagationDelay(Time, по умолчанию: 130 мс): 

значение фиксированной задержки распространения.

  • PrintDetailedInformationToCreationTraces(Boolean, по умолчанию: true): 

флаг, определяющий вывод ли подробной информации в трассы создания.

  • CtrlMsgStoreTimeInFwdLink(Time, по умолчанию: 10 секунд): 

время хранения управляющих сообщений в контейнере для прямого канала.

  • CtrlMsgStoreTimeInRtnLink(Time, по умолчанию: 10 секунд): 

время хранения управляющих сообщений в контейнере для обратного канала.

  • EnableFwdLinkBeamHopping(Boolean, по умолчанию: false): 

флаг включения скачкообразного перемещения луча в прямом канале.

  • EnableTracesOnUserReturnLink(Boolean, по умолчанию: false): 

флаг использования файлов трассировок на пользовательском обратном канале.

  • DvbVersion(Enum, по умолчанию: DVB_S2): 

версия стандарта DVB (S2 или S2X).

  • ReturnLinkLinkResults(Enum, по умолчанию: LR_RCS2): 

протокол для результатов обратного канала.

Описание методов

  • SatBeamHelper(...)

Основной конструктор класса.

  • инициализирует вспомогательные объекты для спутника, шлюза и пользовательских терминалов в зависимости от стандарта (DVB или LORA); 

  • создает контейнеры каналов для пользовательской и фидерной связи; 

  • настраивает параметры произвольного доступа, контроллер NCC (Network Control Center) и результаты каналов связи (Link Results); 

  • создает конфигурации замираний и контроллер BSTP, если это необходимо. 

  • DoDispose()

Метод освобождения ресурсов.

  • очищает ассоциативному массивы лучей, узлов шлюзов и пользовательских терминалов; 

  • обнуляет указатели на каналы, конфигурации и вспомогательные объекты. 

  • Init()

Метод инициализации. Выполняет инициализацию контроллера BSTP (Bent Pipe Streaming Protocol), если эта функция включена.

  • SetAntennaGainPatterns( Ptr antennaPatterns): 

Устанавливает контейнер с диаграммами усиления антенн для спутника.

  • SetChannelAttribute(std::string n1, const AttributeValue& v1): 

Устанавливает атрибуты для фабрики каналов связи.

  • SetNccRoutingCallback(SatNcc::UpdateRoutingCallback cb): 

Устанавливает обратный вызов для обновления маршрутизации в NCC.

  • Install(...): 

Основной метод установки топологии луча.

  • регистрирует соответствие между идентификаторами спутника/луча и шлюза; 

  • получает или создает каналы для фидерной и пользовательской связи на основе частотных идентификаторов; 

  • присоединяет каналы к устройству спутника через SatOrbiterHelper

  • устанавливает устройства шлюза и пользовательских терминалов, используя методы InstallFeeder и InstallUser

  • настраивает наблюдение тайминга и замираний для узлов пользовательских терминалов; 

  • возвращает пару, содержащую сетевое устройство шлюза и контейнер сетевых устройств пользовательских терминалов. 

  • InstallFeeder(...): 

Метод установки оборудования на стороне шлюза (фидерная линия).

  • сохраняет узел шлюза и устанавливает контейнер замираний, если это необходимо; 

  • вызывает метод Install() у GwHelper для создания сетевого устройства шлюза; 

  • вычисляет максимальный размер BB-фрейма и добавляет луч в контроллер NCC с необходимыми обратными вызовами; 

  • устанавливает адреса спутника на уровнях MAC и LLC шлюза, если используется регенеративный режим. 

  • InstallUser(...): 

Метод установки оборудования на стороне пользовательских терминалов (пользовательская линия).

  • вызывает метод Install() у UtHelper для создания сетевых устройств пользовательских терминалов; 

  • устанавливает адреса спутника в MAC и LLC уровнях пользовательских терминалов, если используется регенеративный режим. 

  • InstallIsls(): 

Метод установки межспутниковых линий (ISL).

  • создает вспомогательный объект PointToPointIslHelper

  • перебирает список пар спутников и устанавливает point-to-point соединения между ними; 

  • привязывает созданные устройства ISL к соответствующим сетевым устройствам спутников. 

  • SetIslRoutes(): 

Метод настройки маршрутизации для межспутниковых линий. Делегирует настройку маршрутов объекту OrbiterHelper.

  • AddMulticastGroupRoutes(...): 

Настраивает маршрутизацию для групповой рассылки (multicast).

  • проверяет корректность адресов группы; 

  • определяет шлюзы, обслуживающие исходный и принимающие лучи; 

  • добавляет маршруты от исходного луча к принимающим лучам и наоборот через IP-маршрутизаторы шлюзов; 

  • настраивает маршрутизацию на самих пользовательских терминалах. 

  • EnableCreationTraces(Ptr stream, CallbackBase& cb): 

Включает трассировку процесса создания объектов.

  • подключает обратный вызов к источнику трассировки «Creation»; 

  • включает аналогичные трассировки во вложенных вспомогательных классах. 

  • EnablePacketTrace(): 

Включает трассировку пакетов.

  • создает объект SatPacketTrace

  • подключает обратные вызовы к трассировочным источникам на уровнях NetDevice, LLC, MAC и PHY для всех узлов в симуляции. 

Конфигурирование интерференции

Используемые модели помех настраиваются в Helpers с помощью атрибутов. Модель помех для DA может быть настроена для каждого канала с помощью следующих атрибутов. Атрибуты помех представлены в tab-interference.  Модель помех для случайного доступа может быть настроена на системном уровне (влияет только на обратный канал) с помощью атрибута ns3::SatBeamHelper::RaInterferenceModel. Возможные модели для настройки:

  • Constant 

  • Trace 

  • PerPacket (по пакетам) 

  • PerFragment 

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

  • идеальная компенсация помех: 

помехи, создаваемые декодированным пакетом/фрагментом, удаляются из всех других пакетов/фрагментов, которым он создаёт помехи (поведение по умолчанию); 

  • устранение остаточных помех: 

при удалении влияния декодированного пакета/фрагмента на другие пакеты/фрагменты, которым он создаёт помехи, остаётся остаточная мощность.  Метод устранения помех выбирается установкой атрибута RaInterferenceEliminationModel класса SatBeamHelper.

6.18.5 Класс SatOrbiterHelper

Класс SatOrbiterHelper -  вспомогательный, предназначенный для создания и настройки объектов SatOrbiterNetDevice (сетевых устройств спутников). Он отвечает за формирование полного стека протоколов для спутниковых узлов, включая создание и конфигурирование уровней PHY, MAC и LLC как для фидерной линии (связь со шлюзом), так и для пользовательской линии (связь с пользовательскими терминалами). Класс поддерживает различные режимы регенерации сигнала (прозрачный, на уровне PHY, на уровне Link, на уровне Network), что позволяет моделировать как простые ретрансляторы, так и спутники с бортовой обработкой и коммутацией. Кроме того, хелпер управляет настройкой моделей помех, моделей ошибок, планировщиков и маршрутизации по межспутниковым линиям связи (ISL).

Описание полей

Нет публичных полей.

Описание атрибутов

  • DaFwdLinkInterferenceModel ( EnumValue SatPhyRxCarrierConf::InterferenceModel, по умолчанию: IF_CONSTANT): 

модель помех для режима выделенного доступа на прямой линии.

  • DaRtnLinkInterferenceModel ( EnumValue SatPhyRxCarrierConf::InterferenceModel, по умолчанию: IF_PER_PACKET): 

модель помех для режима выделенного доступа на обратной линии.

  • FwdLinkErrorModel (EnumValue SatPhyRxCarrierConf::ErrorModel, по умолчанию: EM_NONE): 

модель ошибок для фидерной линии прямой передачи.

  • FwdLinkConstantErrorRate (DoubleValue, по умолчанию: 0.0): 

постоянная вероятность ошибки на фидерной линии прямой передачи.

  • RtnLinkErrorModel(EnumValue SatPhyRxCarrierConf::ErrorModel, по умолчанию: EM_NONE): 

модель ошибок для пользовательской линии обратной передачи.

  • RtnLinkConstantErrorRate(DoubleValue, по умолчанию: 0.0): 

постоянная вероятность ошибки на пользовательской линии обратной передачи.

  • IslArbiterType (EnumValue SatEnums::IslArbiterType_t, по умолчанию: SatEnums::UNICAST): 

тип арбитра, используемого для маршрутизации пакетов по межспутниковым линиям связи.

  • Creation (TracedCallback): 

источник трассировки для отслеживания событий создания объектов.

Описание методов

  • GetTypeId()

возвращает идентификатор TypeId, зарегистрированный для этого класса.

  • GetInstanceTypeId(): 

возвращает идентификатор TypeId для данного экземпляра объекта.

  • SatOrbiterHelper(...)

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

  • Initialize(...)

инициализирует вспомогательный класс, используя результаты моделирования линий связи (если выбрана модель ошибок AVI) для настройки параметров BB-фреймов и символьных скоростей.

  • SetDeviceAttribute(...)

устанавливает значение указанного атрибута, которое будет применено к каждому объекту NetDevice, созданному хелпером.

  • SetUserPhyAttribute(...)

устанавливает значение атрибута по умолчанию для каждого физического уровня (PHY) пользовательской линии, созданного хелпером.

  • SetFeederPhyAttribute(...)

устанавливает значение атрибута по умолчанию для каждого физического уровня (PHY) фидерной линии, созданного хелпером.

  • InstallAllOrbiters()

создает и устанавливает сетевые устройства на всех узлах-спутниках, полученных из одного объекта топологии.

  • Install(...)

создает объект SatOrbiterNetDevice с заданными атрибутами, выделяет для него MAC-адрес, привязывает к указанному узлу и регистрирует в маппере идентификаторов.

  • Install(std::string aName)

находит узел по заданному имени и вызывает метод установки устройства для него.

  • AttachChannels(...)

основной метод присоединения каналов, который устанавливает режимы регенерации, идентификаторы спутника, шлюза и луча, а затем делегирует создание слоев методам AttachChannelsFeeder() и AttachChannelsUser().

  • AttachChannelsFeeder(...): 

конфигурирует и присоединяет фидерные каналы к устройству спутника:

  • создает параметры физического уровня и объект SatOrbiterFeederPhy

  • устанавливает антенные диаграммы направленности; 

  • в зависимости от максимального режима регенерации создает слои MAC и LLC (для режимов Link и Network), управляет совместным использованием MAC между лучами одного шлюза; 

  • соединяет коллбэки приема и передачи между PHY, MAC, LLC и NetDevice

  • добавляет созданные слои в глобальную топологию. 

  • AttachChannelsUser(...)

конфигурирует и присоединяет пользовательские каналы к устройству спутника:

  • создает параметры физического уровня и объект SatOrbiterUserPhy

  • устанавливает антенные диаграммы направленности; 

  • в зависимости от режима регенерации создает слои MAC и LLC (для режимов Link и Network); 

  • соединяет коллбэки приема и передачи между PHY, MAC, LLC и NetDevice

  • добавляет созданные слои в глобальную топологию. 

  • EnableCreationTraces(...)

подключает указанный поток вывода и коллбэк к источнику трассировки «Creation» для записи событий создания.

  • SetIslRoutes(...)

настраивает маршрутизацию по межспутниковым линиям связи, создавая и устанавливая арбитры (например, Unicast) на основе переданного списка ISL.

6.18.6 Класс SatGwHelper

Класс SatGwHelper -  абстрактный вспомогательный, предназначенный для создания и настройки объектов сетевых устройств для шлюзов (GW). Он отвечает за инициализацию параметров физического уровня, каналов и управления доступом к среде для шлюза, включая конфигурирование BB-фреймов, моделей ошибок и помех. Класс предоставляет базовую функциональность для установки устройств на узлы, а конкретная реализация установки на отдельный узел должна быть обеспечена производными классами. Он также управляет настройками для произвольного доступа и выбором алгоритма планирования прямой линии.

Описание полей

Нет публичных полей.

Описание атрибутов

  • DaRtnLinkInterferenceModel ( EnumValue SatPhyRxCarrierConf::InterferenceModel, по умолчанию: IF_PER_PACKET): 

модель помех для режима выделенного доступа на обратной линии связи.

  • RtnLinkErrorModel (EnumValue SatPhyRxCarrierConf::ErrorModel, по умолчанию: EM_AVI): 

модель ошибок для обратной линии.

  • FwdSchedulingAlgorithm (EnumValue SatEnums::FwdSchedulingAlgorithm_t, по умолчанию: NO_TIME_SLICING): 

алгоритм планирования, используемый для заполнения BB-фреймов (например, с нарезкой по времени или без).

  • RtnLinkConstantErrorRate (DoubleValue, по умолчанию: 0.01): 

постоянная вероятность ошибки на обратной линии.

  • EnableChannelEstimationError (BooleanValue, по умолчанию: true): 

включает или выключает моделирование ошибки оценки канала в приемнике шлюза на обратной линии.

  • Creation (TracedCallback): 

источник трассировки для отслеживания событий создания объектов.

Описание методов

  • GetTypeId()

возвращает идентификатор TypeId, зарегистрированный для этого класса.

  • GetInstanceTypeId()

возвращает идентификатор TypeId для данного экземпляра объекта.

  • SatGwHelper()

конструктор по умолчанию, который не поддерживается и вызывает фатальную ошибку при вызове.

  • SatGwHelper(...)

основной конструктор, принимающий коллбэк конвертера полосы пропускания, количество несущих обратной линии, указатель на последовательность суперфреймов, коллбэки для управления (чтение, резервирование, отправка) и структуру настроек произвольного доступа. Инициализирует фабрики для создания устройств и каналов.

  • Initialize(...)

инициализирует хелпер на основе результатов моделирования линий связи, версии DVB и флага использования SCPC.

  • настраивает параметры BB-фрейма (например, количество слотов под заголовок PL) в зависимости от выбранного алгоритма планирования; 

  • вычисляет символьную скорость на основе конвертера полосы пропускания; 

  • создает объект конфигурации BB-фреймов и сохраняет ссылки на результаты моделирования линий (DVB-RCS2 или DVB-S2/S2X), если используется модель ошибок AVI. 

  • GetBbFrameConf()

возвращает указатель на объект конфигурации BB-фрейма, созданный внутри хелпера.

  • SetDeviceAttribute(...): 

устанавливает значение указанного атрибута, которое будет применено к каждому объекту NetDevice, созданному хелпером.

  • SetChannelAttribute(...): 

устанавливает значение указанного атрибута, которое будет применено к каждому объекту Channel, созданному хелпером.

  • SetPhyAttribute(...): 

устанавливает значение атрибута по умолчанию для физического уровня шлюза (ns3::SatGwPhy).

  • Install(NodeContainer c, ...): 

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

  • Install(Ptr n, ...): 

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

  • EnableCreationTraces(...): 

подключает указанный поток вывода и коллбэк к источнику трассировки «Creation» для записи событий создания.

6.18.7 Класс SatUtHelper

SatUtHelper — это абстрактный вспомогательный класс, предназначенный для создания и настройки объектов сетевых устройств для пользовательских терминалов (UT). Он отвечает за конфигурирование параметров физического уровня, каналов и управления доступом к среде для терминалов, включая настройку моделей ошибок и помех. Класс предоставляет базовую функциональность для инициализации и установки устройств в контейнеры узлов, а конкретная реализация установки на отдельный узел должна быть обеспечена производными классами. Он также управляет настройками для произвольного доступа и служб нижнего уровня.

Описание полей

Нет публичных полей.

Описание атрибутов

  • DaFwdLinkInterferenceModel ( EnumValue SatPhyRxCarrierConf::InterferenceModel, по умолчанию: IF_CONSTANT): 

модель помех для режима выделенного доступа на прямой линии.

  • FwdLinkErrorModel (EnumValue SatPhyRxCarrierConf::ErrorModel, по умолчанию: EM_AVI): 

модель ошибок на прямой линии.

  • FwdLinkConstantErrorRate (DoubleValue, по умолчанию: 0.01): 

постоянная вероятность ошибки на прямой линии.

  • LowerLayerServiceConf (PointerValue, по умолчанию: 0): 

указатель на конфигурацию служб нижнего уровня.

  • EnableChannelEstimationError (BooleanValue, по умолчанию: true): 

включает или выключает моделирование ошибки оценки канала в приемнике пользовательского терминала.

  • UseCrdsaOnlyForControlPackets (BooleanValue, по умолчанию: false): 

определяет, используется ли метод CRDSA только для управляющих пакетов (true) или также для пользовательских данных (false).

  • AsynchronousReturnAccess (BooleanValue, по умолчанию: false): 

определяет использование асинхронных методов доступа на обратном канале.

  • Creation (TracedCallback)

источник трассировки для отслеживания событий создания объектов.

Описание методов

  • GetTypeId()

возвращает идентификатор TypeId, зарегистрированный для этого класса.

  • GetInstanceTypeId()

возвращает идентификатор TypeId для данного экземпляра объекта.

  • SatUtHelper(): 

конструктор по умолчанию, который не поддерживается и вызывает фатальную ошибку при вызове.

  • SatUtHelper(...): 

основной конструктор, принимающий коллбэк конвертера полосы пропускания, количество несущих, указатель на последовательность суперфреймов, коллбэки для управления (чтение, резервирование, отправка) и структуру настроек произвольного доступа. Инициализирует фабрики для создания устройств и каналов, а также создает объект конфигурации сервиса нижнего уровня.

  • Initialize(Ptr lrFwd): 

инициализирует хелпер на основе результатов моделирования линий прямой связи. Сохраняет ссылку на результаты линий (DVB-S2 или DVBS2X), если настроена модель ошибок AVI.

  • SetDeviceAttribute(...): 

устанавливает значение указанного атрибута, которое будет применено к каждому объекту NetDevice, созданному хелпером.

  • SetChannelAttribute(...): 

устанавливает значение указанного атрибута, которое будет применено к каждому объекту Channel, созданному хелпером.

  • SetPhyAttribute(...): 

устанавливает значение атрибута по умолчанию для физического уровня пользовательского терминала (ns3::SatUtPhy).

  • Install(NodeContainer c, ...): 

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

  • Install(Ptr n, ...): 

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

  • EnableCreationTraces(...): 

подключает указанный поток вывода и коллбэк к источнику трассировки «Creation» для записи событий создания.

6.18.8 Класс SatUserHelper

SatUserHelper — это вспомогательный класс, предназначенный для создания и настройки сетей конечных пользователей, подключенных к пользовательским терминалам и шлюзам. Он управляет установкой сетевых устройств (CSMA или упрощенные спутниковые устройства), назначением IP-адресов, а также настройкой статической маршрутизации и ARP-кэшей для обеспечения корректной связи между пользователями и спутниковой инфраструктурой. Класс также обрабатывает динамическое обновление маршрутов и ARP-таблиц на шлюзах и пользовательских терминалах во время хендовера (смены луча или шлюза).

Описание полей

Нет публичных полей.

Описание атрибутов

  • BackboneNetworkType (EnumValue, по умолчанию: NETWORK_TYPE_SAT_SIMPLE): 

тип сети (CSMA или SatSimple), используемой между шлюзом (или маршрутизатором) и пользователями в операторской сети.

  • SubscriberNetworkType (EnumValue, по умолчанию: NETWORK_TYPE_CSMA): 

тип сети, используемой между пользовательскими терминалами и их пользователями в пользовательской сети.

  • PropagationDelayGetter (CallbackValue): 

коллбэк для получения моделей задержки распространения сигнала на основе идентификаторов спутника и луча.

  • Creation (TracedCallback): 

источник трассировки для отслеживания событий создания объектов.

Описание методов

  • GetTypeId(): 

возвращает идентификатор TypeId, зарегистрированный для этого класса.

  • GetInstanceTypeId(): 

возвращает идентификатор TypeId для данного экземпляра объекта.

  • SatUserHelper(): 

конструктор по умолчанию.

  • ~SatUserHelper(): 

деструктор.

  • SetCsmaQueue(...): 

устанавливает тип и атрибуты очереди для CSMA устройств, создаваемых хелпером.

  • SetCsmaDeviceAttribute(...): 

устанавливает значение атрибута, которое будет применено к каждому CSMA устройству, созданному хелпером.

  • SetCsmaChannelAttribute(...): 

устанавливает значение атрибута, которое будет применено к каждому каналу CSMA, созданному хелпером.

  • SetUtBaseAddress(...): 

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

  • SetGwBaseAddress(...): 

задает базовый сетевой адрес, маску и начальный адрес для IP-адресации сети между шлюзами (и маршрутизатором) и пользователями.

  • SetBeamBaseAddress(...): 

задает базовый сетевой адрес, маску и начальный адрес для IP-адресации самого спутникового луча (между шлюзом и пользовательскими терминалами).

  • InstallUt(NodeContainer ut, uint32_t userCount): 

устанавливает указанное количество пользователей для каждого пользовательского терминала в контейнере. Создает узлы пользователей, устанавливает на них стек протоколов IP, подключает их к терминалам через пользовательскую сеть (CSMA или SatSimple) и настраивает маршрутизацию.

  • InstallUt(Ptr ut, uint32_t userCount): 

устанавливает указанное количество пользователей для конкретного пользовательского терминала. Создает узлы пользователей, настраивает сетевые устройства и IP-адресацию, а также устанавливает маршруты по умолчанию через терминал.

  • InstallGw(uint32_t userCount): 

устанавливает пользователей для шлюза. 

  • если используется несколько шлюзов, создается узел-маршрутизатор для связи с пользователями; 

  • настраивает IP-адресацию и маршрутизацию между пользователями и маршрутизатором/шлюзом. 

  • IsGwUser(Ptr node): 

проверяет, является ли указанный узел пользователем, подключенным к шлюзу.

  • EnableCreationTraces(...): 

подключает указанный поток вывода и коллбэк к источнику трассировки «Creation» для записи событий создания.

  • InstallRouter(Ptr<Node> router): 

устанавливает маршрутизатор, связывающий несколько шлюзов с сетью пользователей. Создает каналы связи между шлюзами и маршрутизатором, настраивает IP-адреса и добавляет необходимые маршруты в таблицы маршрутизации шлюзов и маршрутизатора.

  • InstallSubscriberNetwork(const NodeContainer& c): 

устанавливает сетевое соединение пользовательской сети (между пользовательским терминалом и пользователями) в зависимости от настроенного типа сети (CSMA или SatSimple).

  • InstallBackboneNetwork(const NodeContainer& c): 

устанавливает сетевое соединение магистральной сети (между шлюзом/маршрутизатором и пользователями) в зависимости от настроенного типа сети.

  • InstallSatSimpleNetwork(const NodeContainer& c): 

создает простую сеть с общим каналом (SatSimpleChannel) и подключает к нему устройства всех узлов в контейнере.

  • GetRouterInfo(): 

возвращает строку с информацией об узле-маршрутизаторе, включая его сетевые устройства и IP-адреса.

  • GetRouter(): 

возвращает указатель на узел-маршрутизатор.

  • PopulateBeamRoutings(...): 

    • настраивает IPмаршрутизацию и ARP-кэши для спутникового луча; 

    • принимает контейнеры пользовательских терминалов и их устройств, узел шлюза и его устройство; 

    • назначает IPадреса для спутниковых интерфейсов, создает ARP-записи, связывающие IP и MAC-адреса терминалов и шлюза, и устанавливает на терминалах маршруты по умолчанию. 

  • UpdateUtRoutes(...): 

обновляет маршрут по умолчанию и ARP-кэш на пользовательском терминале при хендовере. Принимает MAC-адреса терминала и нового шлюза. Изменяет ARP-запись шлюза на терминале, обновляет маршрут по умолчанию и инициирует наблюдение за таймингом (timing advance) относительно нового шлюза.

  • UpdateGwRoutes(...): 

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

6.18.9 Класс SatStatsHelper

Класс SatStatsHelper является родительским абстрактным классом для всех помощников статистики (statistics helpers) в модуле Satellite. Он обеспечивает структуру для создания, настройки и соединения компонентов сбора данных, таких как зонды (probes), сборщики (collectors) и агрегаторы (aggregators). Класс определяет общие параметры для вывода статистики, включая идентификаторы для категоризации данных (например, по шлюзам, лучам или пользовательским терминалам) и формат выходных файлов (например, скалярные файлы, графики рассеяния, PDF). Он скрывает сложность логики топологии спутниковой сети, предоставляя дочерним классам защищенные методы для получения идентификаторов и сетевых устройств различных узлов.

Описание полей

Нет публичных полей.

Описание атрибутов

  • Name (String, по умолчанию: «stat»):

cтрока, добавляемая в начало имени каждого выходного файла статистики.

  • IdentifierType (Enum, по умолчанию: IDENTIFIER_GLOBAL):

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

  • OutputType (Enum, по умолчанию: OUTPUT_SCATTER_FILE):

определяет тип и формат вывода статистики (например, скалярный файл, файл рассеяния, гистограмма, PDF, CDF или соответствующие графики).

Описание методов

  • GetIdentifierTypeName(IdentifierType_t identifierType)

статический метод, возвращающий строковое представление указанного типа идентификатора.

  • GetOutputTypeName(OutputType_t outputType)

статический метод, возвращающий строковое представление указанного типа вывода.

  • SatStatsHelper(Ptr satHelper)

конструктор класса, принимающий указатель на экземпляр SatHelper для инициализации.

  • GetTypeId()

регистрирует атрибуты и типы системы для класса, позволяя настраивать параметры через систему атрибутов NS-3.

  • Install()

основной публичный метод для запуска процесса сбора статистики. Если тип вывода не OUTPUT_NONE, вызывает абстрактный метод DoInstall и устанавливает флаг m_isInstalled.

  • DoInstall()

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

  • SetName(std::string name)

задает имя экземпляра статистики, которое будет использоваться в именах файлов (заменяет пробелы и слэши на подчеркивания).

  • GetName()

возвращает текущее имя экземпляра статистики.

  • SetIdentifierType(IdentifierType_t identifierType)

задает тип идентификатора для категоризации данных; изменение невозможно после вызова метода Install.

  • GetIdentifierType()

возвращает текущий тип идентификатора.

  • SetOutputType(OutputType_t outputType)

задает тип формата вывода данных. Изменение невозможно после вызова метода Install.

  • GetOutputType()

возвращает текущий тип вывода.

  • IsInstalled()

возвращает логическое значение, указывающее, была ли выполнена установка статистики (true) или нет (false);

  • GetSatHelper()

возвращает указатель на используемый экземпляр SatHelper.

  • CreateAggregator(...)

создает и возвращает указатель на объект агрегатора данных (DataCollectionObject) заданного типа. Принимает тип агрегатора и до пяти дополнительных атрибутов для его настройки.

  • CreateCollectorPerIdentifier(CollectorMap& collectorMap)

создает экземпляры сборщиков для каждого идентификатора, найденного в симуляции, в соответствии с текущим типом идентификатора (m_identifierType), и сохраняет их в переданный ассоциативный массив. Возвращает количество созданных сборщиков.

  • GetOutputPath()

возвращает путь к директории для сохранения выходных файлов, полученный от синглтона переменных окружения.

  • GetOutputFileName()

формирует и возвращает полное имя файла (без расширения) путем объединения пути к директории и имени экземпляра.

  • GetIdentifierHeading(std::string dataLabel)

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

  • GetTimeHeading(std::string dataLabel)

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

  • GetDistributionHeading(std::string dataLabel)

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

  • GetUtUserId(Ptr utUserNode)

возвращает идентификатор пользователя пользовательского терминала, соответствующий заданному узлу, или 0, если идентификатор не найден.

  • GetUtId(Ptr utNode)

возвращает идентификатор пользовательского терминала, соответствующий заданному узлу, или 0, если идентификатор не найден.

  • GetGwId(Ptr gwNode)

возвращает идентификатор шлюза, соответствующий заданному узлу, или 0, если идентификатор не найден.

  • GetSatId(Ptr satNode)

возвращает идентификатор спутника, соответствующий заданному узлу, или 0, если идентификатор не найден.

  • GetIdentifierForUtUser(Ptr utUserNode)

возвращает числовой идентификатор для заданного узла пользователя пользовательского терминала в соответствии с текущим типом идентификатора (например, если тип — GW, то будет возвращен ID шлюза, к которому подключен UT).

  • GetIdentifierForUt(Ptr utNode)

возвращает числовой идентификатор для заданного узла пользовательского терминала в соответствии с текущим типом идентификатора.

  • GetIdentifierForBeam(uint32_t satId, uint32_t beamId)

возвращает числовой идентификатор для заданного луча (beam) спутника в соответствии с текущим типом идентификатора.

  • GetIdentifierForGroup(uint32_t groupId)

возвращает числовой идентификатор для заданной группы в соответствии с текущим типом идентификатора.

  • GetIdentifierForGw(Ptr gwNode)

возвращает идентификатор для заданного узла шлюза (обычно сам ID шлюза или 0 для глобального типа).

  • GetIdentifierForSat(Ptr satNode)

возвращает идентификатор для заданного узла спутника (обычно сам ID спутника или 0 для глобального типа).

  • GetIdentifierForIsl(Ptr satNodeSrc, Ptr satNodeDst)

возвращает составной идентификатор для межспутниковой линии связи (ISL) между двумя заданными узлами спутников.

  • GetGwSatNetDevice(Ptr gwNode)

статический метод, возвращающий контейнер сетевых устройств, относящихся к спутниковому соединению на узле шлюза.

  • GetUtSatNetDevice(Ptr utNode)

статический метод, возвращающий спутниковое сетевое устройство (SatNetDevice раздел 6.1) заданного узла пользовательского терминала. Предполагается, что это устройство №2 (после loopback и устройства пользовательской сети).

  • GetSatSatOrbiterNetDevice(Ptr satNode)

статический метод, возвращающий орбитальное сетевое устройство (SatOrbiterNetDevice) заданного узла спутника.

  • SaveAddressAndIdentifier(Ptr utNode)

    • сохраняет соответствие между MAC-адресом заданного узла пользовательского терминала и его идентификатором во внутреннем ассоциативном массиве m_identifierMap. 

    • обновляет соответствие между MAC-адресом и идентификатором для заданного узла пользовательского терминала, используется в сценариях с хэндовером. 

  • UpdateAddressAndIdentifier(Ptr utNode)

обновляет соответствие между MAC-адресом и идентификатором для заданного узла пользовательского терминала, используется в сценариях с хэндовером.

  • UpdateIdentifierOnProbes()

приватный виртуальный метод, предназначенный для обновления идентификаторов на пробниках (probes) при изменении топологии (например, хэндовер), в базовой реализации не выполняет действий.

6.18.10 Класс SatStatsHelperContainer

Класс SatStatsHelperContainer служит для централизованного управления созданием и конфигурацией вспомогательных объектов статистики в модуле Satellite. Он предоставляет унифицированный интерфейс для активации сбора разнообразных метрик производительности (задержка, джиттер, пропускная способность, SINR и др.) через систему атрибутов, поддерживая различные уровни детализации (глобально, на луч, на пользовательский терминал, на шлюз и т.д.). Класс также отвечает за подключение к MAC-слою пользовательских терминалов для отслеживания изменений их адресов и идентификаторов в динамической топологии сети.

Описание полей

Нет публичных полей.

Описание атрибутов

  • Name (String, по умолчанию: «stat«): 

строковый префикс, который добавляется в начало имени всех генерируемых файлов со статистикой. Остальные атрибуты класса представляют собой комбинации идентификаторов, направлений и метрик для включения соответствующих помощников сбора статистики. Они имеют тип EnumValue (по умолчанию: OUTPUT_NONE) и определяют формат вывода данных. Их можно разбить на следующие группы:

  • Группа атрибутов статистики задержки (Delay): 

включает атрибуты для управления выводом статистики задержки пакетов на различных уровнях (приложение AppDelay, устройство DevDelay, MAC MacDelay, PHY PhyDelay) и для различных линий связи (фидерная Feeder, пользовательская User) в прямом (Fwd) и обратном (Rtn) направлениях. Поддерживаемые области видимости: Global, PerGw, PerBeam, PerGroup, PerUt, PerUtUser, PerSat, а также усредненные значения (AverageBeam, AverageGroup, AverageUt, AverageSat). Допустимые типы вывода включают отсутствие вывода (NONE), скалярный файл (SCALAR_FILE), файл рассеяния (SCATTER_FILE) и различные графики распределений.

  • Группа атрибутов статистики джиттера (Jitter): 

аналогична группе задержки, управляет сбором данных о вариации задержки (джиттере) для уровней приложения, устройства, MAC, PHY и линий связи в обоих направлениях с теми же областями видимости и типами вывода.

  • Группа атрибутов статистики пропускной способности (Throughput): 

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

  • Группа атрибутов физического уровня и линий связи: 

включает атрибуты для сбора отношения сигнал/шум (LinkSinr), мощности приема (LinkRxPower) и используемого модкода (LinkModcod) для фидерной и пользовательской линии в обоих направлениях. Данные могут выводиться как в виде сырых значений (SCATTER_FILE), так и в виде распределений (HISTOGRAM_FILE, PDF_FILE, CDF_FILE).

  • Группа атрибутов очередей (Queue): 

предназначена для мониторинга размера очередей в байтах (QueueBytes) и в количестве пакетов (QueuePackets). Включает спецификацию для конкретных типов линий, таких как фидерная линия обратного канала (RtnFeeder) и пользовательская линия прямого канала (FwdUser).

  • Группа атрибутов ошибок и коллизий (PacketError, PacketCollision): 

управляет статистикой коэффициента ошибок пакетов для выделенного доступа (FwdDa, RtnDa) и методов произвольного доступа, таких как Slotted ALOHA, CRDSA и ESSA. Также включает статистику коллизий пакетов для протоколов произвольного доступа на фидерной и пользовательской линиях.

  • Группа атрибутов управления ресурсами: 

включает статистику запросов на емкость (CapacityRequest), предоставленных ресурсов (ResourcesGranted) и запросов на ресурсы от находящихся в backlog пакетов (BackloggedRequest), обычно выводимых в файл рассеяния для глобального уровня или уровня шлюза/луча.

  • Группа атрибутов нагрузки и использования фреймов: 

включает сбор данных о загрузке фрейма по символам (FrameSymbolLoad) и по количеству пользователей (FrameUserLoad), использовании волновых форм (WaveformUsage), типах используемых фреймов (FrameTypeUsage), скорости планировщика прямого канала (FwdLinkSchedulerSymbolRate) и загрузке окна обратного канала (RtnFeederWindowLoad).

Описание методов

  • SatStatsHelperContainer(Ptr satHelper)

Основной конструктор класса. Принимает указатель на основной вспомогательный объект спутника SatHelper (подраздел 6.18.2).

  • сохраняет переданный указатель на SatHelper во внутренний член m_satHelper

  • извлекает контейнер узлов пользовательских терминалов (UT) из одноэлементного объекта топологии; 

  • выполняет итерацию по узлам и устройствам пользовательских терминалов для поиска MAC-уровня (SatUtMac); 

  • устанавливает обратный вызов SetUpdateAddressAndIdentifierCallback на метод UpdateAddressAndIdentifier текущего экземпляра для каждого найденного MAC

  • DoDispose()

Приватный метод, вызываемый при уничтожении объекта для освобождения ресурсов.

  • GetTypeId()

Статический метод системы NS-3 для регистрации TypeId класса.

  • связывает уникальный идентификатор «ns3::SatStatsHelperContainer« с классом; 

  • добавляет атрибут Name для управления именем выходных файлов; 

  • использует макросы для массового добавления атрибутов статистики (задержка, джиттер, пропускная способность и др.) с соответствующими проверками типов Enum

  • SetName(...)

Сеттер для атрибута Name. Позволяет задать префикс имен файлов статистики.

  • GetName(): 

Геттер для атрибута Name. Возвращает текущий префикс имен файлов статистики.

  • UpdateAddressAndIdentifier(...)

Метод обратного вызова (callback), используемый для обновления внутреннего ассоциативного массива соответствия между адресами и идентификаторами узлов в вспомогательных объектах статистики.

  • Add[ StatName ](...)

Семейство методов, создаваемых макросами (например, AddFwdAppDelay, AddPerBeamThroughput). Каждый метод соответствует определенному типу статистики.

  • принимает тип вывода в качестве аргумента (SatStatsHelper::OutputType_t); 

  • проверяет, что тип вывода не равен NONE

  • создает экземпляр соответствующего класса-помощника (например, SatStatsDelayHelper) и настраивает его с использованием сохраненного объекта SatHelper и текущего префикса имени; 

  • вызывает метод InstallToAll или аналогичный для подключения трассировок симуляции к новому помощнику; 

  • сохраняет созданный помощник во внутреннем контейнере. 

Этой статьей мы закончили краткий обзор частоиспользуемых классов модуля Satellite. В следующей статье цикла мы обратим свое внимание на средства вывода результатов моделирования.

Работа выполнена в рамках Программы создания и развития центра НТИ на базе МФТИ, Физтех по направлению («сквозной» технологии) Национальной технологической инициативы «Перспективные технологии для космических систем и сервисов» при реализации комплексного научно-исследовательского и опытно-конструкторского проекта “Разработка комплексной среды моделирования и проектирования гибридных инфокоммуникационных сетей наземного, стратосферного и космического сегментов с использованием параметрического и структурного синтеза”.