子载波均衡和导频校正
- 模块:
equalizer.v
- 输入:
I (16), Q (16)
- 输出:
I (16), Q (16)
这是频域中的第一个模块。有两个主要任务:子载波增益均衡和使用导频子载波校正残余相位偏移。注意!!!!从这里开始就进入频域了,已经通过FFT从时域变到频域上了。
子载波结构
802.11a/g/n 中的基本信道宽度为 20 MHz,进一步分为 64 个子载波(每个子载波 0.3125 MHz)。
图 13 802.11 OFDM 中的子载波
图13示出了20MHz频带的子载波结构。利用64个子载波中的52个,并且52个(-7、-21、7、21)子载波中的4个用作导频子载波,其余48个子载波承载数据。正如我们稍后将看到的,导频子载波可用于校正残余频率偏移。
每个子载波携带I/Q调制信息,对应sync_long.v
模块64点FFT的输出。
子载波均衡
绘制图 14:
lts1 = samples[11+160:][32:32+64] lts2 = samples[11+160:][32+64:32+128] fig, ax = plt.subplots(nrows=3, ncols=1, sharex=True); ax[0].plot([c.real for c in np.fft.fft(lts)], '-bo'); ax[1].plot([c.real for c in np.fft.fft(lts1)], '-ro'); ax[2].plot([c.real for c in np.fft.ff t(lts2)], '-ro'); plt.show()
图 14显示了完美 LTS 和样本中两个实际 LTS 的 FFT。我们可以看到每个子载波表现出不同幅度的增益。事实上,它们也有不同的相位漂移。在图 15所示的 I/Q 平面中可以清楚地看到幅度增益和相位漂移(称为通道增益)的综合影响。
为了将 FFT 点映射到星座点,我们需要补偿通道增益。这可以通过使用 LTS 标准化数据 OFDM 符号来实现。特别地,两个LTS的平均值被用作信道增益(H):

在这里L[I]是 LTS 序列的极性:

以及子载波I处的FFT输出标准化为:

在这里X[i]是子载波i处的 FFT 输出。
图16和图17显示了使用通道增益归一化之前和之后的FFT。从之前的杂乱无章变得稍微规整了一些,但还是存在一些倾斜,这就要进行下面的操作了。
残余频偏校正
从图 17可以看出,FFT 输出略有倾斜。这是由粗略 CFO 校正步骤期间未补偿的残余频率偏移引起的。
该残余 CFO 可以通过精细 CFO 校正或/和通过导频子载波来校正。理想情况下,我们希望两者都做到,但由于精细 CFO 通常超出相位查找表的分辨率,因此我们在模块sync_long.v
中跳过它 ,仅依赖导频子载波。
无论数据子载波调制如何,四个导频子载波(-21、-7、7、21)始终包含BPSK调制的伪随机二进制序列。
导频子载波的极性随符号而变化。对于 802.11a/g,导频模式为:

以及 OFDM 符号处的导频子载波n(从长前导码后的第一个符号 0 开始)是:

对于 20MHz 带宽、单空间流的 802.11n,第 n 个导频子载波是:

和:

换句话说,前几个符号的导频子载波是:


对于其他配置(例如,空间流、带宽),导频子载波模式可以在 中的第 20.3.11.10 节中找到 。802.11-2012 std
符号n处的残余相位偏移然后可以估计为:

将这个相位偏移和之前的信道增益校正结合起来,对符号n的调整是:

图18示出了使用导频子载波来校正残余CFO的效果。然后可以轻松地将每个子载波映射到星座点。其实还是跟之前的粗CFO、细CFO校正是一样的,先计算出先计算出偏移的相位,再对符号进行校正。
总结:
在OpenOFDM中,上述任务都是由该equalizer.v
模块来实现的。它首先存储第一个LTS,然后计算两个LTS的平均值并将其存储为通道增益。
对于每个输入的OFDM符号,它首先获得当前符号中导频子载波的极性,然后使用导频子载波计算剩余CFO并执行信道增益校正。
原文:Sub-carrier Equalization and Pilot Correction — OpenOFDM 1.0 documentation