全文 IJF编码的FPGA实现#e#3 IJF编码的FPGA实现
首先给出一个IJF-OQPSK调制器的组成原理框图如图2所示。其中的串并变换、延时、差分编码和IJF编码采用XILINX公司的FPGA器件SPARTANII XC2S200来实现。I,Q两支路经IJF编码成形的数据通过数/模转换器AD9765转换为模拟幅值送入正交调制器AD6122后得到70MHz中频的IJF-OQPSK调制信号。
有上述的分析可以看出,IJF-OQPSK调制的关键在于IJF编码。下面重点讨论IJF编码的FPGA实现方法。
由式(9)和图1可看出,IJF编码的过程就是根据前后码元的组合关系去波形系数表中查表,以一定的采样时钟取得相应的波形系数从而实现波形成形。因此首先需要建立波形系数表。假设原始输入数据信息速率为2Mb/s,经过串并转换后I,Q支路码速率为1Mb/s,若以50MHz的时钟采样,则每个码元需要50个波形采样数据,理论上有4种基本波形,需要存储200个波形数据,但S1(t)=+1,S2(t)=-1是 固定值,不需要存储单元,只需对进行存储即可,共需要100个存储单元,由于FPGA后端的数/模转换器AD9765为12位,因此存储单元中的地址线宽度为7位,数据线宽度为12位。这里采用XILINX的COREGenerator提供的IP核Single Prot Block Memory来构建ROM用于存储波形系数。此IP核的一些主要特点是:
- 支持Virtex,VirtexII,SpartanII,SpartanIIE等系列的FPGA;
- 可以被配置为ROM或者单口RAM;
- 支持的数据宽度是1-256b;
- 数据深度支持2-1M个数据。
关于IP核的生成与使用方法可以参考文献[1]。生成的ROM还需向其中添加coe文件,即波形系数表,其文件格式如下:
其中关键字MEMORY_INITIALIZATION_RADIX说明了ROM数据的进制(2,10,16可选)。GLOBAL_IN1T_VALUE定义了全局初始值。MEMORY_INITALIZATION_VECTOR即定义了IJE编码的波形系数表。其中前50个系数对应着,后50个系数对应着。最终生成的波形系数ROM如图3所示。此方法生成的ROM将使用FPGA提供的BLOCK RAM,而不会占用distribute RAM,从而节省了宝贵的可编程资源。
4 结语
图4显示了IJF-OQPSP与OQPSK基带编码和调制信号频谱的比较。从图4可以看出,采用时限双码元间隔升余弦脉冲波形进行的IJF编码,在时域具有光滑连续的优点,而且非常适宜于数字实现。已经证明双码元间隔升余弦脉冲波形是时域分布长度有限的最佳波形[2],可以做到理论上的无码间干扰和相位抖动。IJF编码后使得信号的相位路径变得连续、平缓,从而在很大程度上改善了信号的谱性能。由图4可以看到IJF-OQPSK调制信号的功率谱性能明显好于QPSK的功率谱,不仅衰减速度快,而且主瓣宽度与QPSK保持一样的情况下旁瓣宽度压缩为QPSK信号旁瓣宽的一半。通过对其功率谱的分析比较可以看出,IJF-OQPSK调制体制在频谱资源愈显紧张的形势下,具有较大的应用潜力。
本方案采用FPGA和集成器件来实现IJF编码和IJF-OQPSK调制具有高度集成化、配置灵活、性能稳定、易于实现的特点,由于IJF编码有很多性能更好的变形,只需在此基础修改ROM中的波形系数即可进一步实现多种IJF编码方案。