主要内容

GPS波形生成

本示例展示了如何生成全球定位系统(GPS)遗留导航(LNAV)数据、民用导航(CNAV)数据和复杂的基带波形。数据的传播使用粗采集码(C/ a码)、精确码(p码)或民用中等/民用长码(L2 CM-/L2 cl码)进行。本例显示了根据IS-GPS-200L标准生成的GPS波形[1].要设计基于GPS的导航系统,必须用接收到的信号测试接收机。因为你不能控制发射机和信道参数,所以从卫星接收到的信号对于测试接收机是没有用的。要测试接收机,必须使用在一组受控参数下生成的波形。

简介

使用以下三个步骤生成GPS信号。

  1. 使用后面章节描述的配置参数生成GPS数据位。数据位以每秒50位(bps)的速率生成。

  2. 通过使用高速率扩展码来扩展这些低速率数据位。GPS标准[1]指定三种扩频码:C/ a码、p码和L2 CM-/L2 cl码。除了这三种代码外,本标准还规定了在反欺骗模式激活时使用y码而不是p码。P码和Y码一起称为P(Y)码。配置参数确定用于生成波形的扩频码。

  3. 根据配置参数集在同相支路和四相支路上选择码,由扩频码所传播的比特产生GPS复基带波形。

该图显示了GPS波形发生器从配置参数的框图。

GPS信号结构

标准的[1]描述了GPS信号在L1 (1575.42 MHz)和L2 (1227.60 MHz)两个频率上的传输。基频10.23 MHz的信号产生这两个信号。L1的信号频率为154 × 10.23 MHz = 1575.42 MHz, L2的信号频率为120 × 10.23 MHz = 1227.60 MHz。即使所有GPS卫星的传输频率相同,但密码分割多址技术也能使你区分不同的卫星。

随着GPS技术的发展,信号结构不断扩展以提高导航性能。例如,从GPS开始,LNAV数据就在l1波段上传输。从GPS块IIR-M开始,除了L1和L2波段存在的LNAV数据外,CNAV数据在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数据以1500比特长度的帧传输,每帧由5个子帧组成,每个子帧中有300比特。由于数据速率为50bps,因此传输每一个子帧需要6秒,传输每一帧需要30秒。每个子帧由10个单词组成,每个单词包含30位(24位数据位和6位奇偶校验位)。GPS数据包含有关时钟和卫星位置的信息。该图显示了LNAV数据的帧结构。

CNAV数据以。的形式连续传输消息类型.每种消息类型由300位组成,以25 bps的速度传输。这些比特通过速率半卷积编码器以50 bps的速度从每种消息类型中获得600比特。发送每种消息类型需要12秒。标准的[1]按此顺序定义14种消息类型:10、11、30、31、32、33、34、35、36、37、12、13、14和15。关于每种消息类型和传输数据的详细描述,请参见IS-GPS-200L附录III[1].每种消息类型的传输顺序完全是任意的,但顺序是为了提供最佳的用户体验。在本例中,您可以选择这些消息类型的传输顺序。该图显示了CNAV消息结构。

图中显示的消息类型具有以下字段:

  • PRN ID:伪随机噪声(伪随机噪声)索引

  • 味精:消息

  • 每周的时间

  • CRC:循环冗余校验

设置ShowVisualizations属性启用频谱和相关图可视化。设置WriteWaveformToFile属性在需要时将复杂基带波形写入文件。此示例启用可视化并禁用将波形写入文件。

ShowVisualizations =真正的;WriteWaveformToFile =

指定卫星PRN索引为范围[1,63]的整数。

Prnid = 1;

由于为整个导航数据生成GPS波形需要大量的时间和内存,因此本示例演示了仅为导航数据的一个比特生成波形。您可以使用属性控制为指定数量的数据位生成波形NumNavDataBits

将此值设置为1以从的第1位开始生成波形导航数据%NavDataBitStartIndex = 1321;控件中的导航数据位数生成波形百分比NumNavDataBits = 1;

GPS数据初始化

初始化数据配置对象,生成CNAV数据。属性中创建配置对象HelperGPSNavigationConfig对象。更新配置对象属性以根据需要定制波形。

cnavConfig = HelperGPSNavigationConfig(“数据类型”“CNAV”“PRNID”PRNID)
cnavConfig = HelperGPSNavigationConfig with properties: DataType: "CNAV" PRNID: 1 MessageTypes: [4x15 double]前文:139 HOWTOW: 1 L2CPhasing: 0 CEIDataSet: [1x1 HelperGPSCEIConfig] AgeOfDataOffset: 0 AlmanacFileName: "gpsAlmanac.txt"电离层:[1x1 struct]地球定向:[1x1 struct] UTC: [1x1 struct]差异纠正:[1x1 struct] TimeOffset: [1x1 struct] TextInMessageType36: '此内容是卫星通信Toolbox的一部分' TextInMessageType15:本内容是卫星通信工具箱的一部分

的属性,CEIDataSet类型的配置对象HelperGPSCEIConfig,其中包含时钟、星历表和完整性(CEI)数据参数。

理论上,所有卫星的时钟必须同步,这意味着所有GPS卫星的时钟必须在给定时刻显示相同的时间。在实际应用中,存在偏置、漂移、老化等确定性卫星时钟误差特征,以及群时延偏置和平均差分群时延的卫星实现特征。这些误差使卫星时钟偏离GPS系统时间。

GPS卫星在椭圆轨道上围绕地球旋转,地球是椭圆的焦点之一。一组精确定义卫星在椭圆轨道上位置的轨道参数被称为星历表.每颗GPS卫星在LNAV数据的子帧2和3上传输自己的星历表数据,在CNAV数据的消息类型10和11上传输自己的星历数据。该图显示了地球中心地球固定(ECEF)坐标系中卫星的五个轨道参数。该图没有显示实际的GPS卫星,仅供说明。

  • 半长轴长度, 一个 :卫星椭圆轨道中心到远地点或近地点的距离

  • 倾角, :地球赤道平面与卫星轨道平面之间的夹角

  • 升节点经度, Ω :格林尼治子午线与上升节点方向之间的夹角

  • 近地点辐角, ω :上升节点方向与近地点方向的夹角

  • 真正的异常, υ :近地点方向与卫星当前位置方向之间的夹角

根据开普勒行星运动第二定律,轨道上不同位置的角速度(真实异常的变化率)是不同的。你可以定义平均异常,其变化率在卫星的整个轨道上是恒定的。在GPS星历表参数中,不指定真实异常,而是指定平均值异常(从中可以找到真实异常)。表20- 4 . gps - 200l[1]指定涉及平均异常和真异常的算法。

椭圆的偏心率也决定了轨道。偏心率是椭圆轨道与圆形轨道的偏差的量度。

该命令显示与CNAV数据相关的CEI数据集属性。

cnavConfig。CEIDataSet
ans = HelperGPSCEIConfig属性:SignalHealth: x1双[3]WeekNumber: 2149 GroupDelayDifferential: 0 SVClockCorrectionCoefficients: x1双[3]ReferenceTimeOfClock: 0 SemiMajorAxisLength: 26560 ChangeRateInSemiMajorAxis: 0 MeanMotionDifference: 0 RateOfMeanMotionDifference: 0离心率:0.0200 MeanAnomaly: 0 ReferenceTimeOfEphemeris: 0 HarmonicCorrectionTerms: x1双[6]IntegrityStatusFlag: 0 ArgumentOfPerigee: -0.5200 RateOfRightAscension: 0 LongitudeOfAscendingNode:-0.8400倾斜:0.3000倾斜率:0 URAEDID: 0 InterSignalCorrection: [4x1 double] ReferenceTimeCEIPropagation: 0 ReferenceWeekNumberCEIPropagation: 101 URANEDID: [3x1 double] AlertFlag: 0

LNAV数据也有一组类似的属性。创建配置对象用于存储LNAV数据。

lnavConfig = HelperGPSNavigationConfig(“数据类型”“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…]导语:139 TLMMessage: 0 HOWTOW: 1 AntiSpoofFlag: 0 CodesOnL2: "P-code" L2PDataFlag: 0 CEIDataSet: [1x1 HelperGPSCEIConfig] AgeOfDataOffset: 0 NMCTAvailabilityIndicator: 0 NMCTERD: [30x1 double] AlmanacFileName: "gpsAlmanac.txt"电离层:[1x1 struct] UTC: [1x1 struct] TextMessage: '此内容是卫星通信Toolbox的一部分'

与CNAV数据类似,LNAV数据具有与CNAV不同的CEI数据属性。该命令显示LNAV CEI数据属性。

lnavConfig。CEIDataSet
ans = HelperGPSCEIConfig属性:SVHealth: 0 IssueOfDataClock: 0 URAID: 0 WeekNumber: 2149 GroupDelayDifferential: 0 SVClockCorrectionCoefficients: x1双[3]ReferenceTimeOfClock: 0 SemiMajorAxisLength: 26560 MeanMotionDifference: 0 FitIntervalFlag: 0离心率:0.0200 MeanAnomaly: 0 ReferenceTimeOfEphemeris: 0 HarmonicCorrectionTerms: x1双[6]IssueOfDataEphemeris: 0 IntegrityStatusFlag: 0 ArgumentOfPerigee: -0.5200 RateOfRightAscension: 0 LongitudeOfAscendingNode:-0.8400倾角:0.3000倾斜率:0 AlertFlag: 0

GPS信号产生

要在基带上生成GPS信号,请遵循以下步骤。

  1. 以每秒50位的速度生成导航数据位。

  2. 根据配置生成C/ a -code、P-code、L2 CM-/L2 CL-code或组合。

  3. 散布CNAV或LNAV数据位与适当的测距码。

  4. 通过速率匹配每个分支中的代码来收集同相分支和四相分支的数据。

  5. 将两个分支上的位映射为位0到+1,位1到-1。

  6. (可选)将此基带波形写入文件(取决于WriteWaveformToFile属性值)。

根据配置,生成CNAV数据。

cnavData = HelperGPSNAVDataEncode(cnavConfig);

通过卷积编码器传递CNAV数据。

初始化卷积编码器的网格格子= poly2trellis(7,{“1 + x + x ^ 2 + x ^ 3 + x ^ 6的“1 + x ^ 2 + x ^ 3 + x ^ 5 + x ^ 6的});cenc = com . convolutionalencoder (“TrellisStructure”格子,...“TerminationMethod”“连续”);encodedCNAVData = cenc(cnavData);

根据配置,生成LNAV数据。

lnavData = HelperGPSNAVDataEncode(lnavConfig);

指定波形生成所需的所有属性。

CLCodeResetIdx = 75;% CL-code在重置前跨越75个数据位numBBSamplesPerDataBit = 204600;CLCodeIdx = mod(NavDataBitStartIndex-1,CLCodeResetIdx);IQContent = [IBranchContent,QBranchContent];pgen = gpsPCode(“PRNID”PRNID,“InitialTime”...lnavConfig.CEIDataSet.ReferenceTimeOfEphemeris,...“OutputCodeLength”, numBBSamplesPerDataBit);为速度预初始化基带波形gpsbb波形=零(numBBSamplesPerDataBit*NumNavDataBits,1);

创建一个写入波形的文件。

如果WriteWaveformToFile == 1 bbWriter = com . basebandfilewriter (“Waveform.bb”10.23 e6 0);结束

在一个循环中独立地处理每个导航数据位。

iDataBit = 1:NumNavDataBits dataBitIdx = iDataBit+NavDataBitStartIndex-1;bbsamplesindexes = ((iDataBit-1)*numBBSamplesPerDataBit+1):...(iDataBit * numBBSamplesPerDataBit);gpsbb波形(bbSamplesIndices) = helpergpsbaseband波形(IQContent,pgen,PRNID,...CLCodeIdx lnavData (dataBitIdx), encodedCNAVData (dataBitIdx));CLCodeIdx = mod(CLCodeIdx+1,CLCodeResetIdx);如果WriteWaveformToFile == 1 bbWriter(gpsbb波形(bbSamplesIndices));结束结束

如果打开该文件,则关闭该文件。

如果WriteWaveformToFile == 1 release(bbWriter);结束

信号的可视化

绘制C/ a代码的自相关图,并可视化GPS信号的频谱。

如果ShowVisualizations

测距码序列的自相关系数除延迟为零外均接近于零,而两个不同序列的相互相关系数则接近于零。由于C/ a码是周期为1023位的周期,自相关在每1023位的延迟有一个峰值。计算并绘制GPS扩频码的自相关。

因为p码比C/ a码或L2 CM-/L2 cl码快10倍,%初始化下采样因子为10downsampleFactor = 10;IBranchData = real(gpsbb波形);QBranchData = imag(gpsbb波形(1:downsampleFactor:end));滞后= (-1023:1023).';情节(滞后,xcorr(真实(QBranchData(1:1023)), 1023))网格包含(“延误样本数目”) ylabel (的自相关值)标题(GPS扩频码的自相关

比较同相支路和正交支路信号的功率谱密度。这个频谱图表明,当使用p码时,p码更宽。

repeatFactor = 40;重复生成的C/ a码BPSK信号,查看相邻波段频谱QBranchUpsampled = repmat(QBranchData(:).',repeatFactor,1);QBranchUpsampled = QBranchUpsampled(:);重复生成的同相组件BPSK信号,查看%相邻波段谱。少重复10次同相分支样本%,因为四相分支中的每个样本对应于同相分支中的10个样本IBranchUpsampled = repmat(IBranchData(:).',repeatFactor/10,1);IBranchUpsampled = real(IBranchUpsampled(:)));iqScope = dsp。简介(“SampleRate”1.023 e6 * repeatFactor,...“PlotAsTwoSidedSpectrum”,真的,...“SpectrumType”的功率密度...“AveragingMethod”“指数”...“SpectrumUnits”“瓦分贝”...“YLimits”(-130、-50),“标题”...GPS基带I和Q信号功率谱密度的比较...“ShowLegend”,真的,“ChannelNames”...{(带有内容的q分支频谱char (QBranchContent)),...“i -分支频谱与内容:”char (IBranchContent)]});iqScope ([QBranchUpsampled IBranchUpsampled]);

绘制基带处的信号功率谱密度。要观察GPS信号的相邻波段频谱,请在基带处重复信号。

repeatFactor = 4;重复生成的BPSK信号,查看相邻波段频谱updata = repmat(gpsbb波形(:).',repeatFactor,1);Updata = Updata (:);Bbscope = dsp。简介(“SampleRate”, 10 * 1.023 * repeatFactor e6,...“PlotAsTwoSidedSpectrum”,真的,...“SpectrumType”的功率密度...“AveragingMethod”“指数”...“SpectrumUnits”“瓦分贝”...“YLimits”(-120、-50),...“标题”“复杂基带GPS信号功率谱密度”);bbscope (updata);结束

图中包含一个轴对象。标题为“GPS扩频码的自相关”的坐标轴对象包含一个类型为line的对象。

进一步的探索

本例使用配置对象生成GPS数据位和基带中的导航信号。您可以替换此配置对象中的属性值,并观察GPS数据是如何生成的。您还可以使用现有的真实数据集更改星历表参数,并将这些参数传递到CEI数据集。此外,您还可以指定自己的年鉴文件。如果您正在使用自己的年历文件,则年历文件中的周数必须与配置对象中的周数匹配。

此外,本例展示了如何生成GPS基带波形,通过在同相分支上乘以余弦信号和在正交分支上乘以正弦信号,可以将其扩展为从基带波形生成中频(IF)波形。

此外,本例还展示了如何从一颗卫星生成GPS波形,该波形可以与多个卫星PRN代码结合以获得集成信号。

附录

这个例子使用了这些数据和帮助文件:

参考书目

[1] IS-GPS-200, Rev: L。导航星GPS空间段/导航用户段接口.2020年5月14日;代码识别:66RP1。

另请参阅

|

相关的话题