system: [SYSTEM]

user: 3. 高精度无线帧同步的LabVIEW FPGA实现 LabVIEW FPGA是美国国家仪器公司推出的一款图形化界面FPGA开发语言 [ 5 ] [ 6 ] ，具有开发简单、可读性强等特点，被广泛应用于该公司的FPGA系列芯片的开发中，本论文采用该语言进行帧同步算法的实现。粗同步模块是高精度无线帧同步算法的必须步骤，首先简要介绍粗同步模块的实现 [ 5 ] [ 6 ] [ 7 ] 。 图7为帧同步的低通降采样滤波器、128点互相关器、2048点相关器、数据存储流程，这里使用的低通降采样滤波器为Xilinx FIR IP核，低通滤波器的带宽为PSS信号的带宽，为0.5 MHz，目的是滤除 图6. 2048点相关器输入数据范围 图7. 低通降采样、互相关等流程 带外信号，降低干扰，降采样的实现为抽取器，每16个采样点，抽取一个点，输出到下一链路，同时该IP核可以实现滑动相乘相加运算，可以完美实现128点互相关器，实际发现若相关窗为512时，编译速度慢，且不能实现2048点互相关器，因为相关窗极大，FPGA资源本身已被耗尽。因而本论文同步算法不能直接使用2048点FIR互相关器实现，需要寻找复杂度低的实现方式。 图8主要采用Xilinx FIR IP核为实现基础的低通滤波器模块，其中输入数据为复数的基带时域信号，实部虚部分别为16 bits，打包成一个U32，把该数据输入Xilinx FIR低通滤波器，该滤波器的带宽为1 MHz，Xilinx FIR IP核的具体实现过程在文献 [ 8 ] 中有详细的步骤，滤除PSS信号之外的相对于同步过程无用的信号，由于滤波过程中会产生数据范围的增大，实部、虚部都变成了40 bits，因而需要对输出的数据进行数据类型转换，防止数据位数过大，在图8中的虚线框中，把输出的40 bits实部虚部分别取前16 bits，组成一个新的U32，输入到本地FIFO (First In First Out，先入先出缓冲器)中。之后从本地FIFO中读取滤波之后的数据，进行后续互相关等过程。这里采用本地FIFO起到缓冲数据的作用。 图9为Xilinx FIR IP核实现的128点互相关器。图中的输入信号为data_in，该信号是图8中滤波器的输出1/16降采样信号(由于1/16抽取器较为简单，虽然包含在流程中但是省略之)，即为时域基带信号。图中位于上方的互相关器内部系数为1/16倍抽取后的本地PSS时域信号的实部，而对应的下方互相关器内部系数为1/16倍抽取后的本地PSS时域信号的虚部，二者同时对输入基带信号进行相关计算，这里两个实数相关器分别对输入信号的实部和虚部进行相关，合并这4个输出，得到一个复数相关器，如图中红色虚线框部分，具体128点互相关原理如下公式(3)所示： 图8. 低通滤波器模块 图9. 128点互相关器 C n = ∑ i = 1 128 ( r e l o c a l ， i + i ∗ i m l o c a l ， i ) ( r e t i m e ， n + i + i ∗ i m t i m e ， n + i ) ∗ = ∑ i = 1 128 [ ( r e l o c a l ， i ∗ r e t i m e ， n + i + i m l o c a l ， i ∗ i m t i m e ， n + i ) + i ( − r e l o c a l ， i ∗ i m t i m e ， n + i + i m l o c a l ， i ∗ r e t i m e ， n + i ) ] = ∑ i = 1 128 r e l o c a l ， i ∗ r e t i m e ， n + i − i ∗ ∑ i = 1 128 r e l o c a l ， i ∗ i m t i m e ， n + i + i ∗ ∑ i = 1 128 i m l o c a l ， i ∗ r e t i m e ， n + i + ∑ i = 1 128 i m l o c a l ， i ∗ i m t i m e ， n + i (3) 公式(3)中 C n 为互相关计算的最终相关数值， r e l o c a l ， i 表示本地PSS序列第 i 点的实部， i m l o c a l ， i 表示本地PSS序列第 i 点的虚部， r e t i m e ， n + i 表示第 n + i 点的时域PSS信号的实部， i m t i m e ， n + i 表示第 n + i 点的时域PSS信号的虚部，这些信号都是经过1/16倍降采样的，公式(3)中字体稍大的 i 为虚数单位，式中第三行有4个实数相关计算，需要采用4个实数相关器来实现，注意到前两个相关是用 r e l o c a l ， i ，分别与基带时域信号进行的相关计算，因而可以把Xilinx FIR相关器配置成双路输入，把基带信号的实部和虚部同时输入到该相关器中，输出的数据只需要把虚部添加一个负号即可。同理，对于式中第三行后两个相关计算也可以集成到一个双路输入的实数相关器中，这样降低了硬件资源的开销。 图10为2048点互相关器的实现，互相关器的数据来源是两块memory，一块存储的数据是固定的2048点PSS时域信号，另一块存储的是实时输入的低通滤波之后的基带数据，来自于图7中的数据存储过程。在程序的开始，第一层循环的循环次数为50，含义为2048点互相关器的滑动窗共计移动50次(实际中不需要一定取上文中提到的17次，50次可以在更大范围内寻找PSS，健壮性更佳)，第二层循环的循环次数为2048，代表滑动窗的大小为2048，即每一次互相关共有2048对复数进行相乘相加，同时，这两次循环中的计数器可用来生成两块memory的地址。可以看到，这里进行了2次循环，每一个数据点都需要读取多次，需要采用memory做存储器，可以重复读取数据，而不方便采用FIFO结构。从两块memory中取出的数据进行复数相乘，这里只需要使用一个复数乘法器即可完成，在乘法器之后连接两个 图10. 2048点互相关器的实现 累加器，分别对乘法器输出复数的实部和虚部进行累加，每做完一次2048点累加需要把累加和存入FIFO中，后续步骤为峰值搜索。 现在计算2048点互相关的复杂度。一个10 ms的无线帧共计进行一次图10的过程，共计50 × 2048 = 102，400个时钟周期，在FPGA实现中，该循环使用200 MHz时钟，因而10 ms有2，000，000个时钟周期，所以工作周期占时钟总周期的5.12%，图10过程完全可以在一个无线帧的时间内执行完成，可以做到实时计算，因而精同步过程是实时进行的。 图11为对2048点互相关器的输出信号进行峰值检测过程。首先从FIFO中读取互相关后的数据，并对该数值进行求模运算，图中的求模计算模块是LabVIEW FPGA中集成的模块，输入复数的实部、虚部以及控制信号(标志输入信号是否有效)，经过运算，延迟一定的周期，即可得到复数的幅值、相位以及控制信号(标志输出信号是否有效)。得到模值之后，对模值进行峰值搜索，搜索的过程为：比较当前输入的模值与前一次模值的大小，若当前输入值大，则保存当前值及其index (输入值的位置，范围是0到49，下同)，若前一次模值大，则不做操作，此时寄存器中依然存储的是上一次模值和对应的index，该过程每执行50次为一次循环，输出峰值的index和控制信号(表示输出是否有效)。同时每进行完50次比较之后，对寄存器初始化：记录输入模值位置的index置0、保存模值的寄存器置0、保存模值index的寄存器置0，从而可以继续进行下一次循环。 本模块输出峰值的index，范围是0到49，表示图10中的50次2048点互相关器输出值的峰值的具体位置，转换偏置为−25到25，与粗同步位置相加即可得到精同步位置。 图12为峰值搜索与有效性判定模块，其中粗同步模块的峰值搜索与图11所示峰值搜索模块类似，有效性判定即判定粗同步结果的有效性，首先比较峰值的幅度是否足够大，再比较峰值的位置与前一个无线帧的位置是否接近，因为每一个无线帧的同步位置基本不会变化的(若基站与用户的时钟有偏差，则同步位置会缓慢变化)。流程首先寻找128点互相关后的峰值，并把得到的峰值和触发脉冲发送给有效性判定模块，启动对粗同步结果的有效性判定，若通过有效性判定模块，则对Sync Successful？信号置1，表明粗同步成功，同时输出粗同步位置。另一方面，对2048点互相关输出结果进行峰值搜索，得到PSS信号与粗同步位置精确的偏置，并把该偏置与粗同步位置相加，得到最终的精同步位置Start of sync accutate信号。至此， 图11. 50次峰值搜索模块 图12. 峰值搜索与同步结果有效性判定 图13. 本算法在MIMO-OFDM系统中的成功运行 同步过程完成，输出Sync Successful？信号和Start of sync accutate信号。