exponenta event banner

Генерация сигналов GPS

В этом примере показано, как генерировать унаследованные данные навигации (LNAV) Глобальной системы позиционирования (GPS), ее структуру кадра и сложную форму сигнала основной полосы частот. Расширение данных выполняется с помощью кода грубого обнаружения (C/A-код) и кода точности (P-код). Для проектирования навигационной системы на основе GPS требуется тестирование приемника принятым сигналом. Сигнал, принятый от спутника, не является полезным для этой цели, поскольку параметры передатчика и канала не могут контролироваться. Для тестирования приемника требуется форма сигнала, генерируемая при управляемом наборе параметров.

Структура кадров GPS

Получают биты данных GPS, которые передаются со скоростью 50 бит в секунду (бит/с). Примените расширение C/A-кода к сгенерированным данным. Этот C/A-код имеет скорость 1,023 мегапиксов в секунду. Поскольку один бит данных передается за каждые 0,02 секунд (50 бит/с), каждый бит данных расширяется с помощью 0,02 * 1,023 * 1e6 = 20460 чипов. Данные также расширяются с помощью P-кода. Этот P-код имеет скорость 10,23 мегапикселей в секунду, что подразумевает, что каждый бит данных расширяется с помощью 204600 чипов P-кода.

Данные GPS содержат различные параметры конфигурации, параметры синхронизации и параметры, относящиеся к местоположению спутникового аппарата (SV) в пространстве. Все эти параметры можно разделить на три широкие категории:

  • Параметры эфемериды

  • Параметры альманаха

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

Спутники GPS передают сигналы на двух частотах: L1 (1575,42 МГц) и L2 (1227,60 МГц). Оба сигнала генерируются с базовой частотой 10,23 МГц. Частота сигнала L1 равна 154 * 10,23 МГц = 1575,42 МГц, а частота сигнала L2 равна 120 * 10,23 МГц = 1227,60 МГц. Старые спутники GPS передают различные расширяющие коды и данные на L1 и L2 несущих частотах. Для получения более подробной информации см. таблицу IS-GPS-200L 3-III [1].

Существуют три вида расширения для устаревших GPS:

  • Расширение C/A-кода

  • Расширение P-кода

  • Расширение по Y-коду

Y-код недоступен для общего пользования. Поскольку Y-код является зашифрованной версией P-кода, P-код и Y-код используются вместе как P (Y) -код.

  • На L1 несущей частоте синфазный компонент несет P (Y) -код вместе с данными.

  • На L1 несущей частоте квадратурно-фазовый компонент несет C/A-код вместе с данными.

  • На L2 несущей частоте синфазный компонент содержит либо P (Y) -код с данными, P (Y) -код без данных, либо C/A-код с данными.

  • На L2 несущей частоте квадратурно-фазовая составляющая пуста.

Этот пример демонстрирует сигнал на несущей частоте L1, который содержит P-код на синфазной составляющей и C/A-код на квадратурной составляющей.

Спутники GPS передают данные в кадрах длиной 1500 бит, причем каждый кадр состоит из пяти подкадров по 300 бит в каждом подкадре. Поскольку скорость передачи данных составляет 50 бит/с, передача каждого подкадра занимает 6 секунд, а передача каждого кадра - 30 секунд. Каждый подкадр состоит из 10 слов с 30 битами в каждом слове. Данные GPS содержат информацию относительно часов и местоположения спутников. Для обеспечения возможности вычисления расстояния от спутника до приемника навигационные данные расширяются двумя типами кодов: C/A-кодом и P-кодом. C/A-код имеет частоту 1,023 МГц и повторяется после 1023 чипов. P-код имеет частоту 10,23 МГц и повторяется каждую неделю для данного спутника.

На этом рисунке показан устаревший кадр данных навигации (LNAV).

Субкадр 1 содержит информацию о типе кода (C/A или P) и наличии данных в канале L2. Субкадр 1 также обеспечивает информацию о тактовых сигналах на борту спутника.

Подкадры 2 и 3 содержат информацию о положении передающего КА в космосе через орбитальную информацию спутника. Эта орбитальная информация СВ называется эфемеридой.

Подкадры 4 и 5 содержат информацию о положении спутников GPS, которые в настоящее время работают, и дают оценку спутников, которые видны пользователю. Эта информация о положениях всех спутников в созвездии в совокупности называется альманахом. Эфемерис даёт точное положение СВ в пространстве, а альманах содержит менее точную информацию о положении всех СВ. Данные альманаха SV охватывают 25 кадров. Поскольку передача каждого кадра занимает 30 секунд, передача всего альманаха, охватывающего 25 кадры, занимает 12,5 минут.

Параметры конфигурации

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

ShowVisualizations =  true;
WriteWaveformToFile = false;

Укажите индекс псевдослучайного шума (PRN) спутника.

PRNIndex = 1;

Поскольку генерация сигнала GPS для всех навигационных данных занимает много времени и памяти, этот пример демонстрирует генерацию сигнала для одного бита навигационных данных. Генерация формы сигнала для количества битов данных GPS LNAV может управляться параметрами NavDataBitStartIndex и NavDataBitEndIndex.

NavDataBitStartIndex = 1321; % Set this value to 1 to generate waveform from the first bit of navigation data
NavDataBitEndIndex = 1321;   % Set this value to navigation data length to generate waveform till the last bit

Укажите кадры, для которых должна генерироваться унаследованная форма сигнала GPS.

FrameIndices = 1:25; % This value must be consecutive integers in the range [1, 25]

Генерация данных GPS

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

svparams.PRNIdx = PRNIndex;           % Current satellite PRN index
svparams.FrameIndices = FrameIndices;

Слово телеметрии (TLM) и слово передачи обслуживания (HOW)

В каждом подкадре слово 1 является словом TLM, а слово 2 - словом HOW. Как показано на этом рисунке, слово TLM содержит восьмиразрядную преамбулу, сообщение TLM, флаг состояния целостности и четность. Последние 6 битов каждого слова содержат четность. Эти паритетные биты вычислены на основе алгоритма, представленного в Столе IS-GPS-200L, 20-XIV [1].

svparams.TLMPreamble            = 139; % Decimal equivalent of [1 0 0 0 1 0 1 1]
svparams.TLMMessage             = 0;   % Contains information needed by the precise positioning service (PPS) user that is authorized user
svparams.TLMIntegrityStatusFlag = 0;   % Legacy level of integrity

На следующем рисунке показаны поля в разделе HOW. Первые 17 битов HOW указывают 17 старших битов (MSB) времени недели (TOW). TOW - это 19-битное число, и младший бит (LSB) TOW засекается каждые 1,5 секунды. TOW в HOW (который является 17 MSB полного TOW) отмечает каждые 6 секунд. То есть TOW в засечках HOW для каждого подкадра. Например, если значение TOW равно 1000 в текущем экземпляре, то через 1,5 секунды TOW равно 1001. Еще через 1,5 секунды TOW равен 1002 и так далее. Если рассматриваются 17 MSB TOW (который находится в HOW), то для каждых 4 клещей полного TOW, этот TOW-in-HOW клещи в течение одного раза. Поскольку каждый набор из 4 засечек в полном TOW соответствует 6 секундам, TOW-in-HOW засеивается каждые 6 секунд.

18-й бит в HOW является флагом аларма, который указывает, что точность пользовательского диапазона (URA) пользователя службы стандартного позиционирования (SPS) хуже, чем указано svparams.URAIndexи пользователь должен использовать текущий спутник на свой страх и риск. Бит 19 в HOW - флаг защиты от подделки. Если этот флаг установлен, то вместо передачи P-кода спутник передает Y-код. Биты 20-22 в HOW указывают ID субкадра. Последние два бита из 6 битов четности устанавливаются в нуль, и биты 23 и 24 решаются так, чтобы установить последние два бита четности в нуль.

svparams.HOWTOW = 2000;     % Decimal equivalent of 17 MSBs of TOW
svparams.HOWAlertFlag = 0;  % Alert flag
svparams.AntiSpoofFlag = 0; % Antispoof flag
svparams.SubframeID = 1;    % Subframe ID of starting subframe

Параметры часов, NMCT, ионосферы и UTC

Теоретически часы всех спутников должны быть синхронизированы, что подразумевает, что все спутниковые часы GPS должны показывать одинаковое время в данный момент времени. На практике существуют детерминированные характеристики ошибки синхронизации спутника смещения, дрейфа и старения, а также характеристики реализации спутника смещения групповой задержки и средней дифференциальной групповой задержки. Эти ошибки отклоняют спутниковые часы от системного времени GPS. Эти параметры синхронизации передаются в субкадре 1. Вместе с информацией о тактовых сигналах подкадр 1 также содержит различную информацию о конфигурации. Этот код инициализирует эти параметры. Подробное описание параметров в подкадре 1 см. в IS-GPS-200L [1].

svparams.WeekNumberMod1024 = 39; % Week number modulo 1024 to fit in 10 bits of data.
                                 % Same as in Almanac file
svparams.CodesOnL2Channel = 2;   % Value of 2 indicates C/A-code on L2 channel
                                 % Value of 1 indicates P code on L2 channel
svparams.DataFlagForL2P = 1;     % Value of 1 indicates nav data Off on P-code
                                 % of in-phase component of L2 channel
svparams.URAIdx = 0;             % User range accuracy (URA) index.
                                 % Refer IS-GPS-200L Section 20.3.3.3.1.3 [1]
svparams.SVHealth = 0;           % SV health
svparams.IODC = 0;               % Issue of data, clock (IODC)
svparams.T_GD = 0;               % Estimated group delay differential
svparams.t_oc = 0;               % Clock data reference time
svparams.a_f2 = 0;               % Second order clock correction coefficient
svparams.a_f1 = 0;               % First order clock correction coefficient
svparams.a_f0 = 0;               % Zeroth order clock correction coefficient

Кадр 13 подкадра 4 включает в себя поправки диапазона NMCT. Эти поправки дальности выполняются с использованием оценочных значений отклонения дальности (ERD) для каждого спутника. Способ сопоставления значений NMCT со значениями ERD определен в IS-GPS-200L [1].

svparams.NMCTAvailabilityIndicator - 2-разрядное целое значение, указывающее на доступность данных NMCT.

  • 0 - NMCT доступен как для пользователя службы точного позиционирования (PPS), так и для пользователя службы стандартного позиционирования (SPS)

  • 1 - NMCT доступен только авторизованным пользователям

  • 2 - Таблица поправок не доступна ни для одного пользователя

  • 3 - Зарезервировано для использования в будущем

svparams.NMCTAvailabilityIndicator = 0; % NMCT available to both PPS and SPS users

Код инициализирует значения ERD для конкретного спутника. Значения инициализируются как ноль. Допустимый диапазон: от -9.3 кому 9.3 метров. Каждый элемент массива указывает соответствующее значение ERD (то есть первый элемент ERD01, второй элемент ERD02 и так далее).

svparams.NMCTERD = zeros(30,1); % Units are in meters

Частотно-зависимая задержка вызвана распространением сигнала через ионосферу. Эта задержка является одной из существенных ошибок при вычислении точного времени. Чтобы компенсировать эту задержку из-за ионосферы, для точного позиционирования приемника необходимо использовать двухчастотные приемники. Для обеспечения грубой модели ионосферы и задержки, вызываемой ею для одночастотных приемников, GPS передает некоторые параметры данных GPS в субкадре 4. Эти параметры инициализируются следующим образом.

svparams.Ionosphere.alpha = zeros(4,1); % Units of each element in the array is seconds
svparams.Ionosphere.beta = zeros(4,1);  % Units of each element in the array is seconds

Подкадр 4 данных GPS LNAV содержит параметры для корреляции UTC со временем GPS. Этот код инициализирует эти параметры.

svparams.UTC.A_1 = 0;      % In seconds/second
svparams.UTC.A_0 = 0;      % In seconds
svparams.UTC.t_ot = 0;     % In seconds
svparams.UTC.WN_t = 39;    % In weeks. Same value as in almanac file
svparams.UTC.WN_LSF = 39;  % In weeks. Same value as in almanac file
svparams.UTC.Delt_LS = 0;  % In seconds
svparams.UTC.DN = 0;       % In days
svparams.UTC.Delt_LSF = 0  % In seconds
svparams = struct with fields:
                       PRNIdx: 1
                 FrameIndices: [1x25 double]
                  TLMPreamble: 139
                   TLMMessage: 0
       TLMIntegrityStatusFlag: 0
                       HOWTOW: 2000
                 HOWAlertFlag: 0
                AntiSpoofFlag: 0
                   SubframeID: 1
            WeekNumberMod1024: 39
             CodesOnL2Channel: 2
               DataFlagForL2P: 1
                       URAIdx: 0
                     SVHealth: 0
                         IODC: 0
                         T_GD: 0
                         t_oc: 0
                         a_f2: 0
                         a_f1: 0
                         a_f0: 0
    NMCTAvailabilityIndicator: 0
                      NMCTERD: [30x1 double]
                   Ionosphere: [1x1 struct]
                          UTC: [1x1 struct]

Просмотр структуры svparams.Ionosphere.

disp(svparams.Ionosphere)
    alpha: [4x1 double]
     beta: [4x1 double]

Просмотр структуры svparams.UTC.

disp(svparams.UTC)
         A_1: 0
         A_0: 0
        t_ot: 0
        WN_t: 39
      WN_LSF: 39
     Delt_LS: 0
          DN: 0
    Delt_LSF: 0

Данные эфемерид и альманаха

Спутники GPS вращаются вокруг Земли на эллиптической орбите, при этом Земля находится в одной из фокусных точек эллипса. Набор орбитальных параметров, точно определяющих положение спутника на этой эллиптической орбите, называется эфемеридой. Каждый спутник GPS передает свои собственные эфемеридные данные в подкадрах 2 и 3. На этом рисунке показаны три орбитальных параметра для спутника в стационарной системе координат Земли (ECEF). На этом рисунке не показан фактический спутник GPS, и рисунок приведен только для иллюстрации.

  • Длина основной оси, A: Расстояние от центра эллиптической орбиты спутника до апогея

  • Угол наклона: Угол между экваториальной плоскостью Земли и плоскостью орбиты спутника

  • Долгота восходящего узла, Λ: Угол между гринвичским меридианом и направлением восходящего узла

Определение структуры, называемой ephemerisparams, который хранит эфемеридные параметры. Параметры, передающие угол, находятся в единицах полукругов, поскольку стандарт GPS [1] определяет эти параметры в полукругах. Один полукруг равен δ радиан (180 градусов).

ephemerisparams.SqrtA = 0;   % Square root of length of semimajor axis
ephemerisparams.i_0 = 0;     % Inclination angle (in semicircles)
ephemerisparams.Omega_0 = 0; % Longitude of ascending node at weekly epoch (in semicircles)

На следующем рисунке показаны два орбитальных параметра:

  • Аргумент перигея, λ: Угол между направлением восходящего узла и направлением перигея

  • Истинная аномалия, start: Угол между направлением перигея и направлением, в котором присутствует текущее положение спутника

По второму закону планетарного движения Кеплера угловая скорость (скорость изменения истинной аномалии) различна в разных местоположениях на орбите. Можно определить среднюю аномалию, скорость изменения которой постоянна по всей орбите спутника. В параметрах эфемерид GPS вместо указания истинной аномалии указывается средняя аномалия (по которой можно найти истинную аномалию). Алгоритмы, которые связывают среднюю аномалию и истинную аномалию, даны в Столе IS-GPS-200L, 20-IV [1].

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

ephemerisparams.omega = 0; % Argument of perigee (in semicircles)
ephemerisparams.M_0 = 0;   % Mean anomaly at reference time (in semicircles)
ephemerisparams.e = 0;     % Eccentricity of the ellipse

Эти эфемеридные параметры помогают получить точное местоположение спутника в пространстве.

ephemerisparams.IODE = 0;            % Issue of data, ephemeris
ephemerisparams.c_rs = 0;            % Amplitude of the Sine Harmonic Correction Term to
                                     % the Orbit Radius (in meters)
ephemerisparams.Deln = 0;            % Mean Motion Difference From Computed Value (in semi-circles/second)
ephemerisparams.c_uc = 0;            % Amplitude of the Cosine Harmonic Correction Term to
                                     % the Argument of Latitude (in radians)
ephemerisparams.c_us = 0;            % Amplitude of the Sine Harmonic Correction Term to
                                     % the Argument of Latitude (in radians)
ephemerisparams.t_oe = 0;            % Reference time ephemeris (in seconds)
ephemerisparams.FitIntervalFlag = 0; % Fit interval flag
ephemerisparams.AODO = 0;            % Age of data offset
ephemerisparams.c_ic = 0;            % Amplitude of the Cosine Harmonic Correction Term to
                                     % the Angle of Inclination (in radians)
ephemerisparams.c_is = 0;            % Amplitude of the Sine Harmonic Correction Term to
                                     % the Angle of Inclination (in radians)
ephemerisparams.c_rc = 0;            % Amplitude of the Cosine Harmonic Correction Term to
                                     % the Orbit Radius (in meters)
ephemerisparams.OmegDot = 0;         % Rate of Right Ascension (in semi-circles/second)
ephemerisparams.IDOT = 0             % Rate of Inclination Angle (in semi-circles/secon)
ephemerisparams = struct with fields:
              SqrtA: 0
                i_0: 0
            Omega_0: 0
              omega: 0
                M_0: 0
                  e: 0
               IODE: 0
               c_rs: 0
               Deln: 0
               c_uc: 0
               c_us: 0
               t_oe: 0
    FitIntervalFlag: 0
               AODO: 0
               c_ic: 0
               c_is: 0
               c_rc: 0
            OmegDot: 0
               IDOT: 0

Альманах - набор параметров, определяющих положение спутников на орбите. В отличие от эфемерид, альманах менее точен. Кроме того, эфемерида предназначена только для одного спутника, в то время как альманах предназначен для всех спутников в созвездии. Приемник получает данные альманаха посредством декодирования данных GPS. Спутник постоянно получает эти данные альманаха из управляющего сегмента (CS). Альманах доступен для загрузки с сайта navcen. В этом примере используется формат системной эффективной модели (SEM) данных альманаха (см. [2]) и извлекаются данные альманаха, как показано ниже.

filename = 'gpsAlmanac.txt'; % Almanac file name (this file should be in current folder)
                             % Use any almanac file
almanacparams = HelperGPSAlmanac2Struct(filename)
almanacparams = struct with fields:
    SatellitesPRNIndices: [31x1 double]
       WeekNumModulo1024: 39
                    t_oa: 589824
                    Data: [1x31 struct]

Генерировать сигнал GPS

Для генерации сигнала GPS на основной полосе выполните следующие действия.

  1. Создайте биты навигационных данных со скоростью 50 бит в секунду.

  2. Создайте C/A-код со скоростью 1,023 мегапикса в секунду.

  3. Выполните операцию XOR C/A-кода с данными навигации для расширения данных.

  4. BPSK-модулировать элементарные сигналы C/A-кода путем преобразования бита 0 в + 1 и бита 1 в -1.

  5. Повторите указанные выше три шага для P-кода со скоростью 10,23 мегапиксов в секунду.

  6. Повторите каждый чип C/A-кода 10 раз для соответствия частоте P-кода.

  7. Поместите P-код и C/A-код на соответствующие ветви I и Q для создания сложного сигнала основной полосы частот.

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

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

lnavData = HelperGPSLNAVData(svparams,ephemerisparams,almanacparams); % Generates data for given FrameIndices

Поскольку данные GPS имеют скорость 50 бит в секунду, а C/A-код имеет скорость 1,023 мегапикселей в секунду, каждый бит данных соответствует 20460 C/A-кодовым чипам. Поскольку создание чипов для всех данных за один раз обходится в большую часть памяти, расширение кода C/A выполняется для одного бита данных LNAV за один раз в цикле. Скорость кодирования PRN называется «скоростью передачи элементарных сигналов», а не «скоростью передачи битов», чтобы дифференцировать представление со скоростью передачи битов данных. В навигационной системе расширяющий код (в этом примере C/A-код или P-код) называется кодом ранжирования, поскольку этот код используется в приемнике для вычисления времени распространения сигнала. Расстояние от спутника до приемника измеряется умножением времени распространения на скорость света в свободном пространстве.

prnCAChipRate = 1.023e6; % In chips/second
gpsDataRate = 50;        % In bits/second

Число элементарных посылок в одном бите данных представляет собой скорость элементарных посылок/скорость передачи данных.

numCAChipsPerDataBit = prnCAChipRate/gpsDataRate
numCAChipsPerDataBit = 20460

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

CACode = HelperGPSCACode(svparams.PRNIdx,numCAChipsPerDataBit);

Возьмите один бит навигационных данных и расширьте их с помощью P-кода. Возьмите длину P-кода, чтобы согласовать по времени длину C/A-кода, которая уже взята. Поскольку C/A-код имеет скорость 1,023 мегапикселей в секунду с 20 460 чипов на один бит навигационных данных, а P-код имеет скорость 10,23 мегапикселей в секунду, для одного бита навигационных данных существует 204 600 чипов P-кода.

numPChipsPerDataBit = numCAChipsPerDataBit*10 % Because chip rate of P-code is 10 times the chip rate of C/A-code
numPChipsPerDataBit = 204600

Длина P-кода такова, что он имеет периодичность 1 неделя. Чипирование P-кода со скоростью 10,23 мегапиксов в секунду подразумевает, что 10 .23x10 ^ 6 чипов существует на каждую секунду. Поскольку одна неделя содержит 604 800 секунд, длина P-кода в одном периоде равна 10,23 * 10 ^ 6 * 604800 = 6187104000000 чипов. Для генерации P-кода вместе с длиной последовательности необходимо количество чипов, прошедших с начала недели, которое рассчитывается изHOWTOW значение первого подкадра и его битовый индекс.

numSecondsElapsed = (svparams.HOWTOW-1)*6; % Because each subframe is processed in 6 seconds

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

if WriteWaveformToFile == 1
    bbWriter = comm.BasebandFileWriter('Waveform.bb',10.23e6,0);
end

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

for iDataBit = NavDataBitStartIndex:NavDataBitEndIndex
    spreadedCA = xor(CACode,lnavData(iDataBit));
    M = 2;                                    % Modulation order (for BPSK, M = 2)
    bpskSigCA = pskmod(double(spreadedCA),M);

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

  • Каждую секунду обрабатываются чипы 10,23 * 10 ^ 6 P-кода.

  • Каждый бит данных расширяется с помощью numPChipsPerDataBit количество чипов P-кода.

    numPChipsPassed = round(numSecondsElapsed*10.23*10^6+(iDataBit-1)*numPChipsPerDataBit);

Создайте P-код.

    PCode = HelperGPSPCode(numPChipsPerDataBit,svparams.PRNIdx,numPChipsPassed);
    spreadedWithP = xor(PCode,lnavData(iDataBit));

BPSK-модулировать P-код.

    bpskSigP = pskmod(double(spreadedWithP),M);

Формирование сигнала основной полосы частот L1 сигнала GPS путем размещения P-кода на I-ветви и C/A-кода на Q-ветви. Перед формированием сигнала основной полосы частот сигнал BPSK, который генерируется путем расширения спектра с помощью C/A-кода, повторяется 10 раз (потому что P-код в 10 раз быстрее, чем C/A-код). В отличие от линии связи, которая обычно имеет фильтр формирования импульсов в цифровой основной полосе частот, передатчик GPS не имеет фильтра формирования импульсов. Для точного масштабирования спутниковый приемник должен воспроизводить сигнал расширения спектра, который может быть выполнен прямоугольным импульсом. Спектральная эффективность сигнала не является серьезной проблемой в навигационных приложениях.

    repeatedBPSKSigCA = repelem(bpskSigCA(:),10);
    gpsBBWaveform = bpskSigP(:) + 1j*repeatedBPSKSigCA(:);
    if WriteWaveformToFile == 1
        bbWriter(gpsBBWaveform);
    end
end

Закройте файл, если он открыт.

if WriteWaveformToFile == 1
    release(bbWriter);
end

Визуализация сигналов

Постройте график автокорреляции C/A-кода и визуализируйте спектр сигналов GPS.

if ShowVisualizations

Дальномерные коды, разработанные для GPS, обладают очень хорошими автокорреляционными и кросс-корреляционными свойствами. Автокорреляция последовательности близка к нулю, за исключением нулевой задержки, а перекрестная корреляция двух различных последовательностей близка к нулю. Поскольку C/A-код является периодическим с периодом 1023 бита, автокорреляция имеет пик для задержки каждые 1023 бита.

    lags = (-1023:1023).';
    plot(lags,xcorr(real(bpskSigCA(1:1023)),1023));
    grid on;
    xlabel('Number of Samples Delayed')
    ylabel('Autocorrelation Value')
    title('Autocorrelation of GPS C/A-Code')

График спектра показывает сравнение спектральной плотности мощности сигналов, расширенных C/A-кодом и P-кодом. На сюжете видно, что P-код шире.

    repeatFactor = 40;
    % Repeat the generated BPSK signal of C/A-code to see the adjacent bands spectrum
    updataCA = repmat(bpskSigCA(:).',repeatFactor,1);
    updataCA = real(updataCA(:));
    % Repeat the generated BPSK signal of P-code to see the adjacent bands spectrum
    updataP = repmat(bpskSigP(:).',repeatFactor/10,1); % Repeat the P-code ten times less as every chip of C/A-code correspond to 10 chips of P-code
    updataP = real(updataP(:));
    caAndPCodeScope = dsp.SpectrumAnalyzer('SampleRate',prnCAChipRate*repeatFactor, ...
        'PlotAsTwoSidedSpectrum',true, ...
        'SpectrumType','Power density', ...
        'AveragingMethod','Exponential', ...
        'SpectrumUnits','dBW', ...
        'YLimits',[-130, -50], ...
        'Title','Comparison of Power Spectral Density of GPS C/A-Code and P-Code Signal', ...
        'ShowLegend',true, ...
        'ChannelNames',{'C/A-code spectrum','P-code spectrum'});

    caAndPCodeScope([updataCA,updataP]);

Постройте график спектральной плотности мощности сигнала на основной полосе частот. Для наблюдения спектра соседней полосы для сигнала GPS повторите сигнал на основной полосе.

    repeatFactor = 4;
    % Repeating the generated BPSK signal to see the adjacent bands spectrum
    updata = repmat(gpsBBWaveform(:).', repeatFactor, 1);
    updata = updata(:);
    bbscope = dsp.SpectrumAnalyzer('SampleRate',10*prnCAChipRate*repeatFactor, ...
        'PlotAsTwoSidedSpectrum',true, ...
        'SpectrumType','Power density', ...
        'AveragingMethod','Exponential', ...
        'SpectrumUnits','dBW', ...
        'YLimits',[-120,-50], ...
        'Title', 'Power Spectral Density of Complex Baseband GPS Signal');
    bbscope(updata);
end

Figure contains an axes. The axes with title Autocorrelation of GPS C/A-Code contains an object of type line.

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Comparison of Power Spectral Density of GPS C/A-Code and P-Code Signal contains 2 objects of type line. These objects represent C/A-code spectrum, P-code spectrum.

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Power Spectral Density of Complex Baseband GPS Signal contains an object of type line. This object represents Channel 1.

Дальнейшие исследования

В этом примере используются три структуры: svparams, ephemerisparams, и almanacparams. Эти структуры генерируют биты данных GPS и навигационный сигнал в основной полосе частот. Можно также заменить параметры в каждой из этих структур и наблюдать, как генерируются данные GPS. Можно изменить параметры ephemeris с помощью существующего реального набора данных и передать эти параметры в ephemeris. Кроме того, можно указать собственный файл альманаха. При использовании собственного файла альманаха номер недели в файле альманаха и номер недели в svparams структура должна совпадать.

Кроме того, этот пример показывает, как генерировать сигнал основной полосы частот GPS, который может быть расширен для генерации сигнала промежуточной частоты (ПЧ) из сигнала основной полосы частот путем умножения косинусного сигнала на I-ветви и синусоидального сигнала на Q-ветви.

Кроме того, этот пример показывает, как генерировать сигнал GPS от одного спутника, который может быть объединен вместе с множеством спутниковых кодов PRN для получения интегрированного сигнала.

Приложение

В этом примере используются следующие файлы данных и вспомогательные файлы:

  • gpsAlmanac.txt - Файл данных альманаха загружен с веб-сайта Navcen

  • HelperGPSAlmanac2Struct.m - Преобразование текстового файла альманаха в структуру

  • HelperGPSCACode.m - Создание C/A-кода для расширения данных

  • HelperGPSPCode.m - Создание P-кода для распространения данных

  • HelperGPSLNAVData.m - Создание устаревшей навигационной рамки из данных, находящихся в структурах

Библиография

[1] IS-GPS-200, Rev: L; пространственный сегмент NAVSTAR GPS/интерфейсы навигационного пользовательского сегмента; 14 мая 2020; Идентификатор кода: 66RP1.

[2] ICD-GPS-240, Rev: C; Navstar GPS Control Segment to User Support Community Interfaces; 4 марта 2019; Идентификатор кода: 66RP1.