摘 要:研究了在直接序列扩频通信中基于FPGA的基带PN码(扩频码)的捕获跟踪技术。在PN码解调中,介绍了串并混合的捕获方案和基于迟早门的跟踪方案。以Quartus II作为平台采用Verilog HDL的硬件描述语言进行设计,并进行了Modelsim的仿真测试,最终下载到具体FPGA器件进行了基带的传输测试。
关键词:FPGA;PN码;捕获;跟踪;Modelsim
在扩频通信中直接序列扩频方式是常用的扩频方式之一。关于对传输速率要求较高的扩频通信来说,码元的快速捕获和良好的跟踪性能就显得至关重要[1]。而FPGA芯片由于其出色的数据高速处理能力、保密性好、开发方便灵活、开发工具智能化等特点在现代数字通信中得到越来越广的应用。在基带扩频码解调中PN码的捕获和跟踪是原始信号能否正确解扩的关键,扩频码的捕获一般有串行捕获、并行捕获和匹配滤波器捕获方式。匹配滤波器的方式由于受到码元周期的限制,随着m序列周期的增加匹配滤波器的复杂度将会急剧增加。串行捕获方式虽然实现简单但耗费时间,而并行捕获方式虽然捕获时间短但耗费硬件资源。所以本文结合串行捕获方式和并行捕获方式各自的优点,采用串并混合的捕获方式。而码元跟踪采用的是“迟早门”的跟踪方式。
1 直接序列扩频解调输出
1.1 直接序列扩频解调框图
直接序列扩频解调模块为直扩系统的重点也是难点,本次设计PN码基带解扩包括4个主要模块:本地m序列发生器、PN码捕获模块、PN码跟踪模块和解调输出模块[2]。其解调功能框图如图1所示。
本次设计采用的m序列为15位m序列,并且特征多项式为y=x15+x+1,m序列的主要性质有:n级m序列具有周期性,周期p=2n-1;在m序列一个周期中“1”和“0”的数目基本相等(严格说1的总个数比0多一个);m序列具有很好的自相关性。
由于两个相同m序列稍有相位差相关性就会急剧下降[3],所以可以利用m序列很好的自相关性和均衡性对其进行解调。
1.2 PN码捕获模块
在PN码捕获模块中本地m序列发生器产生的15路PN码分别送入捕获模块的15路通道,每个通道中首先进行PN码和接收信号的相关运算。
(1)相关器
在数字信号中相关器由乘法器和积分器共同组成,乘法器完成本地PN码和接收信号的乘法运算,当本地PN码和接收信号同为高电平时输出“1”,当其中之一为低电平时即为“0”。
积分器的作用是对乘法器输出的“1”做累加。采用系统时钟sys_clk(50 MHz)对积分器进行控制。为了时序的可控性,定义一个计数器counter,counter用于记录本地PN码输出个数,PN码每输出一个,counter加1,计满一个周期清零。
(2)判决器
15路判决器分别对本路积分器输出数据进行判决,在积分器清零前进行相关性判决,在一个周期(32 767)码元内进行4次判决,这样就节省了捕获时间和运算量。如果积分值大于预设值,则认为此路与接收信号相关性最好,完成捕获。
(3)15路捕获判决并时钟调整
本模块完成信号的最终捕获,需要15路捕获判决器、分频计数器和本地时钟的协同配合。15路捕获判决器主要用于判断哪一路与接收信号最相关,完成了捕获。为了便于接下来的信号的跟踪,要求最终接收信号要与第0路相关性最大。如果捕获判决器检测到非第0路的其他路信道捕获到信号,将会控制分频计数器的计数,从而控制时钟的频率。如果15路捕获判决器检测到第0路捕获到信号,则cnt0=0;如果检测到第1路捕获到信号,则cnt0=1;依此类推,如果第14路捕获到信号,则cnt0=14;如果没有检测到某一路相关,则cnt0=15[4]。分频计数器将根据送出的cnt0的值调整计数方式,从而调整时钟频率。如图2所示,第一次判决第4路与接收信号相关,分频计数器调整本地时钟,在下次判决时cmp0为高电平完成捕获。
图2中,sys_clk为全局时钟;clk为本地PN码发生器时钟;cmp0~cmp5为积分判决器输出;cnt0为15路捕获判决器输出。
1.3 PN码跟踪模块
在完成PN码捕获后,系统进入跟踪状态,在跟踪模块中采用的是“迟早门”[5]位同步法。关于“迟早门”的原理如图3所示,采用8倍于码元信号的速率对信号进行跟踪采样。每个采样脉冲出现时,“接收信号”与“本地滞后信号”、“本地超前信号”分别进行相乘。以一个码元来说明,如图3中的两条实线之间,在此码元期间进行乘加操作后,如果码元接收信号与本地时钟同步,则乘加后超前和滞后两路信号的值应该都为4。但如果接收信号滞后本地时钟(如图3虚线所示),则在一个码元周期后,本地滞后信号的累加值为5,而超前信号的累加值为2。这样在经过一定的码元周期后进行超前通道和滞后通道的累加值判断,如果滞后信号通道累加值大于超前通道累加值,则接收信号滞后本地时钟;反之,则接收信号超前本地时钟。PN码的跟踪就是采用上面的同步方法,在本地时钟的控制下分别采用第0路和第1路作为本地滞后信号behind_clk和本地超前信号ahead_clk。
分频器计数器根据接收到的ahead_clk、behind_clk信号状态调整本地时钟频率。当behind_clk为“1”时,说明本地时钟频率太快,cnt1不再累加计数;当ahead_clk为“1”时,说明本地时钟频率太慢,cnt1快速计数;当behind_clk和ahead_clk都为“0”时,说明本地时钟与接收信号同步,cnt1正常计数[6]。
如图4的捕获跟踪全局图所示,由上到下,sys_clk为系统时钟;clk为本地时钟;rev_data为接收信号;m_seril0、m_seril1为本地15路相干PN码中的第0路和第1路;add_out0、add_out1为15路积分累加器中的第0路和第1路累加器;add_out15为超前路累加器;add_out16为滞后路累加器;ahead_clk为判决点超前标志信号;behind_clk为判决点滞后标志信号;m_behind为滞后信号;m_ahead为超前信号;cmp0~cmp4为第0路到第4路积分判决器输出,cnt0为15路判决器输出。在cmp0输出为高电平后系统完成捕获,进入跟踪模块,在超前滞后时钟的控制下对本地信号进行微调从而实时对输入信号进行跟踪。在系统进入跟踪后,还会一直监视系统是否有大的波动导致失跟踪,一旦失跟踪,就重新进入捕获模块。如果捕获完成就进入解调模块,本地同步PN码与接收信号异或即可完成解调。
2 下载测试
最后将0~F共16个数据从一端循环发送至另一终端接收,并数码管显示。
首先将16个数据以自定义帧数据格式进行传输,一帧数据为10位:1位帧头位,8位数据位,1位帧尾。每帧数据发送时间间隔为1.442 56 ms,码元周期为15 680 ns(码元传输速率为Rs=63.775 kb/s)。然后在系统时钟的控制下,用PN码进行调制,PN码传输速率RPN=3.125 Mb/s,信号的调制就是PN码和信号码元相异或,接收端在码元严格同步情况下用相同PN码与接收信号异或,即可得到原始信号。图5为信号解调的Modelsim仿真图。
sys_clk为系统时钟,rev_data为接收信号,m_seril0为第0路本地相干信号,data为解调后信号,send_data为发送的原始信号。
将经过Verilog HDL编写的调制和解调代码经过编译、布局布线、引脚分配后分别下载至两个终端电路板器件,并进行两个终端间数据传输,结果正确工作稳定。
参考文献
[1] 郭黎利,李北明,窦峥.扩频通信系统的FPGA设计[M]. 北京:国防工业出版社,2013.
[2] 李振宇.基于FPGA的扩频信号发生器的研究与设计[D]. 哈尔滨:哈尔滨工程大学,2007.
[3] 樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社,2007.
[4] 宫二玲,王跃科,杨俊.直序扩频通信中码元同步的快速捕获[J].通信学报,2003,24(11):34-39.
[5] 瞿俊杰.基于模糊控制的迟早门同步器及其FPGA实现[J]. 电子技术应用,2003,29(8):37-38.
[6] 杨迪.直接扩频接收机的码捕获与跟踪技术研究[D].昆明:昆明理工大学,2007.