胡铁乔,赵冬辉
(中国民航大学天津市智能信号与图像处理重点实验室,天津 300300)
随着全球定位系统(GPS,global positioning system)定位精度的不断提高,GPS 已逐渐成为车辆的基本配置之一[1]。传统抗干扰GPS 接收机一般是由RISC 微处理器(ARM,advanced RISC machines)和现场可编程门阵列(FPGA,field programmable gate array)的架构方案实现,接收天线通常采用体积大、成本高、功耗高的4 阵列天线或7 阵列天线。但由于车载设备对体积、成本、功耗有较高要求,传统抗干扰接收机不能直接应用到汽车上。因此,有必要研制一款车载抗干扰GPS 接收机。
目前,国外的抗干扰GPS 接收机正在向多通道、多频点方向发展[2],国内正处于起步阶段,大部分研究只进行了仿真验证,部分在硬件平台实现的又不适用于车载。文献[3]设计的基于FPGA 的高动态GPS信号实时捕获模块,采用快速傅里叶变换(FFT,fast Fourier transform)并行相关的信号捕获方法,硬件平台是数字信号处理器(DSP,digital signal process)和FPGA,天线采用体积较大的7 阵列天线,具有一定的抗干扰功能。文献[4]提出的L1/L2 双频车载GPS 软件接收机快速捕获算法,实现车载双频GPS 软件接收机,但并没有在硬件平台上实现。文献[5]设计的ZYNQ-7000星载双模卫星导航接收机在ZYNQ 平台上通过仿真数据对算法进行验证,实现GPS 接收机,但尚未验证实时数据。以上方法均无法满足车载设备需求。
针对GPS 接收机的研究现状,设计并实现满足车载GPS 接收机功能需求的捕获模块。由于车载设备对体积、功耗等方面有较高要求,最终采用威视锐公司的Y320 平台。该平台的射频端采用体积小、成本低的双通道双天线AD9361,同时平台功耗控制在3 W 以内;捕获算法采用基于FFT 的并行码搜索算法,中频信号在ZYNQ 的可编程逻辑(PL)模块中进行捕获,捕获结果发送到ZYNQ 的处理系统(PS)进行处理,通过仿真数据与实际采样数据对捕获模块进行功能测试与性能测试。测试结果表明,该捕获模块能够正确捕获卫星信号,满足GPS 接收机需求,为实现跟踪、定位、抗干扰等功能提供基础。此外,该平台设计的捕获模块还可用于机载GPS 接收机,实用性较强。
GPS 接收机接收到第m 颗卫星信号为
式中:Am为振幅;Cm(t)为C/A 码,周期1 ms,码速率为1.023 MHz;Dm(t)为导航数据;f1为载波频率;θ1为频偏;n(t)为均值0、方差σ2的带限高斯白噪声。
为了提取卫星信号中的导航数据,首先要对卫星信号进行捕获。捕获原理是利用接近Sm(t)的载波频率f1生成的本地载波去除卫星信号的载波成分,再与本地生成的C/A 码进行乘法运算,去除卫星信号的C/A码,最终获得峰值与峰值所在位置,即载波频率与C/A 码。捕获过程就是获取信号的载波频率与C/A 码的粗略值。算法具体原理分析详见文献[3],不再赘述。
捕获一般分为时域串行捕获、基于FFT 并行相关捕获和匹配滤波器捕获[6]。捕获主要有3 个步骤:①确定将要进行捕获的卫星号;②确定载波频率;③确定C/A 码相位[7]。具体流程如下:首先,产生本地载波信号和指定卫星的C/A 码,通过混频生成本地信号;然后,实际信号和本地信号进行FFT 和快速傅里叶逆变换(IFFT,inverse fast Fourier transform),检测本地信号和实际信号的相关程度,当本地信号与实际信号的载波频率接近,C/A 码也完全相同时,才会输出峰值,即捕获到指定卫星。图1 是基于FFT 并行码相位捕获框图。
图1 基于FFT 并行码相位捕获框图Fig.1 Block diagram of parallel code phase acquisition based on FFT
传统GPS 接收机采用ARM 与FPGA 架构,有时也采用DSP 与FPGA 架构。在理论上,ARM 是一种微处理器,具有较强的事务管理能力,在控制方面具有一定优势,但数据处理能力一般;DSP 具有强大的数据处理能力与处理速度,但控制方面能力一般;FPGA 通过硬件描述语言实现数字电路功能;ARM 或DSP与FPGA 组合时需要电路连接,并使用通信总线进行通信,本文中使用的ZYNQ 芯片的PL 与PS 通信取消了通信总线,减少了资源消耗。在开发实现上,ARM、DSP、PS 均使用C 语言,FPGA、PL 使用Verilog HDL 语言。在性能上,ZYNQ 芯片集成度高、功耗较低、体积较小,但ZYNQ 芯片相比较于FPGA、ARM、DSP 而言问世时间较短,国内外对其研究的相关内容较少,可参考资料也较少。
综上,设计的捕获模块总体框图如图2 所示。捕获功能在PL 中实现。为实现捕获模块功能,在PS 中对捕获模块进行初始化并对捕获结果进行处理。其工作流程如下:①PS 的初始化模块将初始载波频率、载波搜索步长、搜索卫星号、搜索时间等信息即FreCode发送PL;②时钟生成模块生成捕获模块的工作时钟;③中频信号进入信号预处理模块,将40 MHz 采样频率降为5.714 286 MHz 的数据速率;④在复乘模块与直接数字频率合成技术(DDS,direct digital synthesis)模块产生的本地载波相乘,去除载波信号;⑤在平均采样模块对信号进行5 或6 点采样,目的是降低FFT模块的运算量;⑥平均采样后数据进行FFT;⑦将FFT后的运算结果与C/A 码FFT 共轭复乘;⑧复乘结果进行IFFT 运算;⑨对IFFT 后的数据取模值,存储在模值存储模块;⑩遍历存储器,搜索到最大值与次大值;1○将最大值与次大值及其位置发送到PS 的捕获结果处理模块。
图2 捕获模块总体框图Fig.2 Framework of acquisition modules
硬件平台采用威视锐公司的Y320 平台,该平台上集成了ZYNQ -XC7Z020-CLG400ABX1829 芯片与AD9361 射频收发器。ZYNQ 芯片包含2 部分:PS 和PL。图3 是ZYNQ 芯片的简化模型,简单来说,PS等价于一个双核ARM,PL 等价于FPGA,PS 与PL之间的通信采用AXI4-Lite 总线。图4 是Y320 硬件平台。
图3 ZYNQ 芯片的简化模型Fig.3 Simplified model of ZYNQ architecture
图4 Y320 硬件平台Fig.4 Y320 hardware platform
1)PS 部分
PS 部分主要由2 片Cortex-A9 芯片构成。此外,PS 还包括各种接口,如DDR 存储器接口、通用异步收发器接口、通用输入输出接口等。
2)PL 部分
PL 部分是由逻辑片与可配置逻辑块构成,每个接口都有对应配套的输入/输出块。除此以外,还有2 个特殊模块:①随机存取存储器(RAM,random access mo mery),每个块RAM 大小都为36 kB,专门用于存储大量数据;②DSP48E1 是专门的乘加运算器。
3)AXI4-Lite 总线
AXI4-Lite 总线在工作时采用握手结构,当主设备与从设备之间进行通信时,需要Tready、Tvalid 进行握手。当接收方准备好接收数据时将Tready 信号拉高,通知发送方下一个时钟脉冲到来时可以接收数据,当Tready 拉高后,发送方将Tvalid 拉高,表示数据有效,只有Tready 与Tvalid 都为高时才可以进行通信。
4)AD9361 芯片
AD9361 是ADI 公司的零中频射频收发器[8]。接收端可以接收两路射频信号,发射端可以发射两路射频信号,射频频率为0.07~6.00 GHz,采样带宽为0.2~56.0 MHz。接收端和发射端均采用12 位数/模转换器,且支持频分双工与时分双工。
AD9361 各种参数的配置是通过编程方式写入寄存器实现的,AD9361 能否正确配置十分重要,这关乎到AD9361 能否正常工作及后续ZYNQ 芯片能否读取正确数据。PS 通过总线读写AD9361 寄存器,控制AD9361 工作状态。这里将数据传输模式设置为全双工、接口时钟160 MHz、采样频率40 MHz、本振频率1 575.42 MHz、带宽1.5 MHz、接收射频增益为63 dB。图5 是AD9361 功能框图。
图5 AD9361 功能框图Fig.5 Functional block diagram of AD9361
为实现实时捕获,模块使用3 种时钟频率:5.714 286、80、200 MHz。需要用160 MHz 时钟进行分频与倍频。C/A 码速率为1.023 MHz,根据奈奎斯特定理,采样频率≥2.046 MHz 即可,这里设置采样速率为5.714 286 MHz。AD9361 采样频率为40 MHz,因此对采集后的数据进行7 倍抽取。捕获模块主要包括初始化,时钟生成,信号预处理,复乘,平均采样,FFT 与IFFT计算,最大值,次大值搜索,捕获结果处理8 个模块。
1)初始化模块
初始化模块对处理器进行参数配置,并启动捕获程序。
2)时钟生成模块
Vivado 中有专门进行分频与倍频的IP 核,调用Clocking Wizaard 模块,选择混合模式时钟管理器的架构,主时钟频率设置为160 MHz,输出时钟频率设置为80 MHz 和200 MHz,输出时钟占空比设置为50%,相位设置为0。由于5.714 286 MHz 时钟的频率较低,因此不能在此模块生成,由信号预处理模块产生。
3)信号预处理模块
调用有限长单位冲击响应滤波器(FIR,finite impulse response)模块,滤波器模式设置为抽取,采样频率设置为40 MHz,工作时钟160 MHz,先滤波再抽取。由于因此抽取速率设置为7,每7 个时钟才输出一次数据,相当于采样率降低了7 倍,每次输出数据时都会产生一个Tvalid 脉冲,表示数据有效,这个脉冲频率即为捕获模块数据输入速率,为5.714 286 MHz。最后把Matlab 生成的系数文件导入滤波器模块。
4)复乘模块
根据文献[3],载波频率至少需要搜索20 kHz 的带宽,设置步频为666.67 Hz,共计31 个频点。PS 将数字中频频率发给PL,PL 的DDS 模块产生对应频率的载波。
采样存储模块地址大小为11 428 bit,数据输入速率为5.714 286 MHz,因此可以存2 ms 的数据,每存入1 ms 数据便按200 MHz 时钟频率读取数据进行下一步。这里采用的是乒乓架构,目的是实现实时计算。
复乘模块将生成的载波与存储模块读取的数据在200 MHz 时钟下进行混频。
5)平均采样模块
对一组数据延时2 个时钟,另一组不进行延时,延时的一组偏移量为2,未延时的一组偏移量为0。设置偏移量的目的是将精度提高到半码片。由于数据输入速率为5.714 286 MHz,在1 ms 内有5 714 个数据,为减少后期FFT 与IFFT 的运算时间和运算量并减少PL 的IP 核的资源消耗,采用了平均采样方案,即按照规则对数据进行5 或6 个数据点累加,最后得到两组1 024 个数据点。
6)FFT 与IFFT 模块
Matlab 计算C/A 码的FFT 共轭并转换为coe 文件,存储在PL 的只读存储器(ROM,read-only memory)中。FFT 模块对累加模块输出的数据进行FFT 再与C/A码的FFT 共轭进行复乘。最后进行IFFT 运算,共计需要处理2×31 次的1 024 点IFFT。
FFT 模块是捕获的关键模块。Vivado 的FFT 模块和以前开发软件ISE 的FFT 模块相比有较大不同,Vivado 中删除原有的输入数据计数标志,增加了新的输入数据有效的握手信号。
图6 是Vivado 中FFT 的IP 核示意图。下面介绍参数配置与关键端口。
图6 FFT 模块IP 核Fig.6 Intellectual Property core of FFT module
FFT 变换点数设置为1 024。架构选择并行流水线结构,该结构虽消耗资源最大,但运算最快。输入数据格式为定点,输出数据进行截位,输入、输出位宽均为16 bit,FFT 计算结果以自然顺序输出。
图6 中关键的输入端口有6 个:①aresetn 是FFT复位信号,1 bit,低电平有效,是FFT 模块优先级最高的信号;②aclk 是FFT 工作时钟,1 bit,频率为80 MHz;③aclken 是FFT 时钟使能信号,1 bit,高电平有效,只有当高电平时,FFT 模块才进行计算,否则将暂停,直到高电平的到来;④s_axis_config_tdata 是FFT/IFFT 与衰减因子配置端口,16 bit,低10 bit 有效;⑤s_axis_data_tvalid 是输入数据有效标志,1 bit;⑥s_axis_data_tdata是数据输入端口,32 bit,携带未经处理的样本数据,第0~15 bit 为实部,第16~31 bit 为虚部。
图6 中关键的输出端口有4 个:①s_axis_data_tready是状态准备标志,1 bit,表示准备接收数据;②m_axis_data_tdata 是数据输出端口,32 bit,包含处理后的数据,第0~15 bit 为实部,第16~31 bit 为虚部;③m_axis_data_tuser 是输出数据计数标志,16 bit,低10 bit有效;④m_axis_data_tvalid 是输出数据有效标志,1 bit。
FFT 模块工作时,首先进行复位,将复位信号aresetn 置0,至少保持2 个时钟脉冲,然后将时钟使能信号aclken 置1,表示FFT 开始工作,同时将配置信息s_axis_config_tdata 写入。当时钟使能信号置1 后的下一个时钟,状态准备标志s_axis_data_tready 被置1,表示可以接收数据。由于状态准备标志s_axis_data_tready 和输入数据有效标志s_axis_data_tvalid 是握手信号,只有两个信号都置1 时,数据才能进行传输,因此时钟使能信号置1 后的下一个时钟将输入数据有效标志s_axis_data_tvalid 置1。最后在输出数据有效标志m_axis_data_ tvalid 置1 时,数据输出端口m_axis_data_tdata 输出数据,且计数标志m_axis_data_tuser 开始输出数据编号。
7)最大值、次大值搜索模块
将IFFT 输出结果取模再进行平方,然后存到RAM中。RAM 地址共计1 024×31×2 =63 488 bit,第1 ms的数据直接存入RAM 中,以后每1 ms 的数据进行模值平方累加后,与上1 ms 的模值平方累加结果相加并存入相应位置,直到最后1 ms 时寻找最大值与次大值,并记录其位置。
8)捕获结果处理模块
捕获所得最大值与次大值及其位置,在PS 中进行处理,计算出卫星载波频率与C/A 码。
捕获模块的验证通过Vivado 2018.3 与Matlab R2019a 实现。信号采样频率为40 MHz,在捕获程序中数据输入速率为5.714 286 MHz。由于AD9361 是零中频架构,但经过测试,中心频率并不是真正的0 Hz,而是存在15 kHz 左右频率偏移,因此中频为15 kHz,数据长度为10 ms。测试分两部分:第一部分是功能测试,第二部分是性能测试。
该测试目的是在Matlab 程序中计算出捕获卫星的卫星号和C/A 码,在卫星号与C/A 码已知的情况下,验证PL 程序算法的正确性。
功能测试分为以下3 步:
(1)设置AD9361 采样时长为10 ms;
(2)采样数据在Matlab 程序中进行捕获;
(3)采样数据转换为coe 文件存入PL 的ROM 中,在PL 中进行捕获。
在Matlab 程序中捕获的卫星号为1~37,搜索频点为1~31,偏移量为1 或3,码相位为1~1 024,分别对应PL 中捕获的卫星号为0~36,搜索频点为0~30,偏移量为0 或2,码相位为0~1 023。图7 为Matlab 捕获结果图。表1 与表2 分别是Matlab 和PL 捕获10 ms数据的结果。
从图7 中可以看出,在10 ms 数据中捕获到5 颗卫星,PRN 编号(PrnNo)分别为4、7、8、11、27。频点、偏移量、C/A 码结果在表1 中给出。Matlab 中计数是从1 开始,PL 中计数是从0 开始,因此表2 数值与表1 相差1。通过表2、表1 捕获结果对照,发现捕获的频点与C/A 码相同,证明PL 中捕获算法正确。
图7 Matlab 捕获结果Fig.7 Acquisition results from Matlab
表1 Matlab 捕获结果Tab.1 Acquisition results from Matlab
表2 PL 捕获结果Tab.2 Acquisition results from PL
图8 是通过集成逻辑分析(ILA,integrated logic analysis)查看PL 捕获7 号卫星的结果图。
图8 Vivado ILA 核输出捕获结果Fig.8 Output of Vivado ILA core acquisition results
下面以7 号卫星为例介绍PL 捕获结果,其中:PrnNo 宽度5 bit,输入信号表示当前要捕获的卫星号;CapMsNo 宽度5 bit,输入信号表示捕获模块输入数据的时间长度(ms);dsp_int5 宽度1 bit,输出信号为PS的中断信号,表示当前卫星捕获结束,将捕获峰值与峰值位置通过AXI4-Lite 总线发送给PS,在PS 中进行门限判断与信息存储;CapPeak 宽度16 bit,输出信号表示捕获的最大峰值;max_placeout_w 宽度16 bit,输出信号表示最大峰值的位置,第0~9 bit 为C/A码,第10 bit 为平均采样累加偏移量,第11~15 bit 为峰值频点。由图8 可知,最大值位置为40 949,二进制表示为1001 1111 1111 0101,因此,C/A 码为1 013,偏移量为2,频点为19;
性能测试目的是将PL 程序下载到硬件上,对比手机软件捕获卫星数与PL 实时捕获卫星数。图9 是通过手机软件查看当时能够捕获到的卫星号。图10 是通过串口打印的PL 连续捕获10 次的卫星C/A 码。每颗卫星捕获时长为10 ms,共计32 颗卫星,连续捕获10 次,共计使用时间为10×32×10 =3 200 ms。性能测试分为3 步:
图9 实时卫星号Fig.9 Real time satellite number
图10 PL 捕获的卫星C/A 码结果Fig.10 C/A code phase acquired by PL
(1)设置AD9361 采集时长为10 ms;
(2)PL 中实时捕获;
(3)通过串口连续打印出10 次捕获的卫星C/A 码结果。
图10 中一共打印出10 行、37 列数据,行对应第1~10 次捕获,列对应1~37 号卫星C/A 码。表3 是将图10 中数据进行整理的结果,其中,C/A 码为0 表示未捕获到卫星,可以看出,捕获的卫星C/A 码比较稳定。
表3 PL 捕获图10 整理结果Tab.3 Acquisition results from PL of Fig.10
图11 是将1 024 点C/A 码作为纵轴、时间作为横轴在Matlab 中进行画图得出的,可以看出随着时间的增加,C/A 码也随之增加,具有一定的线性关系。
图11 卫星C/A 码与捕获时间的关系Fig.11 Relationship between satellite C/A code phase and acquisition time
由图9 可知,手机软件查看到当时空中共有9 颗GPS 卫星,PL 捕获模块可以捕获到其中的7 颗。经过多次测试,本文设计的捕获模块能够捕获到的卫星数是手机软件捕获到的卫星数的70%~80%。
表4 为测试结果2020年11月13日的对比情况。通过功能测试结果可知,捕获模块可以正确得到卫星信号的频点与C/A 码,说明捕获算法正确。但在性能测试中,捕获模块捕获卫星数少于手机软件,出现这种结果的原因可能有两点:①ZYNQ 平台是一个通用信号平台,并不是专用信号平台;②AD9361 射频段的噪声系数较大。综上两点都有可能影响到捕获结果。
表4 2020年11月13日测试结果对比Tab.4 Comparison of results on 13 November 2020
针对车载抗干扰GPS 接收机的需求,设计并实现了基于Y320 平台的GPS 接收机捕获模块。对所设计模块进行了Matlab 仿真测试与Vivado 硬件测试,通过数据验证表明,捕获模块可以正确捕获卫星信号,满足设计要求。相比于目前传统抗干扰GPS 接收机硬件平台,所设计模块具有体积小、功耗低、成本低的特点,同时为下一步车载抗干扰GPS 接收机的研制奠定一定基础。