本发明涉及gnss卫星信号领域,具体为一种基于cuda的并行码相位搜索捕获方法。
背景技术:
1、随着全球卫星导航系统(gnss)的不断发展以及社会发展的需求的提高,人们对于导航定位服务的要求越来越高,高要求同时也带来高计算量。不同于硬件接收机拥有大量的微型高速处理器,软件接收机中的通用处理器的计算速度明显不足,而且对于需要具有其他功能如干扰检测或高精度定位能力的接收机来说,基带信号处理的计算量也成比例上升。因此,针对基带信号处理过程的快速实现成为软件接收机的研究重点。为了解决这一问题,软件无线电领域研究人员开始研究基于gpu的通用计算(general purpose gpu,gpgpu),其主要研究内容是利用gpu拥有的大量并行处理单元来进行图像处理以外的更为广泛的应用计算。cpu+gpu异构模式是一种gpgpu计算中常用的架构方式。在这种架构下,复杂的逻辑处理和事务管理等任务交由cpu执行,而大规模的数据并行计算则交由gpu进行运算。对于大部分民用软件接收机来说,基带信号处理速度低,因此基带信号处理过程的快速实现成为对民用软件接收机的发展具有重要的意义。结合gpu计算并行特点,优化码并行捕获算法,减少捕获运算计算量,缩短捕获计算时长具有一定的现实意义。
2、在传统并行码相位搜索算法中,搜索过程是对单颗卫星在一个频率上对一个相干时间长度的信号数据进行搜索,卫星捕获所需的计算时长较长。
3、与现有技术对比如下:
4、与专利cn101561489a“采用码相位多路并行搜索卫星信号的芯片设计方法”的技术对比:
5、一、专利cn101561489a是为了适当增加芯片资源的基础上增加单位时间码相位搜索范围,减少数据存储次数,从而提高北斗卫星基带处理芯片的捕获速度,提高芯片的性能。而我们的方法旨在提供一种基于cuda的并行码相位搜索捕获方法,结合gpu计算并行特点,对捕获算法中载波生成等子模块进行并行优化,从而缩短捕获时长。
6、二、专利cn101561489a主要是改进芯片设计,利用滑动相关电路实现并行。而我们所提出基于cuda的并行码相位搜索捕获方法主要是对传统基于cpu的并行码相位搜索捕获方法进行改进,主要改进软件算法,更具有经济实用性与便利性。
7、三、专利cn101561489a主要是实现码相位的并行搜索,而我们的所提出的算法实现了在多个频点上对32颗卫星同时进行搜索且多个相干过程也并行进行,并行程度更高。
8、与专利cn107907893b“基于并行频率与并行码搜索的分段式可配置军码直捕方法”的技术对比:
9、一、专利cn107907893b旨在能够在码相位时间不确定度较大条件下实现军码快速直接捕获,同时采用分段方法减少fft运算点数,从而减少硬件资源利用率。而我们所提出的于cuda的并行码相位搜索捕获方法旨在利用gpu计算并行特点,并行优化捕获算法,从而缩短捕获时长。
10、二、专利cn107907893b主要通过对数字中频信号的分段与拼接减少fft运算的点数,从而减少硬件资源率。而我们提出的方法不仅将相干过程并行进行,还同时生成多个载波频率,在所有搜索频率上对卫星进行搜索捕获,目的是为了缩短捕获时长。
11、三、专利cn107907893b主要是对单颗卫星的搜索捕获流程进行改进,而我们所提的方法同时生成32颗卫星的c/a码,同时对32颗卫星进行搜索捕获且在多个频点上同时进行搜索,并行程度较高。
技术实现思路
1、针对以上问题,本发明提出了一种基于cuda的并行码相位搜索捕获方法,该方法结合gpu计算的并行特点,对码并行捕获算法中载波生成等子模块进行并行优化设计,实现32颗卫星同时进行捕获大数据量计算。该方法中多个频点上32颗卫星并行搜索,并且同一频率上的多次相干过程并行,因此相较于传统基于cpu的捕获方法,可以缩短计算时长。
2、为实现上述目的,本发明采取的技术方案是:
3、一种基于cuda的并行码相位搜索捕获方法,包括如下步骤:
4、(1)读取卫星中频信号后,同时生成32颗卫星的本地c/a码并进行fft和取共轭运算,在同一频率上同时对32颗卫星进行搜索;
5、(2)在确定所有搜索频率后,在所有搜索频率上生成本地载波数据,不同载波频点上搜索过程相互独立,多个频点上多颗卫星搜索捕获同时进行;
6、(3)在生成本地载波后,同一频率上的多次相干过程并行,载波剥离后进行fft运算;
7、(4)将(1)中得到的32颗卫星的c/a码序列fft取共轭的结果分别与所有频点上的载波剥离数据相乘进行码剥离,然后进行ifft运算,最终得到包含32颗卫星在所有多普勒频点上的搜索结果。
8、作为本发明进一步改进,步骤(1)具体包括:
9、(1.1)读取卫星中频信号;
10、在天线接收到的卫星i的信号s(i)(t)为:
11、
12、其中,为天线接收到的卫星信号的平均功率;x(i)(t)为卫星的c/a码,d(i)(t)为数据码,两者取值只可能为±1;θ1(i)为载波初相位;τ(i)为传播延迟;为多普勒频移,其值远小于卫星载波频率f1;
13、利用混频器对接收到的信号进行下变频处理:
14、本振信号slo(t):slo(t)=alosin(2πflot+θlo)
15、其中,alo为本振信号的振幅,flo为频率,θlo为初相位;
16、
17、保留低频分量即得到混频器输出的中频信号
18、
19、其中:
20、
21、θif=θ-θlo+90°
22、fif=f1-flo
23、(1.2)对1023个c/a码片进行采样,并将每颗卫星的c/a码元素长度扩展为2n,在cuda程序中设计32行线程块,每个线程块以及其包含的线程相互独立,同时计算32颗卫星的c/a码序列,并行设计c/a码生成器;
24、(1.3)对c/a码进行fft运算并取共轭。
25、作为本发明进一步改进,步骤(2)具体包括:
26、(2.1)根据gps卫星信号的多普勒频移以及搜索步长,确定需要搜索的次数以及所有搜索频率;
27、n=f/f+1
28、其中,n为搜索次数,f为gps卫星信号频率搜索范围,f为搜索步长。
29、(2.2)所有搜索频率上的本地载波每隔一个相干周期长度补零至2n以便后续fft处理,在所有搜索频率上生成本地载波。
30、作为本发明进一步改进,步骤(3)具体包括:
31、(3.1)在cuda程序中,线程块设计为x×y×z块,每个线程块中包含1024个线程,在同一行,即沿x方向上的相乘计算一个相干周期长度的载波数据,在不同行,即沿y方向上区分不同的搜索频点,z维度表示两段相干周期长度的载波数据;
32、(3.2)同时读入连续两个相干时长的信号数据,与生成的载波数据对应相乘,得到载波剥离数据。
33、作为本发明进一步改进,步骤(4)具体包括:
34、(4.1)在cuda程序中,线程块设计为x1×y1×z1块,每个线程块中包含1024个线程,在x1方向对应一颗卫星c/a码剥离的数据,y1方向表示不同的卫星,z1方向表示不同的非相干数据,确认每个线程的序号以及线程在载波剥离数据、c/a码数据和码剥离数据中对应的位置,让每一个计算结果都由一个线程负责;
35、(4.2)将32颗卫星的c/a码序列的fft结果分别与所有频点上的载波剥离数据相乘,将所得乘积经过傅里叶反变换得到在时域内相关结果,对这些相关值进行检测,得到一个包含32颗卫星在所有多普勒频点上的搜索结果;
36、长为n点的两个周期性序列x(n)与y(n)的相关值z(n)为:
37、
38、对上述相关值进行离散傅里叶变换,得到z(n)的离散傅里叶变换z(k):
39、
40、其中,y*(k)为复数y(k)的共轭。
41、本发明采用以上技术方案与现有技术相比,具有以下技术效果:
42、本发明结合了gpu计算的并行特点,对码并行捕获算法中载波生成等子模块进行并行优化设计,实现32颗卫星同时进行捕获大数据量计算。首先同时生成32颗卫星的c/a码,同时对32颗卫星进行搜索。其次同时生成所有搜索频率上的载波并将同一搜索频率上的多次相干过程并行设计,利于gpu计算并行的特点,缩短了卫星捕获的计算时长。