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

В этом примере показано, как сгенерировать устаревшие данные навигации Глобальной системы позиционирования (GPS) (LNAV), ее структуру системы координат и сложную форму волны основной полосы частот. Расширение данных осуществляется с помощью кода грубой регистрации (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 для всех навигационных данных занимает много времени и памяти, этот пример демонстрирует генерацию формы волны для одного бита навигационных данных. Генерацией формы волны для количества бит данных LNAV GPS можно управлять параметрами 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 данных LNAV GPS содержит параметры для корреляции 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, который хранит параметры ephemeris. Параметры, которые передают угол, указаны в единицах полукругов, потому что стандарт 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)

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

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

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

Согласно второму закону планетарного движения Кеплера, скорость вращения (скорость изменения истинной аномалии) отличается в других местах на орбите. Можно задать среднюю аномалию, скорость изменения которой постоянна на всей орбите спутника. В параметрах GPS ephemeris, вместо определения истинной аномалии, задана средняя аномалия (из которой может быть найдена истинная аномалия). Алгоритмы, которые связывают среднюю аномалию и истинную аномалию, приведены в 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). Almanac можно скачать с сайта 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-навигационные данные с помощью функции helper HelperGPSLNAVData.

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

Поскольку данные GPS имеют значение 50 битов в секунду, а код C/A равен 1,023 мега элементам в секунду, каждый бит данных соответствует элементам кода 20460 C/A. Поскольку создание микросхем для всех данных за один раз стоит большой объем памяти, расширение кода C/A выполняется для одного бита данных LNAV за раз в цикле. Скорость кода упоминается как «скорость элементарного сигнала», а не «скорость битов», чтобы дифференцировать обозначение со скоростью передачи данных. В навигационной системе код расширения (в этом примере 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, которая может быть расширена, чтобы сгенерировать форму волны промежуточной частоты (IF) из формы волны основной полосы путем умножения сигнала косинуса на I-ветви и сигнала синуса на Q-ветви.

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

Приложение

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

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

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

  • HelperGPSCACode.m - Сгенерируйте C/A-код для распространения данных

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

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

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

[1] IS-GPS-200, ред.: L; Интерфейсы NAVSTAR GPS Space Segment/Navigation User Segment; 14 мая 2020 года; Идент кода: 66RP1.

[2] ICD-GPS-240, ред.: С; Сегмент управления Navstar GPS к интерфейсам сообщества поддержки пользователей; 4 марта 2019 года; Идент кода: 66RP1.

Для просмотра документации необходимо авторизоваться на сайте