董宏成,步清明,李小文,施流伟
(重庆邮电大学 通信与信息工程学院,重庆400065)
在移动通信环境中,无线信道千变万化,接收机接收到的信号往往是信号经反射、折射以及散射的多条路径在不同时间点到达接收端的叠加。可见,要精确估计出信道响应值十分艰难。信道估计作为物理层的接收端算法,为信号检测提供条件,对影像数据恢复起着至关重要的作用。因此,在接收端进行正确可靠的信道估计研究以及应用十分关键[1]。一般而言,PUSCH信道估计多采用LS算法,除此之外最小低秩均方算法也比较常用,LS算法简单且易实现[2],故本文采用LS算法。对于插值的处理本文采用一阶线性插值[3],容易实现且能满足对功能的需求。FPGA在数据处理方面有着优越的性能且非常适合做并行运算,其芯片内部一般都含有大量的RAM和多达几百个乘加单元,利用FPGA进行数据处理能够提高数据的处理速度。因此用FPGA来实现信道估计和插值应用在LTE综合测试仪开发中是一个较好的方案。
最小平方估计算法是比较经典的信道估计方法之一[4],其基本原理是使接收数据和无噪声数据之差的平方达到最小,其公式可以表示为:
LS算法可以简单地估计出参考信号输出的信道传输函数值,但是算法没有利用子载波的信道传输函数值的相关性,没有考虑噪声影响,无法消除噪声带来的估计误差。
对于数据点位置的插值,一般都采用线性插值[5]。线性插值分为一阶线性插值和二阶线性插值。线性插值的思想是根据邻近子载波和待估计子载波的频域响应相关性,利用相邻导频子载波的估计获取数据子载波的估计,一阶线性插值实现起来比较简单,二阶线性插值实现起来要复杂些。
一阶线性插值就是利用前后相邻的两个导频子载波的信道响应,线性地计算出处于它们之间的数据子载波上的信道响应。以PUSCH 1a格式为例,如图1所示为其导频位置分布图,对于第k个子载波,采用线性插值算法,其信道的频域响应为:
其中,mL<k<(m+1)L,L 为导频子载波之间的距离(即 Nf),m为导频的相对位置。
图11 a格式 PUSCH导频分布
图2是PUSCH信道估计以及插值实现的整体流程图,整个实现过程是基于PUSCH的1a格式来实现的。在整个系统中每一步都会用到RAM来暂存数据,信道估计采用最小平方(LS)算法,插值过程采用一阶线性插值。整个过程采用流水线设计,很大程度上提高了数据的处理速度。
在PUSHC中通常以每一个子帧作为处理单元。首先要提取出PUSCH资源块中存放DMRS的导频数据组成矩阵Rp,与发送端方法相同生成本地的DMRS导频数据Xp。 则按照公式 Hp(m,n)=Rp(m,n)/Xp(m,n)计算出存放导频位置资源元素处的信道频域响应,再按照插值方法估计出数据位置的信道频域响应。
在本次FPGA实现中,导频处信道矩阵模型表示为:
其中,H是信道响应;Xp是已知的导频发送信号;Yp是接收到的导频信号;Wp是在导频子信道上叠加的AWGN矢量。
LS为最小平方信道估计,LS算法就是对式(1)中的参数H进行估计,是信道响应H的估计值。是经过信道估计后得到的导频输出信号。即LS算法的信道冲击响应估计值:
其中,XP是本地生成的,YP是从FFT运算之后的数据中按照一定规则提取的。这样就可以计算出的值。这个模块输入的是发送导频信号XP与接收导频信号YP,其中XP与YP都是复数。信道估计的整体流程如下:
首先把本地生成的导频数据XP存储到一块RAM中,把从FFT计算的结果中提取的导频位置数据YP存储到另一块RAM中,其提取的规则是由导频的分布决定的。再通过另外一个模块来实现信道估计算法,信道估计算法模块与前两个RAM模块的通信方式为握手信号,这样就可以保证在信道估计模块中,只要估计模块需要数据,就可以在这两个存储导频数据的RAM中提取。信道估计的计算公式为式(5),其计算过程相当于是一个矩阵的除法,即对应元素相除,在运算中,HP,LS=YP/XP对应元素的除法公式为这个除法比较特殊,由于分子XP是ZC序列,因此分子XP与其共轭相乘为1。故除法运算可以通过取共轭处理转化成两个复数的乘法,这样就避免了复杂的除法运算。在实现的时候就可以认为求HP,LS是一个乘法。对于计算结果,因为最后数据的形式为实部与虚部组合的形式,即高 16 bit存储实部,低 16 bit存储虚部,在最后处理的时候一定要知道本地生成的数据的量化级别,因为最终的计算结果要求是16级量化,如果本地生成的数据不足16级量化,则要对数据进行处理,使其满足16级量化。
最后,通过对握手信号的控制,把信道估计计算出的结果存储到RAM中,以备后面的插值算法使用。
图2 PUSCH信道估计及插值算法实现整体图
一阶线性插值算法,就是利用相邻的两个导频子载波的信道响应,线性地计算出处于它们之间的数据子载波上的信道响应。对于第k个子载波,采用线性插值算法,其信道的频域响应估计值为:
其中,l1、l2表示用于插值的导频所处的符号位置,H(k,l1)、H(k,l2)表示用于插值的2个导频的信道冲击响应。
通过计算信道估计已经计算出其导频处的数据,在式(6)中l1和 l2是定值,l的范围是 0~13。 这样就可以按行求出导频处的 H(k,l),求出每一个导频处的 H(k,l)先暂存到RAM中。在用到H(k,l)时需要注意,在存储两个导频的时候是先存储第一个导频处的数据H(k,l1),然后再存储第二个导频的数据H(k,l2)。进行一阶线性插值时要同时取两个导频处的数据,这样就要求信道估计之后的RAM必须是一个双口的RAM,以保证一阶线性插值的实现。对于导频数据的系数,其计算方法是求出所有的的值,然后再进行14级量化,暂存到两个16 bit×14的寄存器中,实现一阶线性插值时直接与对应导频处的数据相乘。计算结果左移两位后,数据实部与虚部皆取高16 bit,把每一个实部和虚部的数据组对应合成一个32 bit的数据存储到RAM中。
图3、图4分别是信道估计的Modelsim仿真图和板级实现的Chipscope截图。FPGA实现时的时钟是200 MHz,其中x_p、y_p是信道估计需要输入的数据,其高16 bit为实部,低 16 bit为虚部,x_p与 y_p做复数的乘法,最终的计算结果实部与虚部分别取高16 bit组成一个32 bit的输出,其中图4、5中h_p是信道估计要输出的数据,由仿真图和实现图可以看出,软件仿真和用开发平台实现出来的结果是一致的。因此用FPGA可以实现对无线信道的准确估计。
图5、图6分别为一阶线性插值的Modelsim仿真图和板级实现的Chipscope截图。其仿真结果和实现结果是一致的,故已应用到项目中。
LS算法的 Verliog[6]程序以及线性插值的 Verliog程序已通过Xilinx ISE10[7]的编译、仿真验证及板级验证。其结果与理论值一致,精确度可以达到LTE系统的要求。该算法满足了硬件对算法的模块化、规则化要求,可以充分发挥硬件的优势,是实现硬件与算法相结合的一种优化方案。本文用硬件的思想实现LS算法和一阶线性插值,既满足算法的合理性要求,也满足了FPGA的设计要求。在FPGA设计中,追求的是速度与面积的平衡,故在此设计中采用流水线设计,每次调用4个乘法器,这样既提高了速度也节省了资源。该算法的FPGA实现在项目的联机调试中性能很稳定,该实现方案已经应用到LTE综合测试仪项目中。
[1]陈发堂,李小文,王丹,等.移动通信接收机设计理论与实现[M].北京:科学出版社,2011.
[2]J.J.van de Beek,EDFORS O,SANDELL M,et al.On channel estimation in OFDM systems[C].IEEE Vehicle.Technology.Conferenee.Chicago,1995,7:815-819.
[3]耿煊,谢志远.OFDM系统中基于导频信道估计插值算法分析[J].电力系统通讯,2005,155(26):10-13.
[4]3GPP TS 36.211 v8.5.0.Evolved Universal Terrestrial Radio Access(E-UTRA).Physical Channels and Modulation(Release 8).[EB/OL].[2009-03].http://www.3gpp.org.
[5]沈嘉,索士强,金海洋,等.3GPP长期演进(LTE)技术原理与系统设计[M].北京:人民邮电出版社,2008.
[6]夏宇闻.Verilog数字系统设计教程[M].2版.北京:北京航空航天大学出版社,2008.
[7]Xilinx Inc.Foundation series user guide.[EB/OL].[2010-01-03].http://china.xilinx.com/support/documentation/user_guides/ug071.pdf.