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

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

Структура системы координат GPS

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

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

  • Эфемеридные параметры

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

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

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

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

  • Распространение C/A-code

  • Распространение псевдокода

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

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

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

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

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

  • На несущей частоте L2 компонент квадратурной фазы пуст.

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

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

Этот рисунок иллюстрирует устаревшую навигацию (LNAV) система координат данных.

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

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

Подкадры 4 и 5 содержат информацию о положении спутников GPS, которые в настоящее время действуют, и дает оценку спутников, которые отображаются пользователю. Эта информация о положениях всех спутников в созвездии коллективно называется альманахом. Эфемерида дает точное положение SV на пробеле, и альманах содержит менее точную информацию о положении всего SVs. Данные об альманахе SVs заполнены более чем 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) Word и передача Word (КАК)

В каждом подкадре Word 1 является словом TLM, и Word 2 КАК. Как показано в этом рисунке, слово 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

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

18-й бит в, КАК аварийный флаг, который указывает, что пользовательская точность области значений (URA) пользователя стандартного сервиса расположения (SPS) хуже, чем, что обозначается svparams.URAIndex, и пользователь должен использовать текущий спутник в их собственном риске. Бит 19 в, КАК флаг антиимитации. Если этот флаг установлен, то вместо передачи Псевдокода, спутник передает Y-код. Биты 20 - 22 в, КАК указывают на 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)

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

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

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

На второй закон Кеплера планетарного движения скорость вращения (скорость изменения истинной аномалии) отличается в других местах в орбите. Можно задать среднюю аномалию, скорость изменения которой является постоянной по целой орбите спутника. В эфемеридных параметрах 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-code в 1,023 мега микросхемах в секунду.

  3. Выполните операцию "исключающее ИЛИ" C/A-code с данными о навигации, чтобы распространить данные.

  4. BPSK - модулирует микросхемы C/A-code путем отображения бита 0 к +1 и бита 1 к-1.

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

  6. Повторите каждый чип C/A-code 10 раз, чтобы совпадать с частотой Псевдокода.

  7. Поместите Псевдокод и C/A-code на соответствующем, я и Q переходим, чтобы создать комплексный сгенерированный модулированный сигнал.

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

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

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

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

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

Количество вносит один бит данных, уровень/скорость передачи данных чипа.

numCAChipsPerDataBit = prnCAChipRate/gpsDataRate
numCAChipsPerDataBit = 20460

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

CACode = HelperGPSCACode(svparams.PRNIdx,numCAChipsPerDataBit);

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

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

Длина Псевдокода такова, что это имеет периодичность 1 недели. Псевдокод, производящий микросхемы по курсу 10,23 мега микросхем в секунду, подразумевает, что 10.23x10^6 микросхемы существуют в течение каждой секунды. Поскольку одна неделя содержит 604 800 секунд, длина Псевдокода в один период 10.23*10^6 * 604800 = 6187104000000 микросхем. Чтобы сгенерировать Псевдокод наряду с длиной последовательности, количество микросхем, которые истекают с начала недели, необходимо, который вычисляется от 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);

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

  • Каждую секунду 10.23*10^6 микросхемы Псевдокода обрабатываются.

  • Каждый бит данных распространен с numPChipsPerDataBit количество микросхем Псевдокода.

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

Сгенерируйте псевдокод.

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

BPSK - модулирует псевдокод.

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

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

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

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

if WriteWaveformToFile == 1
    release(bbWriter);
end

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

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

if ShowVisualizations

Располагающиеся коды, спроектированные для GPS, имеют очень хорошие свойства автокорреляции и взаимной корреляции. Автокорреляция последовательности является почти нулем кроме в нулевую задержку, и взаимная корреляция двух различных последовательностей является почти нулем. Когда C/A-code является периодическим с периодом 1 023 битов, автокорреляция имеет пик для задержки каждых 1 023 битов.

    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-code и Псевдокодом. График показывает, что Псевдокод более широк.

    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 сгенерированы. Можно изменить эфемеридные параметры с существующим действительным набором данных и передать те параметры в эфемериду. Кроме того, можно задать собственный файл альманаха. При использовании собственного файла альманаха, номера недели в файле альманаха и номера недели в svparams структура должна соответствовать.

Далее, этот пример показывает, как сгенерировать основополосную форму волны GPS, которая может быть расширена, чтобы сгенерировать форму волны промежуточной частоты (IF) от основополосной формы волны путем умножения сигнала косинуса на I-ветви и сигнала синуса на Q-ветви.

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

Приложение

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

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

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

  • HelperGPSCACode.m - Сгенерируйте C/A-code, чтобы распространить данные

  • HelperGPSPCode.m - Сгенерируйте Псевдокод, чтобы распространить данные

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

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

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

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