8.8.3 调制解调仿真
仿真模拟的系统与AM仿真时类似,结构如图8-32所示。
图8-32 WBFM调制解调仿真系统结构
代码8-16是测试平台。
代码8-16 WBFM调制解调系统测试平台
图8-33所示是一段仿真波形。解调器工作建立时输出了一段不正确的波形。
图8-33 WBFM测试平台仿真波形
图8-34是仿真波形中的一段细节,事实上20MHz载频、频偏2MHz,并不能很直观地在波形中观察出来。
8.9 QPSK和QAM
考虑下面的式子:
因而,可以使用分别被I和Q调制幅度的余弦和负正弦信号之和得到任意幅度A和相位 的调制信号。这个信号也可以理解为使用复数s=I+jQ调制复信号ejΩcn得到的信号的实部:
这样的调制称为正交幅度调制(QAM)。
前述的OOK和PSK均可统一到QAM,例如OOK的符号“0”:s0=1+j0,符号“1”:s1=0+j0,如图8-35所示;BPSK的符号“0”:s0=1+j0,符号“1”:s1=-1+j0,如图8-36所示。
而如果BPSK使用-π和π两个相位,则对应着0-j1和0+j1,如图8-37所示。
QAM调制中,在I-Q平面上标出符号的图称为星座图。
还可以调制8个符号,如图8-40和图8-41所示。
调制16个符号(16QAM)、32个符号(32QAM)、64个符号(64QAM),如图8-42至图8-44所示,当然也有其他不同的坐标分配方案,在IEEE 802.11ac规范的Wi-Fi中,OFDM的每个子载波上的QAM最多可达256个符号,而有线传输的ADSL,最多已使用32768-QAM,即在一个码元上调制15位二进制。
星座图上相邻符号之间的欧氏距离越大,抗噪声能力越好。越多符号的QAM调制,符号距离越小,对信道信噪比的要求也就越高。
8.9.1 QAM调制
根据式(8-13)或式(8-14),QAM调制器的结构如图8-45所示。其中将多位数据映射到I和Q的不同电平也常称为星座映射。不使用电平表,直接将两路模拟信号的采样序列送至I和Q进行调制也是可以的,不过很少这么做。图中的基带滤波器使用了带通滤波器,意味着这样的结构下基带编码必须是无直流分量的。
代码8-17描述了同时输出正弦和余弦的OrthDDS,使用了类似双口RAM的描述。因为将双口RAM的描述和DDS的描述混合在了一个模块中,有些FPGA开发工具不能很好地推断出RAM并使用专用RAM单元,这时可以使用第4章代码4-22描述的双口RAM模块,在OrthDDS中实例化它。另外,使用了initial过程中的常量计算来初始化RAM,主流FPGA开发工具目前不支持,可参考4.6.2节改用$readmemh系统函数配合RAM初始化文件进行初始化。
代码8-17 正交输出的DDS
代码8-18描述了图8-45所示结构,可参数化设定I和Q一个码元的位宽,I和Q路数据均匀地映射到星座图中的正方形区域。其中的通带带通滤波器与前面几节的例子一样,使用的是1MHz~5MHz的带通,另外也使用了较低的基带采样率和升采样,以降低基带滤波器复杂度。mod_en输入信号用于控制调制与否,在mod_en为0时,不调制,仅输出cos载频。
代码8-18 QAM调制器(含星座映射)
8.9.2 QAM解调
QAM解调原理即8.5节介绍的式(8-2)和正交解调。还可以直接用下式理解:
图8-46所示是其结构。
图8-46 QAM解调器结构
代码8-19描述的是QAM解调器不包含位同步和判决的部分。
代码8-19 QAM解调器(不含位同步和判决)
8.9.3 位同步和判决
位同步要解决的问题就是在连续变化的基带序列中找到码元的边界,并找到合适的时刻进行符号判决。
在8.3节中介绍曼彻斯特编码的时候实际上已经涉及位同步。在曼彻斯特编码解码中,直接使用基带序列过零点作为码元的边界,然后以位周期计数器计到码元中央给出同步信号,进行判决。
而QAM的I路或Q路均有多个电平,不是简单地过零或少数一两个阈值。通过找过阈值点的方式确定码元边界并不合理。码元同步常用的方法有延迟相乘、微分整形等。这里以微分整形法为例,将其用于QAM信号位同步的原理如图8-47所示。
通过差分器(即微分)和绝对值获得基带序列的斜率绝对值,使用峰值保持器获得斜率绝对值的最大值。峰值保持器类似于模拟电路中的峰值检测,在输入大于自身保持的值时,自身保持的值立即更新,在输入小于自身保持的值时,自身保持的值慢慢衰减。然后将斜率与斜率峰值(会缓慢衰减)进行比较,得到少数最突出的码元边界。最后使用找到的码元边界去清零位周期计数,而在位周期中央进行码元判决。图8-47中的延迟单元用来补偿同步信号到达判决器和基带数据到达判决器的时间差。
图8-47的下半部分还包含以16-QAM为例的判决部分。在实际通信系统中,中频经过ADC进入数字域之前,会有模拟AGC使得中频的有效值是长期恒定的(数字域一般不做AGC,原因参考7.2.4节)。但仍然不能保证解调后的基带数值序列的幅值不会有些许起落,因而一般不会使用静态阈值进行判决。这里使用峰值保持器获取基带序列的峰值,并会缓慢衰减以跟随可能的峰值衰落,并使用峰值的2/3作为16QAM中除0以外的另两个判决阈值的绝对值(判决-1、-1/3、1/3和1的三个阈值应为-2/3、0和2/3),这样的阈值会跟随基带序列的赋值而起落,保持按比例地判决。
代码8-20描述了峰值保持器,其中的DECAY_PERIOD用于设定经过多少个en周期峰值衰减1。
代码8-20 峰值保持器
8.9.4 调制解调仿真
这里使用的测试系统结构如图8-48所示。发送端符号率(或称波特率)为2.5Msps(符号每秒),每个符号4位,因而实际数据率为10Mbit/s。
图8-48 16-QAM调制解调仿真系统结构
代码8-22描述了测试平台。注意本地载波的产生,与8.7.3节BPSK的类似,需要计算调制器及模拟中频信道的延迟。因QAM调制器中从载波到调制输出比BPSK多花两个周期,因而较BPSK例子,又多延迟了0.4个载波周期。
代码8-22 16-QAM调制解调系统测试平台
图8-49所示是一段仿真波形,为便于比对,rxi和rxq在上下各放置了一份,在这段仿真波形中没有出现误码。事实上多位的QAM调制对信噪比要求较高,如果仿真中稍稍加大噪声有效值,误码将明显增多。
图8-49 16-QAM调制解调仿真波形
图8-50所示是位同步部分的波形细节,截取了获得一次斜率码元边界附近的情况。
8.10 载波同步和数字锁相环
对于前面几节介绍的测试系统,如果用到相干解调,如AM中的SSB、BPSK和QAM解调,均直接使用DDS产生,这在实际通信系统中是不可能的,因为收发双方必然存在时钟频率差异,还有各种因素导致的频率漂移,无法像在仿真中那样设定好初始条件便一直同频同相。因而在实际通信系统中,如果用到相干解调,必然需要与调制时同频同相的本地载波。
如果传送的信号中不包含稳定的载频分量,可以分时或分频在信号中插入“导频”,然后在接收端使用窄带滤波器或锁相环还原出载波。
分频插入导频如图8-52所示,比如载频20MHz,如果基带宽度小于10MHz留有一定余量,则可以将载频2分频后得到10MHz然后与调制信号一起混频至射频发送出去,接收方中频转换至数字域后使用中心频率10MHz的窄带滤波器将其滤得,然后倍频至20MHz,倍频可将信号平方后过高通滤波器得到,如图8-53所示。
分频插入导频的方法比较简单,这里不赘述。
分时插入导频则每隔一段时间留一小段时间不进行调制,直接将载频发出去,接收端使用锁相环在这段时间内跟踪和锁定相位,而后停止锁相以固定的频率工作至下一次导频到来,如图8-54所示。当然图中画得比较夸张,实际系统中,导频占据的时间比例不会这么大,也不会只有图中所示的十来个周期。
8.10.1 数字锁相环恢复载波
全数字锁相环(ADPLL)的结构如图8-55所示。
图8-55 全数字锁相环的结构
锁相环是一个典型的简单控制系统,在基础频率附近,相差较小时可以线性化为如图8-56所示的控制模型,鉴相器输出相位误差,DDS将频率控制字积分为相位,PI控制器中的I项将有助于消除稳态误差。
图8-56 全数字锁相环的简化控制模型
对于BPSK可使用如图8-57所示的双反馈的锁相环(科斯塔斯环)直接从调制信号恢复出载波,并完成解调;类似地,QPSK可以使用如图8-58所示的四反馈科斯塔斯环,读者可自行推导它们的原理。
在分时插入导频的情况下,需要控制ADPLL何时跟踪输入,何时保持频率。在基带编码无直流时,可使用差分器检测鉴相器的输出,获取相位变化率,在相位变化率的绝对值很大时,表明正在调制,应切断PI控制器输入;而相位持续较长时间未有动态时,表明正在接收导频,可以闭环控制DDS,如图8-59所示,图中以16-QAM载频同步为例,输出有cos和-sin两路。
注意,闭环时间应主动控制在导频长度以内,不能依赖差分器检测到相位变化之后再切断闭环,否则大相位差会很快导致相位发散。比如插入导频持续时间为1000个中频采样周期(以100Msps中频采样率下20MHz中频为例,则为200个载频周期),则可以在第200至第800周期之间闭环。图8-59中比较阈值取为1/6与最小符号相位变化有关,对于16-QAM,鉴相器的输出sin最小变化率与最大变化率之比约为1/3。
代码8-23描述了图8-59所示的载波恢复逻辑。以20MHz中频载波和100Msps中频采样率为例,其中鉴相器中的低通滤波器为10MHz低通,20MHz以上为阻带,阈值并未取峰值的1/6而是用了1/4,只因为1/4可以用右移简单实现。
其中使用的PI控制器即为7.8节所述PID控制器,D=0即可,其参数P=0.021、I·Ts=2.1×10-4为使用其他软件工具对图8-56
建模仿真得到初步值之后,再经实测调整得到的。
代码8-23 16-QAM分时插入导频的载波恢复(20MHz中频载波@100Msps)
8.10.2 QAM载波恢复仿真
在8.9.4节QAM调制解调的基础上进行修改,将调制部分每8000个中频采样周期中安排1000个周期不进行调制,仅输出I路(cos)载频。在解调部分,使用上节描述的带导频检测的ADPLL进行载波恢复。同时保留了8.9.4节中直接产生本地载波的正交DDS,仅用来与ADPLL恢复的载波进行对比。
图8-60所示是测试系统框图。
图8-60 QAM载波恢复仿真系统
代码8-24是测试平台代码,第26行在插入导频前预留500个中频采样周期做调制输出,是为ADPLL中导频检测建立阈值。
ADPLL的基础频率设为3355000/224·100MHz≈19.997MHz,与20MHz偏差132ppm,晶体振荡器的频率偏差一般在这个数量以下。
代码8-24 16-QAM基于分时导频的载波恢复测试平台
图8-61是仿真波形片段。导频之后,接收端本地频率控制字已被调整为3355429,对应频率为3355459/224·100MHz≈20.000094MHz,与3355443偏差仅为4.8ppm。而且从mix_fil(即相位误差)可以看到ADPLL很快跟上了导频的相位,并不需要1000个中频周期。
图8-62则是导频即将结束前恢复的载波和参考载波的细节,此时鉴相器输出的相位误差(-sin )值已低于数个12位有符号数的LSB(Q1.11格式下约0.00049),基本达到了12位数据的极限。而恢复的载波与参考载波从波形图上已基本观察不出差异。不过如果观察解调的数据,误码较8.9.4节还是增多了。如需进一步提高ADPLL锁相性能,必须提高数据和鉴相器输出的位宽。