В этом примере показано, как сгенерировать устаревшую навигацию Системы глобального позиционирования (GPS) (LNAV) данные, гражданская навигация (CNAV) данные и комплексная основополосная форма волны. Распространение данных выполняется с крупным кодом захвата (C/A-code), кодом точности (Псевдокод), или гражданское умеренный / гражданский длинный код (код CL L2 CM-/L2). Этот пример показывает генерацию сигналов GPS согласно стандарту IS-GPS-200L [1]. Чтобы спроектировать систему навигации на основе GPS, необходимо протестировать приемник с полученным сигналом. Поскольку вы не можете управлять передатчиком и параметрами канала, сигнал, который получен от спутника, не полезен для тестирования приемника. Чтобы протестировать приемник, необходимо использовать форму волны, которая сгенерирована под управляемым набором параметров.
Сгенерируйте сигнал GPS при помощи этих трех шагов.
Сгенерируйте биты данных GPS при помощи параметров конфигурации, которые описаны в более поздних разделах. Биты данных сгенерированы на уровне 50 бит в секунду (бит/с).
Распространите эти биты данных низкого процента при помощи кодов распространения высокого показателя. Стандарт GPS [1] задает три вида распространяющихся кодов: C/A-code, Псевдокод и код CL L2 CM-/L2. В дополнение к этим трем кодам этот стандарт также задает Y-код, чтобы использовать вместо Псевдокода, когда антиспуфинг режима операции активен. Псевдокод и Y-код вместе называются P (Y) - код. Параметры конфигурации определяют распространяющийся код, который используется, чтобы сгенерировать форму волны.
Сгенерируйте комплексную основополосную форму волны GPS от битов, которые распространены распространяющимися кодами путем выбора кодов по синфазной ветви и ветви квадратурной фазы согласно набору параметров конфигурации.
Этот рисунок показывает блок-схему генератора формы волны GPS от параметров конфигурации.
Стандарт [1] описывает передачу сигналов GPS на двух частотах: L1 (1 575,42 МГц) и L2 (1 227,60 МГц). Сигнал основной частоты 10,23 МГц генерирует оба из этих сигналов. Частота сигнала L1 составляет 154 x 10,23 МГц = 1 575,42 МГц, и частота сигнала L2 составляет 120 x 10,23 МГц = 1 227,60 МГц. Деление кода несколько получают доступ к методу, позволяет вам дифференцироваться между спутниками даже при том, что все спутники GPS передают на той же частоте.
С эволюцией GPS структура сигнала расширена, чтобы улучшать производительность навигации. Например, данные LNAV передаются на L1-полосе от начала GPS. От блока GPS IIR-M вперед, данные CNAV передаются на L2-полосе в дополнение к данным LNAV, которые существуют на обеих полосах L1 и L2. Эта таблица показывает эти настройки сигнала и эволюцию GPS. "Dc" представляет биты данных CNAV, и "D" представляет биты данных LNAV. Битный оператор, , представляет операцию "исключающее ИЛИ".
Используя эту таблицу, чтобы выбрать содержимое, которое должно быть передано в синфазных ветвях и ветвях квадратурной фазы.
IBranchContent = "P(Y) + D"
IBranchContent = "P(Y) + D"
QBranchContent = "C/A + D"
QBranchContent = "C/A + D"
Многие переданные свойства в LNAV и данных CNAV - то же самое, но структура системы координат отличается. Данные LNAV передаются в 1 500 системах координат длины в битах с каждой системой координат, состоящей из пяти подкадров 300 битов в каждом подкадре. Поскольку скорость передачи данных составляет 50 бит/с, передавание каждого подкадра занимает 6 секунд, и передавание каждой системы координат занимает 30 секунд. Каждый подкадр состоит из 10 слов с 30 битами (24 бита данных и 6 битов четности) в каждом слове. Данные о GPS содержат информацию относительно часов и положения спутников. Этот рисунок показывает структуру системы координат данных LNAV.
Данные CNAV передаются постоянно в форме типов сообщений. Каждый тип сообщения состоит из 300 битов, которые передаются на уровне 25 бит/с. Эти биты передаются через половину уровня сверточного энкодера, чтобы получить 600 битов из каждого типа сообщения на уровне 50 бит/с. Передача каждого типа сообщения занимает 12 секунд. Стандарт [1] задает 14 типов сообщений в этом порядке: 10, 11, 30, 31, 32, 33, 34, 35, 36, 37, 12, 13, 14, и 15. Для подробного описания каждого типа сообщения и переданных данных, см. Приложение III [1] IS-GPS-200L. Порядок, в котором передается каждый тип сообщения, абсолютно произволен, но упорядочивается, чтобы обеспечить оптимальный пользовательский опыт. В этом примере можно выбрать порядок, в котором передаются эти типы сообщений. Этот рисунок показывает структуру сообщения CNAV.
Тип сообщения, показанный в этом рисунке, имеет эти поля:
ID PRN: индекс псевдослучайного шума (PRN)
ОБМЕНИВАЙТЕСЬ СООБЩЕНИЯМИ: Сообщение
TOW: Время недели
CRC: Контроль циклическим избыточным кодом
Установите ShowVisualizations
свойство включить спектр и корреляцию строит визуализацию. Установите WriteWaveformToFile
свойство записать комплексную основополосную форму волны в файл в случае необходимости. Этот пример включает визуализацию и отключает запись формы волны к файлу.
ShowVisualizations = true; WriteWaveformToFile = false;
Задайте спутниковый индекс PRN как целое число в области значений [1,63].
PRNID = 1;
Поскольку генерация формы волны GPS для целых данных о навигации может занять много времени и памяти, этот пример демонстрирует генерацию формы волны только для одного бита данных о навигации. Можно управлять генерацией формы волны для конкретного количества битов данных при помощи свойства NumNavDataBits
.
% Set this value to 1 to generate the waveform from the first bit of the % navigation data NavDataBitStartIndex = 1321; % Set this value to control the number of navigation data bits in the % generated waveform NumNavDataBits = 1;
Инициализируйте объект настройки данных сгенерировать данные CNAV. Можно создать объект настройки из HelperGPSNavigationConfig
объект. Обновите свойства объектов настройки, чтобы настроить форму волны как требуется.
cnavConfig = HelperGPSNavigationConfig("DataType","CNAV","PRNID",PRNID)
cnavConfig = HelperGPSNavigationConfig with properties: DataType: "CNAV" PRNID: 1 MessageTypes: [4x15 double] Preamble: 139 HOWTOW: 0 L2CPhasing: 0 CEIDataSet: [1x1 HelperGPSCEIConfig] AgeOfDataOffset: 0 AlmanacFileName: "gpsAlmanac.txt" Ionosphere: [1x1 struct] EarthOrientation: [1x1 struct] UTC: [1x1 struct] DifferentialCorrection: [1x1 struct] TimeOffset: [1x1 struct] TextInMessageType36: 'This content is part of Satellite Communications Toolbox' TextInMessageType15: 'This content is part of Satellite Communications Toolbox' Read-only properties: No properties.
Свойство, CEIDataSet
, объект настройки типа HelperGPSCEIConfig
, который содержит часы, эфемериду и целостность (CEI) параметры данных.
В теории должны синхронизироваться часы всех спутников, который подразумевает, что все часы спутника GPS должны показать то же время в данный момент вовремя. На практике детерминированные спутниковые характеристики ошибки синхронизации смещения, дрейфа, и старения, а также спутниковых характеристик реализации смещения групповой задержки и средней дифференциальной групповой задержки существуют. Эти ошибки отклоняют спутниковые часы с системного времени GPS.
Спутники GPS вращаются вокруг Земли в эллиптической орбите с Землей в одном из центров эллипса. Набор орбитальных параметров, который точно задает спутниковое положение в этой эллиптической орбите, называется эфемеридой. Каждый спутник GPS передает свои собственные эфемеридные данные по подкадрам 2 и 3 для данных LNAV и на типах сообщений 10 и 11 для данных CNAV. Этот рисунок показывает пять орбитальных параметров для спутника в системе координат Сосредоточенного землей зафиксированного землей (ECEF). Этот рисунок не показывает фактический спутник GPS, и фигура для рисунка только.
Длина полуглавной оси, : Расстояние от центра эллиптической орбиты спутника к апогею или перигею
Наклонный угол, : Угол между экваториальной плоскостью Земли и плоскостью орбиты спутника
Долгота возрастающего узла, : Угол между Гринвичским меридианом и направлением возрастающего узла
Аргумент перигея, : Угол между направлением возрастающего узла и направлением перигея
Истинная аномалия, : Угол между направлением перигея и направлением текущего положения спутника
На второй закон Кеплера планетарного движения скорость вращения (скорость изменения истинной аномалии) отличается в других местах в орбите. Можно задать среднюю аномалию, скорость изменения которой является постоянной по целой орбите спутника. В эфемеридных параметрах GPS, вместо того, чтобы задать истинную аномалию, средняя аномалия задана (от которого истинная аномалия может быть найдена). Таблица IS-GPS-200L, с 20 IV [1], задает алгоритмы, которые связывают среднюю аномалию и истинную аномалию.
Эксцентриситет эллипса также задает орбиту. Эксцентриситет дает меру отклонения эллиптической орбиты от круговой формы.
Эта команда отображает свойства набора данных CEI, которые связаны с данными CNAV.
cnavConfig.CEIDataSet
ans = HelperGPSCEIConfig with properties: SignalHealth: [3x1 double] WeekNumber: 2149 GroupDelayDifferential: 0 SVClockCorrectionCoefficients: [3x1 double] ReferenceTimeOfClock: 0 SemiMajorAxisLength: 26560 ChangeRateInSemiMajorAxis: 0 MeanMotionDifference: 0 RateOfMeanMotionDifference: 0 Eccentricity: 0.0200 MeanAnomaly: 0 ReferenceTimeOfEphemeris: 0 HarmonicCorrectionTerms: [6x1 double] IntegrityStatusFlag: 0 ArgumentOfPerigee: -0.5200 RateOfRightAscension: 0 LongitudeOfAscendingNode: -0.8400 Inclination: 0.3000 InclinationRate: 0 URAEDID: 0 InterSignalCorrection: [4x1 double] ReferenceTimeCEIPropagation: 0 ReferenceWeekNumberCEIPropagation: 101 URANEDID: [3x1 double] AlertFlag: 0 Read-only properties: No properties.
Подобный набор свойств существует для данных LNAV. Создайте объект настройки хранить данные LNAV.
lnavConfig = HelperGPSNavigationConfig("DataType","LNAV","PRNID",PRNID)
lnavConfig = HelperGPSNavigationConfig with properties: DataType: "LNAV" PRNID: 1 FrameIndices: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... ] Preamble: 139 TLMMessage: 0 HOWTOW: 0 AntiSpoofFlag: 0 CodesOnL2: "P-code" L2PDataFlag: 0 CEIDataSet: [1x1 HelperGPSCEIConfig] AgeOfDataOffset: 0 NMCTAvailabilityIndicator: 0 NMCTERD: [30x1 double] AlmanacFileName: "gpsAlmanac.txt" Ionosphere: [1x1 struct] UTC: [1x1 struct] TextMessage: 'This content is part of Satellite Communications Toolbox' Read-only properties: No properties.
Подобно данным CNAV данные LNAV имеют свойства данных CEI, которые отличаются от того из CNAV. Эта команда отображает свойства данных CEI LNAV.
lnavConfig.CEIDataSet
ans = HelperGPSCEIConfig with properties: SVHealth: 0 IssueOfDataClock: 0 URAID: 0 WeekNumber: 2149 GroupDelayDifferential: 0 SVClockCorrectionCoefficients: [3x1 double] ReferenceTimeOfClock: 0 SemiMajorAxisLength: 26560 MeanMotionDifference: 0 FitIntervalFlag: 0 Eccentricity: 0.0200 MeanAnomaly: 0 ReferenceTimeOfEphemeris: 0 HarmonicCorrectionTerms: [6x1 double] IssueOfDataEphemeris: 0 IntegrityStatusFlag: 0 ArgumentOfPerigee: -0.5200 RateOfRightAscension: 0 LongitudeOfAscendingNode: -0.8400 Inclination: 0.3000 InclinationRate: 0 AlertFlag: 0 Read-only properties: No properties.
Чтобы сгенерировать сигнал GPS в основной полосе, выполните эти шаги.
Сгенерируйте биты данных навигации на уровне 50 бит в секунду.
На основе настройки сгенерируйте C/A-code, Псевдокод, код CL L2 CM-/L2 или комбинацию.
Распространите CNAV или бит данных LNAV с соответствующими располагающимися кодами.
Соберите данные для синфазной ветви и ветви квадратурной фазы соответствием уровня коды в каждой ветви.
Сопоставьте биты на обеих из ветвей как бит 0 к +1 и бит 1 к –1.
(Необязательно) Запись эта основополосная форма волны к файлу (в зависимости от WriteWaveformToFile
значение свойства).
На основе настройки сгенерируйте данные CNAV.
cnavData = HelperGPSNAVDataEncode(cnavConfig);
Передайте данные CNAV через сверточный энкодер.
% Initialize the trellis for convolutional encoder trellis = poly2trellis(7,{'1+x+x^2+x^3+x^6','1+x^2+x^3+x^5+x^6'}); cenc = comm.ConvolutionalEncoder('TrellisStructure',trellis, ... "TerminationMethod","Continuous"); encodedCNAVData = cenc(cnavData);
На основе настройки сгенерируйте данные LNAV.
lnavData = HelperGPSNAVDataEncode(lnavConfig);
Задайте все необходимые свойства для формы волны genertion.
CLCodeResetIdx = 75; % CL-code spans over 75 data bits before resetting numBBSamplesPerDataBit = 204600; CLCodeIdx = mod(NavDataBitStartIndex-1,CLCodeResetIdx); IQContent = [IBranchContent,QBranchContent]; pgen = gpsPCode("PRNID",PRNID,"InitialTime", ... lnavConfig.CEIDataSet.ReferenceTimeOfEphemeris, ... "OutputCodeLength",numBBSamplesPerDataBit); % Pre-initialize the baseband waveform for speed gpsBBWaveform = zeros(numBBSamplesPerDataBit*NumNavDataBits,1);
Создайте файл, в который записана форма волны.
if WriteWaveformToFile == 1 bbWriter = comm.BasebandFileWriter('Waveform.bb',10.23e6,0); end
Независимо процесс каждый бит данных навигации в цикле.
for iDataBit = 1:NumNavDataBits dataBitIdx = iDataBit+NavDataBitStartIndex-1; bbSamplesIndices = ((iDataBit-1)*numBBSamplesPerDataBit+1): ... (iDataBit*numBBSamplesPerDataBit); gpsBBWaveform(bbSamplesIndices) = HelperGPSBasebandWaveform(IQContent,pgen,PRNID, ... CLCodeIdx,lnavData(dataBitIdx),encodedCNAVData(dataBitIdx)); CLCodeIdx = mod(CLCodeIdx+1,CLCodeResetIdx); if WriteWaveformToFile == 1 bbWriter(gpsBBWaveform(bbSamplesIndices)); end end
Закройте файл, если он открыт.
if WriteWaveformToFile == 1 release(bbWriter); end
Постройте автокорреляцию C/A-code и визуализируйте спектр сигналов GPS.
if ShowVisualizations
Автокорреляция располагающейся кодовой последовательности является почти нулем кроме в нулевую задержку, и взаимная корреляция двух различных последовательностей является почти нулем. Поскольку C/A-code является периодическим с периодом 1 023 битов, автокорреляция имеет пик для задержки каждых 1 023 битов. Вычислите и постройте автокорреляцию кода распространения GPS.
% Because P-code is 10 times faster than C/A-code or L2 CM-/L2 CL-code, % initialise down sample factor to 10 downsampleFactor = 10; IBranchData = real(gpsBBWaveform); QBranchData = imag(gpsBBWaveform(1:downsampleFactor:end)); lags = (-1023:1023).'; plot(lags,xcorr(real(QBranchData(1:1023)),1023)) grid on xlabel('Number of Samples Delayed') ylabel('Autocorrelation Value') title('Autocorrelation of GPS Spreading Code')
Сравните спектральную плотность мощности синфазных сигналов ветви и квадратурной ветви. Этот график спектра показывает, что Псевдокод более широк, когда Псевдокод используется.
repeatFactor = 40; % Repeat the generated BPSK signal of C/A-code to see the adjacent bands spectrum QBranchUpsampled = repmat(QBranchData(:).',repeatFactor,1); QBranchUpsampled = QBranchUpsampled(:); % Repeat the generated BPSK signal of in-phase component to see the % adjacent bands spectrum. Repeat the in-phase branch samples ten times less % as every sample in quadrature-branch corresponds to 10 samples in in-phase branch IBranchUpsampled = repmat(IBranchData(:).',repeatFactor/10,1); IBranchUpsampled = real(IBranchUpsampled(:)); iqScope = dsp.SpectrumAnalyzer('SampleRate',1.023e6*repeatFactor, ... 'PlotAsTwoSidedSpectrum',true, ... 'SpectrumType','Power density', ... 'AveragingMethod','Exponential', ... 'SpectrumUnits','dBW', ... 'YLimits',[-130, -50],'Title', ... 'Comparison of Power Spectral Density of GPS baseband I and Q Signals', ... 'ShowLegend',true,'ChannelNames', ... {['Q-branch spectrum with content: ' char(QBranchContent)], ... ['I-branch spectrum with content: ' char(IBranchContent)]}); iqScope([QBranchUpsampled,IBranchUpsampled]);
Постройте спектральную плотность мощности сигнала в основной полосе. Чтобы наблюдать смежный полосатый спектр для сигнала GPS, повторите сигнал в основной полосе.
repeatFactor = 4; % Repeat the generated BPSK signal to see the adjacent bands spectrum updata = repmat(gpsBBWaveform(:).',repeatFactor,1); updata = updata(:); bbscope = dsp.SpectrumAnalyzer('SampleRate',10*1.023e6*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
Этот пример использует объект настройки сгенерировать биты данных GPS и сигнал навигации в основной полосе. Можно заменить значения свойств в этом объекте настройки и наблюдать, как данные о GPS сгенерированы. Можно также изменить эфемеридные параметры с существующим действительным набором данных и передать те параметры в набор данных CEI. Кроме того, можно задать собственный файл альманаха. Если вы используете свой собственный файл альманаха, номер недели в файле альманаха и номер недели в объекте настройки должны соответствовать.
Далее, этот пример показывает, как сгенерировать основополосную форму волны GPS, которая может быть расширена, чтобы сгенерировать форму волны промежуточной частоты (IF) от основополосной формы волны путем умножения сигнала косинуса на синфазной ветви и сигнала синуса на квадратурной ветви.
Кроме того, этот пример показывает, как сгенерировать форму волны GPS от одного спутника, который может быть объединен наряду с несколькими спутниковые коды PRN, чтобы получить интегрированный сигнал.
Этот пример использует эти данные и файлы помощника:
gpsAlmanac.txt — Файл данных альманаха загружается с веб-сайта Navcen
HelperGPSAlmanac2Struct.m — Преобразуйте текстовый файл альманаха к структуре
HelperGPSBasebandWaveform.m — Создайте основополосную форму волны GPS из битов данных
HelperGPSCEIConfig.m — Создайте объект настройки для данных о навигации GPS
HelperGPSL2CRangingCode.m — Сгенерируйте код CL L2 CM-/L2
HelperGPSNAVDataEncode.m — Закодируйте данные о навигации в биты из данных, которые находятся в объекте настройки
HelperGPSNavigationConfig.m — Создайте объект настройки для данных о навигации GPS
[1] IS-GPS-200, версия: Космический сегмент GPS Л. НЭВСТЭРА / Пользовательские Интерфейсы Сегмента Навигации. 14 мая 2020; Код Ident: 66RP1.