首页 一种卫星导航数字信号生成方法及服务器

一种卫星导航数字信号生成方法及服务器

举报
开通vip

一种卫星导航数字信号生成方法及服务器(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN111239774A(43)申请公布日2020.06.05(21)申请号202010086340.6(22)申请日2020.02.11(71)申请人中国人民解放军93216部队地址100085北京市海淀区安宁庄路11号院(72)发明人吴舜晓 朱文慧 史鹏亮 陈璐璐 李宁 王旭峰 (74)专利代理机构长沙国科天河知识产权代理有限公司43225代理人董惠文(51)Int.Cl.G01S19/23(2010.01)G01S19/30(2010....

一种卫星导航数字信号生成方法及服务器
(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN111239774A(43)申请公布日2020.06.05(21)申请号202010086340.6(22)申请日2020.02.11(71)申请人中国人民解放军93216部队地址100085北京市海淀区安宁庄路11号院(72)发明人吴舜晓 朱文慧 史鹏亮 陈璐璐 李宁 王旭峰 (74)专利代理机构长沙国科天河知识产权代理有限公司43225代理人董惠文(51)Int.Cl.G01S19/23(2010.01)G01S19/30(2010.01)权利要求书3页说明书10页附图2页(54)发明名称一种卫星导航数字信号生成方法及服务器(57)摘要本发明公开一种卫星导航数字信号生成方法及服务器,该方法包括:在服务器中分配三片内存与GPU共享;从预存伪码数据文件中读取各卫星的伪码数据并写入伪码数据缓存区,并将伪码数据的内存地址关联到GPU的纹理内存控制器中;获得仿真步长内用于生成导航数字信号的动态参数和电文参数,并写入参数缓存区;在CUDA环境下将计算任务并行分解,通过GPU共享参数缓存区和伪码数据缓存区的数据,并通过纹理内存控制器访问伪码数据,生成每个线程的处理数据,重复上述步骤完成所有仿真周期卫星导航数字信号的生成。解决现有技术中计算效率低等问题,实现高效计算。CN111239774ACN111239774A权 利 要 求 书1/3页1.一种卫星导航数字信号生成方法,其特征在于,在仿真服务器中分配三片内存与GPU共享,三片内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;包括以下步骤:步骤1,从预存的伪码数据文件中读取各卫星的伪码数据并写入伪码数据缓存区,将伪码数据缓存区中写入了伪码数据的内存地址关联到GPU的纹理内存控制器中;步骤2,通过在预定仿真场景中进行一个步长的数学仿真计算,获得仿真步长内用于生成导航数字信号的动态参数和电文参数,并写入参数缓存区;步骤3,以一个步长作为仿真区间并将仿真区间划分为多段连续的数据,GPU中包含多个并行线程,在CUDA环境下将计算任务并行分解,每个线程负责生成一段数据,设每个线程生成的采样点个数为Nb,线程个数为Ns,一个步长内生成的总采样点个数为N=Nb*Ns;通过GPU共享参数缓存区和伪码数据缓存区的数据,并通过纹理内存控制器访问伪码数据,以生成每个线程的处理数据,将所生成的处理数据写入采样数据缓存区,完成在一个仿真周期内卫星导航数字信号的生成;步骤4,重复上述步骤1~3,直到完成所有仿真周期卫星导航数字信号的生成。2.如权利要求1所述的卫星导航数字信号生成方法,其特征在于,所述GPU包括若干流处理器,每个流处理器上分配有多个并行的线程,该多个并行线程具有共享双精度浮点运算单元和共享内存,所述步骤3中生成每个线程的处理数据的步骤包括:步骤31,利用一个流处理器上分配的多个并行线程将所述参数缓存的用于生成导航数字信号的动态参数和电文参数拷贝到所述流处理器的共享内存,调用函数实现各线程的同步;步骤32,初始化Nb个采样点数据为0,并存储,计算各信号生成通道的信号并累加;步骤33,以双精度浮点运算单元计算对应于本线程数据段的第一个采样点的伪码相位cp和载波相位ca;步骤34,通过纹理内存控制器读取本线程所有可能用到的伪码数据;步骤35,根据获取的第一个采样点的伪码数据、载波相位和调制方式,计算本线程对应通道j的第一个采样数据,遍历所有通道并累加;采用单精度浮点计算单通道信号后续Nb-1个采样数据;步骤36,遍历完所有通道后,并与前面已生成的信号相加,将所有累加得到的Nb个采样点的数据转换为int4类型数据,并写入采样数据缓存区中。3.如权利要求2所述的卫星导航数字信号生成方法,其特征在于,所述步骤33中:传入GPU的信号生成参数已进行了归一化处理,载波相位的单位为弧度,即将其除以2π后得到载波周数,伪码相位的单位为码片,可以使用其整数部分作为选则伪码数据的索引,即对应典型的BPSK调制方式,采样数据的计算公式为:上式中,j=1,2,L L为信号生成通道的编号,k=0,1,2,L,N-1为各采样点的序号,为各通道信号的实部,为各通道信号的虚部,Aj为各通道信号的幅度,PNj[·]为各通道的伪码序列,floor(·)为向下取整函数。2CN111239774A权 利 要 求 书2/3页4.如权利要求3所述的卫星导航数字信号生成方法,其特征在于,所述步骤1中:在伪码数据文件中和内存中,均按照码率为10.23MHz的最高码率来存储码,保证在1ms的信号对应一个长度为10230的伪码数据段简称码块,对每个码块,都分配连续的640个16位无符号整数类型U16的内存来实现码数据的紧凑存储,在一个码块中,第0个U16数据最低bit即LSB存储第0个码片,最高bit即MSB存储第15个码片,第1个U16数据LSB存储第16个码片,MSB存储第31个码片,依此类推第639个U16数据的LSB存储第10224个码片,第5bit存储码段内的最后1位伪码;卫星信号的伪码周期正为1ms时,则第639个U16数据的最后10bit重复存储本码块的前10位伪码;伪码周期超过1ms则重复存储后一个码块的前10位伪码数据;所述步骤34具体包括:将cp向下取整得到其整数部分cp_int,将cp_int右移4位得到当前线程所需伪码数据在相应码块中的偏移地址addr,从相应的码块中取出偏移地址为addr及addr+1处的两个U16类型的数据,合并存储到一个32位无符号数Code中;记录cp_int的低4位为Bias,则Code中从第Bias位开始的10个数据bit即为当前线程所需的伪码数据,记此10个伪码数据为C[0]、C[1]至C[9],构成一个信号生成通道伪码序列PNj[·]的长度为10的片段,该片段可覆盖当前线程的伪码相位区间,且第一个采样点对应的伪码数据为C[0]。5.如权利要求4所述的卫星导航数字信号生成方法,其特征在于,所述步骤34中,通过数据比较来等效实现对cp的取整,包括:步骤341,根据多数应用场景,假设伪距率的变化范围不超过10-4倍的光速,获得双精度浮点类型的伪码相位的增长率参数cpS的取值区间为(0.20457954,0.20462046);步骤342,根据计算完第一个采样点后cp的取值范围为[0,1)的特点,可确定后续Nb-1个采样点的cp值的取值范围的上限序列和下限序列;步骤343,将每一个采样点的cp的取值范围与位于该取值范围内的整数值比较,以确定使用C[0]至C[9]中那个伪码数据参与调制计算,即等效实现选取C[floor(x)]参与调制运算。6.如权利要求5所述的卫星导航数字信号生成方法,其特征在于,步骤343中,在代码实现前对各采样的cp取值范围进行预测,设预测的取值范围为区间(a,b),则该区间的长度略微大于1,区间内只有1个或2个整数。对于区间(a,b)内只有一个整数x的情况,则当cp小于x时,取C[x-1]参与计算;cp大于或等于x时,取C[x]参与计算。对于区间内有x与x+1两个整数的情况,则当cp小于x时,取C[x-1]参与计算;当cp大于或等于x+1时,取C[x+1]参与计算,当cp大于或等于x且小于x+1时,取C[x]参与计算。7.如权利要求3~6任一项所述的卫星导航数字信号生成方法,其特征在于,所述步骤35中,根据公式(1)计算本线程第一个采样点数据,在使用公式(1)计算和累加数据时,对所有的乘法和加法使用单精度浮点计算,三角函数cos和sin的计算由GPU上的特殊函数处理单元执行;L为用于生成信号的通道个数,由数学仿真软件提供,每个通道j生成的信号为Sj[k]k=0,1,2,L,N-1j=1,2,L L,Sj[k]的实部为虚部为生成的对外输出的和信号为S[k],实部为SI[k],虚部为SQ[k];3CN111239774A权 利 要 求 书3/3页使用双精度浮点精度计算在一个线程中的伪码和载波初始相位的具体操作为:执行cp[0]=cpIj+(TxId-1)*Nb*cpSj,ca[0]=caIj+(TxId-1)*Nb*caSj,其中TxId为各线程的序号,取值范围为1至Ns,cpIj与caIj为本仿真步长的初始伪码与载波相位,cpSj与caSj为本仿真步长的伪码与载波相位的增长率,cpIj、caIj、cpSj、caSj从参数缓存区获取。使用单精度浮点计算的步骤包括:先执行ca[i]=ca[i-1]+caSfl与cp[i]=cp[i-1]+cpSfl,i为1~(Nb-1)之间的整数;caSfl是单精度表示的归一化载波相位的增长率,为F32类型,由采用双精度表示的载波相位增长率转换得到;cpSfl是单精度表示的伪码相位增长率,由采用双精度表示的伪码相位增长率转换得到;得到新采样点的cai与cpi后,再按照公式(1)计算信号数据。8.一种服务器,用于模拟仿真卫星导航数字信号的生成,包括GPU和服务器本体,其特征在于,所述GPU包括:线程分配单元,用于将计算任务划分到多个并发执行的线程上;若干流处理器,用于支持线程运行;每个流处理器包括多个标量处理单元、多个特殊函数处理单元、双精度处理单元、用于多线程并行运行的共享内存及寄存器文件;所述服务器本体包括存储器和处理器单元,所述存储器存储有卫星导航数字信号生成程序,在处理器单元中分配三片内存与GPU共享,三片内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;所述处理器单元在运行所述卫星导航数字信号生成程序时,执行所述权利要求1~7任一项所述方法的步骤。4CN111239774A说 明 书1/10页一种卫星导航数字信号生成方法及服务器技术领域[0001]本发明涉及卫星导航模拟仿真技术领域,具体是一种卫星导航数字信号生成方法及服务器。背景技术[0002]卫星导航模拟器根据对导航卫星星座和导航应用终端运动状态的仿真模拟,产生模拟真实接收机接收到的卫星射频信号,实现在实验室内模拟复杂的导航应用场景,是卫星导航领域重要的测试设备之一。近年来,随着卫星导航在无人机等高度领域应用的深入,相应的实验室模拟测试环境也更为复杂,需要将卫星导航与惯性导航传感器等一起模拟仿真,还需对组合导航算法、飞行控制算法和导航源切换与使用逻辑等进行仿真验证,这就要求卫星导航模拟器具有实时性高的闭环控制接口,可以与其他的仿真软件模块方便地实现交联。因此基于软件无线电技术的卫星导航模拟器系统架构被越来越多的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 人员采用,在此种架构下,卫星导航模拟器由一个功能简单、通用的数模转换设备和上变频的射频电路构成的前端和由服务器构成的后端组成,且由服务器完成整个卫星模拟以及采样数据生成,最后再将采样数据下发给数模转换设备实现模拟射频信号的输出。参见图1,基于软件无线电技术的卫星导航模拟器可被划分为后端(下文简称模拟源后端)和前端(下文简称模拟源前端):后端是高性能的服务器,在服务器上完成数学仿真,实时计算可见的卫星和用户到各卫星的载波伪距和码伪距等参数,并通过调用GPU(专用图形处理器)等高性能计算资源周期性地计算出对应一个仿真区间的卫星导航数字中频信号(通常为复整数,包括作为实部的I支路数据和作为虚部的Q支路数据),并通过万兆网卡与光纤或PCIE线缆等高速接口实时传送到前端;前端部分为将数字信号变换为输出的射频信号的硬件部分,此部分实时接收后端服务器计算好的数字中频信号,并将数字中频信号传送到实现数模转换和上变频的射频芯片以产生对外输出的射频信号。[0003]卫星导航模拟器的传统实现架构如图2所示:由服务器构成的工控机主要完成卫星轨道仿真、用户轨迹计算、电文生成等高层次的数学仿真;由DSP(数字信号处理芯片)构成的控制单元完成实时获取计算导航信号的参数,并将其适当转换和处理后传递到FPGA(可编程现场门阵列)中的信号生成通道中;在FPGA中通过实现多个信号生成通道和加法树,最终实现按照高的采样速率生成数字导航信号。信号生成通道是FPGA中实现信号生成的基本单元,每个通道由生成伪码相位与载波相位的NCO(数字控制震荡器)、伪码与调制符号生成和调制处理等模块构成,用于生成调制在同一卫星的同一载波上的信号。加法树用于将全部信号生成通道生成的数字信号并行求和后得到输出给射频芯片的数字信号。通常一个通道可以模拟一颗导航卫星的信号,卫星导航模拟器的信号生成通道数M只要大于最大的可见卫星数即可。为使仿真场景可体现存在导航欺骗信号和存在多路径效应等复杂情况,通常采用分配多个信号生成通道分别生成同一卫星的具有不同伪码延时、载波相位延时和幅度的信号的策略,因此在高端的模拟器中对通道数M的要求较高,即M越大,模拟器模拟复杂场景的能力越强。然而,在传统的实现架构中受限于FPGA的容量,卫星导航模拟器通5CN111239774A说 明 书2/10页道数M难以扩展到较大值。[0004]卫星导航模拟器通常以固定的仿真步长T执行仿真处理,设仿真系统使用的数据采样率为Fs,则在每个仿真步长内,需生成的导航信号采样点个数为N=FsgT。在传统架构中FPGA中有与采样频率相同的工作时钟,可确保每个采样时钟周期生成一个采样数据,在一个仿真步长内正好生成N个采样数据。改为新的基于软平台的实现架构后,原本由FPGA上的专用电路实现的计算任务改为由服务器上的通用计算资源来完成,因此服务器需在小于T的时间内生成N个采样数据,生成数据的算法主要实现对多普勒效应的模拟。在新的模拟器架构下,为保证对动态实现较逼真的模拟和实现实时闭环,需采用高的仿真更新频率,即要求T取1ms、2ms等较小值,此时在一个仿真步长内的伪码和载波相位可采用一阶线性插值获取,其生成采样数据的算法可按照如下的符号和公式表述:[0005]1)设L为用于生成信号的通道个数,是由数学仿真软件提供的参数;L≤M,M为支持的最大通道数,由GPU资源确定;[0006]2)设每个通道生成的信号为Sj[k]k=0,1,2,L,N-1j=1,2,L L,Sj[k]的实部为虚部为生成的对外输出的和信号为S[k],其实部为SI[k],虚部为SQ[k],则有:[0007][0008]3)设第j个通道的第k个采样点的伪码相位为cpj[k],载波相位为caj[k],则两个相位序列可表示为:[0009][0010]上式中的cpIj与caIj为本仿真步长的初始伪码与载波相位,cpSj与caSj为本仿真步长的伪码与载波相位的增长率,上述4个参数由数学仿真软件提供。上述伪码与载波的相位及其增长率均进行了归一化处理,载波相位的单位为弧度,即将其除以2π后得到载波周数,伪码相位的单位的码片,即可以使用CPj[k]的整数部分作为选择使用那个伪码数据参与调制的索引。在实际计算时,可将式(2)改为以递推方式计算,即:[0011][0012]4)根据上述码相位、载波相位和由数学仿真软件提供的反应信号功率的幅度参数与伪码序列(已与电文调制符号相乘)进行调制处理,计算单个通道的信号。对于采用BPSK调制的简单导航信号,设第j个通道的幅度为Aj,伪码序列为PNj[·],则生成的信号可表示为:[0013][0014]上式中floor(·)为向下取整函数。对于QPSK等其他调制类型,生成信号的表达式也可类似得到,此处不赘述。[0015]由于采样率Fs通常为50MHz,100MHz等较大的数据,服务器需生成的数据量较大,实现新架构卫星导航模拟器需突破提高服务器的计算能力关键技术。以采样率Fs为50MHz,6CN111239774A说 明 书3/10页仿真步长T为1ms,I、Q支路各使用16bit量化,模拟源模拟4个频点的信号,导航信号采用简单BPSK调制,每个频点15颗卫星为例,服务器需要在1ms内完成400000个16bit整数的计算,根据上述算法可知,每计算一个整数都涉及到产生载波,伪码与载波相乘、量化、累加等操作。若按照对应每颗卫星的一个数据点需要一次相位累加、一次加法、一次乘法、一次三角函数运算、一次浮点到定点的转换来计算(按5次计算),则生成信号的计算能力应大于30Gflops/s(单精度浮点运算)。如此规模的计算量,难以由服务器上的CPU完成,需使用服务器上的GPU来加速计算。虽然,典型GPU的计算性能峰值可达到1000Gflop(单精度浮点运算),但是峰值性能只有在使用公开的图形处理算法,针对特定的图形处理任务才能达到。目前尚没有公开的使用GPU计算导航中频信号的高效率算法,因此亟待提出针对GPU硬件架构和指令集特点的可充分发挥GPU计算能力的卫星导航数字中频信号的实现方法。发明内容[0016]本发明提供一种卫星导航数字信号生成方法及服务器,用于克服现有技术中计算量大、计算效率低等缺陷,针对GPU硬件架构和指令集特点进行优化,实现高效利用GPU计算资源实时生成卫星导航数字信号,提高计算效率。[0017]为实现上述目的,本发明提供一种卫星导航数字信号生成方法,在仿真服务器中分配三片内存与GPU共享,三片内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;包括以下步骤:[0018]步骤1,从预存的伪码数据文件中读取各卫星的伪码数据并写入伪码数据缓存区,将伪码数据缓存区中写入了伪码数据的内存地址关联到GPU的纹理内存控制器中;[0019]步骤2,通过在预定仿真场景中进行一个步长的数学仿真计算,获得仿真步长内用于生成导航数字信号的动态参数和电文参数,并写入参数缓存区;[0020]步骤3,以一个步长作为仿真区间并将仿真区间划分为多段连续的数据,GPU中包含多个并行线程,在CUDA环境下将计算任务并行分解,每个线程负责生成一段数据;[0021]通过GPU共享参数缓存区和伪码数据缓存区的数据,并通过纹理内存控制器访问伪码数据,以生成每个线程的处理数据,将所生成的处理数据写入采样数据缓存区,完成在一个仿真周期内卫星导航数字信号的生成;[0022]步骤4,重复上述步骤1~3,直到完成所有仿真周期卫星导航数字信号的生成。[0023]为实现上述目的,本发明还提供一种服务器,用于模拟仿真卫星导航数字信号的生成,包括GPU和服务器本体,所述GPU包括:[0024]线程分配单元,用于将计算任务划分到多个并发执行的线程上;[0025]若干流处理器,用于支持线程运行;每个流处理器包括多个标量处理单元、多个特殊函数处理单元、双精度处理单元、用于多线程并行运行的共享内存及寄存器文件;[0026]所述服务器本体包括存储器和处理器单元,所述存储器存储有卫星导航数字信号生成程序,在处理器单元中分配三片内存与GPU共享,三片内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;所述处理器单元在运行所述卫星导航数字信号生成程序时,执行上述方法的步骤。[0027]本发明提供的卫星导航数字信号生成方法及服务器,采用了将伪码数据紧凑存储,利用GPU中的纹理内存控制器访问伪码数据,使用各流处理器SM上的共享内存存储需频7CN111239774A说 明 书4/10页繁访问的信号生成参数和减少离散的全局内存访问等方法,克服了利用GPU生成导航信号时限制效率的内存访问瓶颈,针对GPU硬件架构和指令集特点进行优化,实现高效利用GPU计算资源实时生成卫星导航数字信号,提高计算效率。附图说明[0028]为了更清楚地说明本发明实施例或现有技术中的技术 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。[0029]图1为现有技术中基于软件无线电技术的导航模拟器系统架构示意框图;[0030]图2为传统基于FPGA实现信号生成的导航模拟器系统架构示意框图;[0031]图3为本发明实施例一提供的卫星导航数字信号生成方法的流程图。[0032]本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式[0033]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0034]需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。[0035]另外,在本发明中如涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。[0036]在本发明中,除非另有明确的规定和限定,术语“连接”、“固定”等应做广义理解,例如,“固定”可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接,还可以是物理连接或无线通信连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系,除非另有明确的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。[0037]另外,本发明各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。[0038]实施例一[0039]如附图3所示,本发明实施例提供一种卫星导航数字信号生成方法,针对GPU硬件架构和指令集特点进行优化,实现对卫星导航数字中频信号的高效计算。该方法通过开发基于英伟达(Nvidia)公司GPU的应用程序实现高效率的导航信号生成,所使用的开发环境为Nvidia提供的CUDA(Compute Unified Device Architecture)C编程环境。在CUDA C编程8CN111239774A说 明 书5/10页环境下,编写的软件程序将应用GPU的单指令多线程(Single-Instruction,Multiple-Thread,SIMT)架构实现基本的加速,即将全部的计算任务划分到多个并发执行的线程上(通常划分为100至1000量级的线程),而线程被分配给可以支持线程运行的最小硬件单元流处理器(Streaming Multiprocessor,简称SM)来执行。每个流处理器中有多个标量处理单元(Scalar Processor)和数量更少的特殊函数处理单元(Special Unit Function,SFU)和双精度处理单元(Double Precision Unit,DPU)以及支持32个线程并行运行的共享内存及寄存器文件。本发明方法将信号生成计算任务合理划分到各个线程上,并优化设计了每个线程计算生成导航信号的步骤,具体技术方案如下,一种高效利用GPU生成卫星导航数字中频信号的方法:[0040]首先完成硬件的配置,在仿真的服务器中分配三片内存与GPU共享,内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;[0041]分配与GPU共享的内存,服务器上的导航信号源桌面应用程序申请三片连续的内存作为与GPU共享的内存,分别为:信号动态参数与电文数据缓存区,记为M_dp;伪码数据缓存区,记为M_pn;信号采样数据缓存区,记为M_sig。[0042]每完成一个仿真周期的数字信号计算由以下步骤构成:[0043]步骤1,从预存的伪码数据文件中读取各卫星的伪码数据并写入伪码数据缓存区,将伪码数据缓存区中写入了伪码数据的内存地址关联到GPU的纹理内存控制器中;[0044]应用程序从伪码数据文件中读取各卫星的伪码数据,将其写入M_pn中,并将写入了伪码数据的内存部分关联到一个GPU的纹理内存控制器中,将该控制器记为texSatPn。为方便GPU可高效率地实现对伪码数据的访问,在数据文件中和内存中,本发明引入如下的码块结构来存储伪码数据:[0045]1)将伪码按照Fc=10.23MHz的码率插值后再存储,保证在1ms的信号对应一个长度为10230的伪码数据段,即对于码率较低的信号通过将一个码片复制多份的方式来构成长度为10230的码块,例如对于码率为2.046MHz的导航信号,将其一个码片看成是5个连续的取值相同的码片。[0046]2)对每个码块,都分配连续的640个16位无符号整数类型(U16)的内存来实现码数据的紧凑存储,在一个码块中,第0个U16数据最低bit(即LSB)存储第0个码片,最高bit(即MSB)存储第15个码片,第1个U16数据LSB存储第16个码片,MSB存储第31个码片,依此类推第639个U16数据的LSB存储第10224个码片,第5bit存储码段内的最后1位伪码。[0047]3)如果卫星信号的伪码周期正好为1ms,则第639个U16数据的最后10bit重复存储本码块的前10位伪码,若伪码周期超过1ms则重复存储后一个码块的前10位伪码数据。[0048]步骤2,通过在预定仿真场景中进行一个步长的数学仿真获得仿真步长内用于生成导航数字信号的动态参数和电文参数,并写入参数缓存区;[0049]应用程序利用CPU进行一个步长的数学仿真得到本仿真步长内用于生成导航数字信号的动态参数和电文参数,并将参数写入M_dp中。对于一个基本的BPSK导航信号分量,传递参数的结构体中具体包括:用于索引与当前仿真时刻对应的码块序号PnInd,以16位整数类型(U16)表示;伪码变化率CpStep,以双精度浮点类型(F64)表示;伪码初始相位CpInit(相位起点为前一个码块的边界),该参数由CPU以双精度浮点的精度计算,转换为单精度浮点类型(F32)存储;载波变化率CaStep,以F64类型表示;载波初始相位CaInit,该参数由CPU9CN111239774A说 明 书6/10页以F64的精度计算,转换为F32类型存储;信号幅度参数Amp,以无符号整数类型表示;待调制电文符号的数组NavD[],数组用于存储当前仿真区间内可能参与调制的电文符号,长度为仿真步长的毫秒数加2,以8位整数类型(U8)存储,0表示符号+1,1表示符号-1。[0050]步骤3,将一个步长内需生成的N个采样数据点,依时间先后顺序平均划分为Ns个连续数据段,数据段的长度为Nb(满足N=Ns*Nb),GPU中包含Ns个并行线程,每个线程负责生成一段数据,在CUDA环境下将计算任务并行分解,通过GPU共享参数缓存区和伪码数据缓存区的数据,并通过纹理内存控制器访问伪码数据,以生成每个线程的处理数据,将所生成的数据写入采样数据缓存区,在一个仿真周期内生成卫星导航数字信号;[0051]步骤4,重复上述步骤1~3,直到完成所有仿真周期卫星导航数字信号的生成。[0052]步骤3中,按照将仿真区间划分为连续数据段,每个线程负责生成一段数据的原则,使用CUDA环境将计算任务并行分解,启动GPU执行计算,所生成的数据写入M_sig中,并通知服务器的底层驱动软件,将生成的数据通过高速接口搬移到信号模拟源前端。设Ns个线程的编号依次为TxId=1,2,L Ns,则第TxId个线程将生成序号范围为(TxId-1)*Nb至TxId*(Nb-1)的Nb个采样数据。为实现任务的分解,需选择Nb以实现N=Ns*Nb的分解,选择Nb时需满足的条件为:Nb需为4的整数倍,且Nb个数据点所对应的时间长度约为8个10.23MHz码片的长度,即Nb为附近的整数。在本实施例中,选用采样率为Fs=50MHz、仿真步长为T=1ms,且单个信号源占用GPU上的5个SM的典型情况,在此种情况下,取Nb为40,在每个SM上分配250个线程,由此每个SM可生成10000个采样点,即0.2ms的数据,5个SM可完成一个步长的仿真数据的生成。每个线程上的具体计算执行步骤如下:[0053](S31)利用SM上的多个线程并行地将信号生成参数从M_dp拷贝到当前SM的共享内存中,第0个线程拷贝参数数据的第0至第31Byte,第1个线程拷贝参数数据的第32至63Byte,依次类推,完成数据拷贝后,调用__syncthreads()函数实现各线程的同步。本实施例中,单个SM上有250个线程,可拷贝8000Byte的信号生成参数。[0054](S32)初始化Nb个采样点数据为0,并使用float4类型存储,float4类型由4个F32成员构成,可存储4个采样点的数据。因此单个线程生成的导航信号的实部可以Nb/4个类型为float4的变量(本实施例中为V0I至V9I)存储,信号的虚部则也为Nb/4个float4类型的变量(本实施例中为V0I至V9I)存储。计算各信号生成通道生成的信号Sj[k],并完成式(1)所示的累加,即对循环遍历j=1,2,L L,执行(S33)至(S35)。[0055](S33)计算本线程第一个采样点的伪码相位和载波相位,计算时采用公式(2)的计算方式,即取k为(TxId-1)*Nb代入公式(2),计算过程中保持双精度浮点精度,并将所得到的相位结果转换为F32类型,将由此得到的伪码相位记为cp,载波相位记为ca。[0056](S34)利用纹理内存操作读取本线程所可能用到的伪码数据,存储在一个32位无符号整数中,具体方法如下:[0057]将cp向下取整得到其整数部分cp_int,将cp_int右移4位得到第一个码片在码块中的存储的偏移量addr,其最低4位Bias则是第一个码片在从addr读出的U16数据中的第几个bit。由于一个线程中的所能用到的码片个数不超过10个,再从addr+1读出一个U16数,将此两个数拼凑成U32的整数Code,则生成信号所需的伪码数据全部在Code中(地址addr处的数据在低16bit,地址addr+1处的数据在高16bit),且第0bit对应于Code的第Bias bit,第10CN111239774A说 明 书7/10页10bit位于Code的第(Bias+9)bit。记录cp_int的低4位为Bias,则Code中从第Bias位开始的10个数据bit即为当前线程所需的伪码数据,记此10个伪码数据为C[0]、C[1]至C[9],即C[0]至C[9]为算法描述中伪码序列PNj[·](已与电文调制符号进行了异或处理)的一个长度为10的片段,该片段可覆盖当前线程的伪码相位区间,且第一个采样点对应的伪码数据为C[0]。[0058]上述操作通过利用前述码块结构可紧凑存储伪码数据的特点,使得通过两个访问U16数据的全局内存访问操作,一次性获取了生成Nb个采样数据所需的伪码,而常规方法需要进行Nb次访问U8类型数据的全局内存访问操作。同时,通过使用纹理内存控制器也加快了内存访问速度,因此本方法有效克服了利用GPU生成导航信号时限制效率的内存访问瓶颈,有效缩小了算法实现中内存访问的开销。[0059](S35)根据第一个采样点的伪码数据为C[0]、载波相位ca和调制方式,计算出本线程对应通道j的第一个采样数据,并实现公式(1)所示的按通道累加。在采用BPSK调制的情况下,参考公式(4)可知,计算单通道信号时,所需执行的操作为与对于本线程后续的Nb-1个采样点,其单个通道信号的计算方法为:[0060]1)将cp改为只保留其小数部分,即执行cp=cp-floor(cp);floor(cp)表示对cp取整;[0061]2)将双精度浮点类型的伪码相位和载波相位的增长率参数(即cpSj与caSj)转换为F32类型,分别记为cpSfl与caSfl;[0062]3)参照公式(3)以累加的方式,按照单精度浮点的精度,迭代计算伪码相位和载波相位,即执行Nb-1次cpi=cpi-1+cpSfl与cai=cai-1+caSfl,并在每次相位累加更新后,用新的cp值确定当前采样点所对应的伪码数据为C[x],x=floor(cp),随后调制方式计算出单个通道的采样数据,在采用BPSK调制的情况下,参考公式(4)可知,计算操作为与随后实现按通道累加。[0063]在本步骤的计算过程中,只有计算第一个采样点的相位是按照双浮点精度计算,其余的所有计算均采用单精度浮点,但由于累加次数少,误差未被积累,可确保对导航信号所关注的测距精度的影响可以忽略。三角函数cos和sin的计算由GPU上的特殊函数处理单元执行,不采用传统的查找表方法,所得载波波形的精度较高。上述设计,可充分利用GPU具有较多单精度浮点计算资源的特点。[0064]为进一步优化代码执行效率,考虑到在GPU上实现单精度浮点数的取整操作也需要较多时钟周期,本发明利用伪码相位增长率的取值范围较小的特点,将(S34)步骤中确定伪码数据的索引x所需的取整计算改为通过浮点数的比较来实现,具体原理及步骤如下:[0065](S341)注意到伪码增长率cpSj的标称值为Fc/Fs,在本实施例中具体为10.23/50=0.2046,对于一般的导航应用场景,可以合理假设伪距率的变化范围不超过10-4倍的光速(对应的相对卫星的最大径向速度可达29.979Km/s,涵盖了绝大多数应用场景),此时可确定cpSj的取值区间为(0.20457954,0.20462046)。[0066](S342)根据计算完第一个采样点后cp的取值范围为[0,1)的特点,可确定后续39个采样点的cp值的取值范围的上限序列为:11CN111239774A说 明 书8/10页[0067][1.20462046,1.40924092,1.61386138,1.81848184,2.0231023,2.22772276,2.43234322,2.63696368,2.84158414,3.0462046,3.25082506,3.45544552,3.66006598,3.86468644,4.0693069,4.27392736,4.47854782,4.68316828,4.88778874,5.0924092,5.29702966,5.50165012,5.70627058,5.91089104,6.1155115,6.32013196,6.52475242,6.72937288,6.93399334,7.1386138,7.34323426,7.54785472,7.75247518,7.95709564,8.1617161,8.36633656,8.57095702,8.77557748,8.98019794],[0068]下限序列为:[0069][0.20457954,0.40915908,0.61373862,0.81831816,1.0228977,1.22747724,1.43205678,1.63663632,1.84121586,2.0457954,2.25037494,2.45495448,2.65953402,2.86411356,3.0686931,3.27327264,3.47785218,3.68243172,3.88701126,4.0915908,4.29617034,4.50074988,4.70532942,4.90990896,5.1144885,5.31906804,5.52364758,5.72822712,5.93280666,6.1373862,6.34196574,6.54654528,6.75112482,6.95570436,7.1602839,7.36486344,7.56944298,7.77402252,7.97860206]。[0070]通过观察以上数据可知,在每一个采样点处其cp值的取值范围只跨越2个整数,因此通过简单与整数值做比较即可判断使用那个伪码bit,例如:对第5个采样点,由于已知cp的取值范围为1.0228977至2.0231023,因此将cp与2.0做比较,若大于或等于2.0则使用伪码数据C[2],若小于2.0则使用C[1]。[0071](S36)遍历完L个参与信号生成的通道后,将Nb/2个存储了累加数据的float4类型的数据(本实施例中为V0I、V1I至V9I和V0Q、V1Q至V9Q)转换为int4类型数据(本实施例中为S0、S1至S9),具体操作为先将V0I.x和V0Q.x转换为16位有符号数,再将两个16位有符号数合并为一个32位整数存入S0.x,依此类推处理完Nb个采样点后,将所得数据写入M_sig中。[0072]由于GPU可使用单条指令实现int4类型数据的内存访问,将Nb个采样点的数据合并存储到Nb/4个int4类型的变量,可提高对GPU内存带宽的使用率,在将采用点数据写入M_sig时提高效率。[0073]与现有技术相比,本发明的优点在于:[0074](1)本发明在生成导航信号时,本地载波采用单精度浮点数直接计算,载波波形的精度高于传统采用查找表方式实现的三角函数。[0075](2)本发明采用了将伪码数据紧凑存储,利用全局的纹理内存控制器访问伪码数据,使用各SM上的共享内存存储需频繁访问的信号生成参数和减少离散的全局内存访问等方法,克服了利用GPU生成导航信号时限制效率的内存访问瓶颈。[0076](3)本发明利用载波和相位误差不会在短时间内发散地特点,在不影响信号仿真精度的同时,采用抽样执行双精度相位计算的策略,充分利用了GPU擅长进行单精度浮点运算的特点。[0077](4)充分利用了伪距变化率有较小取值范围的先验信息,将大量检索伪码码片的操作转为为浮点数的比较操作,使得算法与GPU的计算资源很好的匹配。需要说明的是,本技术方案不仅适用于导航数字中频信号的生成,还适用于各种基于软件无线电技术的通信信号的生成。[0078]采用本发明方法编写的导航信号生成GPU应用程序,在NVIDIA(英伟达)公司的Quadro系列的专用图形显卡上运行时,可使得衡量GPU代码执行效率的指标IPC(每一时钟12CN111239774A说 明 书9/10页周期内所执行的指令多少)达到4左右,而通常采用的直接将信号生成算法映射为GPU程序的方法,其IPC指标通常不到0.1,因此本发明的方法使得GPU在计算导航信号的能力提升40倍以上。[0079]在某卫星导航信号源的设计中,为了支持集成无人机的飞行控制逻辑和运动学仿真模型以实现闭环仿真,采用了如图1所示的实现架构,其中服务器选择的型号为HP的Z840台式服务器,配置一块型号为Quaro M5000的GPU专用于使用CUDA计算生成导航信号。在桌面应用程序的调度下,专门启动一个基于CUDA编写的程序执行调用GPU计算导航信号,该程序计算生成导航信号的核心部分依照S1至S3的步骤执行。由于Quaro M5000上有15个SM,每5个SM用于产生对应一个频点的导航信号,支持覆盖北斗的三个频点。导航模拟源按照采样率为50MHz,仿真步长为1ms设计,对于北斗的大部分采用QPSK调制的信号,由CPU传递给GPU的参数采用如下的数据结构:[0080][0081]其中,宏参数MaxChlNum为124,即最多可使用124个通道来生成导航信号,nChNum表示本次计算中实际使用的通道个数,nChNum应不超过MaxChlNum,结构体SpecToDev用来存储每个QPSK通道的信号生成参数,其具体定义如下:[0082]13CN111239774A说 明 书10/10页[0083]实际测试表明,在使用36个通道进行信号生成的典型情况下,GPU生成1ms的采样数据所需时间约为0.3ms,整个信号源可以正常运行。由于最多可支持的通道个数为124(等效于实现了一个通道数为M=124的传统信号源),故还可以利用多余的通道模拟多径效应和完好性故障,以及存在产生式和转发式欺骗干扰的情况,很好地验证了基于软件无线电平台的卫星导航模拟源具有充分的灵活性和可扩展性的优点。[0084]实施例二[0085]基于上述实施例一,本发明提供一种服务器,用于模拟仿真卫星导航数字信号的生成,包括GPU和服务器本体,所述GPU包括:[0086]线程分配单元,用于将计算任务划分到多个并发执行的线程上;[0087]若干流处理器,用于支持线程运行;每个流处理器包括多个标量处理单元、多个特殊函数处理单元、双精度处理单元、用于多线程并行运行的共享内存及寄存器文件;[0088]所述服务器本体包括存储器和处理器单元,所述存储器存储有卫星导航数字信号生成程序,在处理器单元中分配三片内存与GPU共享,三片内存包括参数缓存区、伪码数据缓存区和采样数据缓存区;所述处理器单元在运行所述卫星导航数字信号生成程序时,执行任意实施例一所述方法的步骤。[0089]以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。14CN111239774A说 明 书 附 图1/2页图1图215CN111239774A说 明 书 附 图2/2页图316
本文档为【一种卫星导航数字信号生成方法及服务器】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
dskhdzw
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:0
分类:生产制造
上传时间:2021-08-09
浏览量:23