Моделирование приемника GPS для наноспутников

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

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

Для нашей страны создание таких приемников является еще более актуальной задачей, ввиду ограничений на поставку приемников, работающих на больших высотах и на больших скоростях. Госдеп США не отличает баллистические ракеты от наноспутников для связи или ДЗЗ.

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

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

Проверять будем программный приемник prof. Akos, который мы использовали во многих предыдущий статьях. Для начала проверим приемник на обычной для Земли самолетной скорости. Для этого создадим на нашем облачном GPS-имитаторе файл с сигналом. Имитатор мы раньше подробно описывали здесь. Конфигурация имитатора задается JSON-файлом. Для упрощения уберем все лишнее:

{
  "Gps": {
    "Enable": true,
    "Snr_dbhz": 50
  },
  "JammingSources": [
  ],
  "Receiver_llh": [
    59,
    30,
    350
  ],
  "SpeedRx_m_s": [
    300,
    0,
    0
  ],
  "SamplesFreq_hz": 5000000,
  "Duration_s": 1,
  "Antennas_m": [
    [
      0,
      1,
      0
    ]
  ]
}

Уберем источники помех, оставим одну антенну. В файле конфигурации появился новый раздел SpeedRx_m_s. Описание этого раздела очень простое: это составляющие вектора скорости в метрах в секунду. Сначала, для проверки приемника, зададим скорость по одной из осей 300 метров в секунду. Нажмем «Generate GPS», подождем и получим файл с сигналом. Пропишем файл в код программного приемника (файл initSettings.m):

settings.fileName  = 'C:\Users\itsar\Downloads\iqdata_ant_0.bin';

Запускаем. Что же выдаст процедура обнаружения? Все в порядке, найдено много сигналов спутников.

image-loader.svg

Рассмотрим подробнее отладочную информацию приемника по спутнику со средним уровнем корреляции — номер 8. Все замечательно!

image-loader.svg

Теперь давайте увеличим скорость.

  "SpeedRx_m_s": [
    1000,
    0,
    0
  ],

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

Как видно, скорость 1000 метров в секунду приемнику нипочем.

image-loader.svg

Идем дальше, 7000 метров в секунду.

image-loader.svg

Здесь уже приемник плохо справляется. Поиск сигнала работает нормально, захват происходит и приемник начинает следить за сигналом, но петля слежения по задержке (Delay Locked Loop, DLL) не успевает следить за максимумом корреляции.

С коде приемника (файл initSettings.m) находим такие параметры:

%% Tracking loops settings ================================================
% Code tracking loop parameters
settings.dllDampingRatio         = 0.7;
settings.dllNoiseBandwidth       = 2;       %[Hz]
settings.dllCorrelatorSpacing    = 0.5;     %[chips]

% Carrier tracking loop parameters
settings.pllDampingRatio         = 0.7;
settings.pllNoiseBandwidth       = 25;      %[Hz]

Пробуем увеличить шумовую полосу в два раза, до четырех Герц.

settings.dllNoiseBandwidth       = 4;       %[Hz]

И видим, что приемник пришел в норму.

image-loader.svg

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

Вы можете проделать все это сами, не вставая из-за стола. Чистая математика.

© Habrahabr.ru