5 连续相位QAM调制器的FPGA实现
连续相位QAM调制器的电路结构如图9所示。整体上由FPGA器件和D/A器件以及滤波器等组成。其中FPGA器件实现连续相位QAM调制所必须的串并转换、相差选择,相位连续等功能;D/A器件主要把FPGA器件输出的数字信号转换成模拟信号,并通过滤波放大处理以便于发送出去。
图9中串并转换模块将输入的数据按奇偶位分开,变成两路并行的数据,以便于QAM进行相位选择。相差选择电路实际上是一个存储器,其中存放QAM调制可能的相位跳变值,每一个经8位量化,以串并转换模块的输出值作为该存储器的地址码,来决定选相电路的输出。接下去的二选一选择器是为实现连续相位QAM调制功能引入的,该选择器的控制端与双可预置值计数器的输出端相连,此计数器的特点是具有两个预置值,从预置值l递减到零的过程为两个相邻码元的相位连续变化的阶段,此时计数器输出为0,则二选一选择器开通0通道,因此相位跳变值进入O通道,实现相位的连续化,即相位从θk-1开始,经过△θk(t)S(t)的作用,由θk-1连续变化到θk-1+△θk(t);当预置值l递减到零后,意味着过渡阶段结束,此时计数器内部由0变到预置值2,并由预置值2开始递减(直至减到0再翻转回预置值1),与此同时计数器的输出由0翻转为l,二选一选择器开通1通道,进入正常的QAM的相位值,产生码元的相位主要部分。所以通过改变不同的预置值l、2,可以改变过渡区和主要部分所占比例,产生不同的相位连续化效果,也即过渡区宽度是可控的。
0通道实现相位的连续化功能,由存储器、乘法器、加法器和寄存器2等构成。存储器中存放的是连续函数S(t)抽样后的量化值,考虑到虽然FPGA器件的集成度越来越高,内部容量越来越大,但片内资源毕竟有限,因而选取S(t)的64个均匀抽样点,经8位量化后存入该存储器,实验表明该量化精度足以满足使用需要。8位乘法器完成相位跳变值△θk(t)与S(t)的乘积运算。寄存器2为两个通道共用的部件,其中存放的是上一次的相位值θk-1,与乘法器的输出相加后即得到θk-1+△θk(t)S(t)。
1通道由两个寄存器和一个加法器构成,其中寄存器1存放选相电路输出的相位跳变值△θk(t),与寄存器2中存放的相位值θk-1,相加即得到当前相位值θk=θk-1+△θk(t),此过程紧接在相位连续化完成后,并同时将和值转入寄存器2中,为下一次相位连续化做准备。转换存储器实际上由两个存储器组成,分别存放θk所对应的正弦和余弦值,以θk的量化值作为地址码通过查找表的方式分别由两个支路Ik,Qk输出。这部分电路占用大量内部资源,要求选用的FPGA具有足够的容量。sinwt,coswt存储器中分别存放着载波的正、余弦值,根据采样定理和实验分析,把一个正、余弦波周期采样32个点,经过8位量化,恢复出来的波形足够光滑。两个支路Ik,Qk分别与载波的正、余弦值相乘后,再相加即实现了连续相位QAM调制,当然此时输出的还是数字信号,再经过D/A转换和相应滤波处理后,就变成模拟信号。
6 部分实验结果
选用XILINX公司的FPGA器件Virtex XVV3006fg456作为目标芯片对16QAM调制进行了实验,该FPGA的规模为32万门,内部含1536个CLB(可配置逻辑单元)。FPGA内部功能由VHDL语言进行描述,VHDL语言代码己通过XILINX ISE软件的仿真、综合和布局布线。根据综合结果报告,调制器占用1953个Slice(占63%),使用了2262个Slice触发器(占36%)和3536个4输入LUT表(占58%)。整个FPGA的速度可达到55.87MHz,满足一般高速数据的传输要求。
调制器实验利用伪随机码发生器产生信息数据,设置双可预置值计数器的两个预置值之比为1:3,这样过渡区宽度占每个码元宽度的l/4,选用TLC7528型8位D/A转换器进行数模转换,经由TL084放大器构成的低通滤波器后输出已调信号。
用TEKTRONIX2221A型数字存储式示波器观测实验结果,图10(b)是输出的连续相位16QAM调制信号波形,为了便于比较,图10(a)中给出普通16QAM调制在相同条件下的输出波形,从图10中可以看出两种调制信号仅在相邻码元之间的过渡区有所不同,普通16QAM调制信号存在的尖锐跳变在连续相位16QAM中则相对平缓得多,而在过渡区结束后,进入每一个码元的主要部分时两种调制的波形是一致的。
7 结束语
连续相位QAM调制技术可以在不影响QAM调制可靠性的同时,大幅压缩谐波分量,提高频谱利用率。这在频率资源日益宝贵的今天,具有特别重要的意义。
随着FPGA技术的发展,大规模FPGA的容量在不断增大,价格在不断下降,这使得集成复杂的算法成为可能。用它将实现连续相位QAM调制所需的大部分功能封装于其中,将有利于通信系统实现小型化和集成化,并可提高系统的稳定性。另外,由于FPGA器件具有在线可编程性,可以很方便地进行系统升级和修改,以满足不同应用场合的需要。