NB-IoT物理层仿真(2)OFDM基带信号调制和解调

这一章介绍NB-IoT标准下的OFDM调制解调原理,并仿真实验,实现NB-IoT最基础层面的信号解调。这是最基础也是极其重要的一个模块,因为所有下行信号的门户就是该模块,肩负着尽最大努力保证接收到的信号质量的责任。

将尝试完成以下几个子目标:

  • 根据NB-IoT标准,使用FFT、IFFT实现OFDM层面的调制和解调;
  • 实现同步以最大程度恢复原信号,包括载波频率同步、采样时钟同步、符号定时同步。

NB-IoT标准的OFDM

OFDM基带信号被用于下行传输。上行使用的是SC-OFDMA,将在下一节介绍并实现。

子载波数量和间距

NB-IoT标准中,有两种载波间距(subcarrier spacing)(文献[1]):

  • 第一种:载波间距为15kHz,一共有12个子载波(subcarrier);
  • 第二种:载波间距为3.75kHz,一共有48个子载波。

下行只使用第一种方式,用OFDM调制生成基带信号。上行可使用两种方式,用SC-OFDMA调制生成基带信号。通过配置,上行可同时使用1/3/6/12个子载波,而下行同时使用所有子载波。

OFDM调制解调原理

调制步骤:

  • 将12个子载波频域值两边添加0,填充(padding)到16个值,
  • 进行IFFT运算,得到长度为16的时域信号,
  • 对时域信号进行升采样(upsampling),得到长度为128的时域信号,
  • 添加循环前缀(CP addition),扩展长度到137/138,得到OFDM基带时域信号。
  • 按时间送往频谱搬移器,以射频形式发送到空中。

解调步骤:

  • 从天线进来的射频信号经过频谱搬移取出基带信号,
  • 进行同步的采样时钟采样,得到OFDM基带时域信号,
  • 去除这个时域信号的循环前缀(CP removal),得到长度为128的时域信号,
  • 对时域信号降采样(downsampling),得到长度为16的时域信号,
  • 进行FFT运算,得到长度为16的频域信号,
  • 去除两边的填充值(padding removal),得到12个子载波。
NB-IoT OFDM调制解调流程(来源文献[2])

下面简单说明各个步骤及其意义。

填充(Padding)

根据NB-IoT物理层规定(3GPP TS 36.211),NB-IoT使用12个子载波传输数据,而FFT和IFFT接受2的幂个时域/频域数据输入,输出同样长度的频域/时域数据。所以调制时,在原12个频域数据两边各加2个值为0的频域数据。

IFFT/FFT

使用快速傅立叶变换直接将频域离散序列转化为时域离散序列,因为天线只能接受时域变化的数据。

升采样(Upsample)

升采样相当于为波形提供更高的分辨率。但在调制端提高采样率主要是为了保证DAC质量。

降采样(Downsample)

降采样即将高采样率的波形以低采样率采样,可减少运算数据量。

一些理解

到这里你可能会纳闷:似乎目前为止,完全没有看到什么间距15kHz的基带信号、或者2130-2145MHz的频带信号这样具体的频率呀?这里就要结合升降采样,理解一下FFT/DFT的本质。

学习过FFT或DFT的知道,离散信号的傅立叶变换是将N个时域和频域值相互转换:有N个输入的频域值转换为N个输出的时域值;有N个输入的时域值/采样值就转换为N个输出的频域值。而FFT的频率,当然与采样率有关了。比如采样时间为1/16s,采集了16个值,将这16个值送入FFT,将得到16个频域值,分别为1、2、3、……、16Hz,当然因为奈奎斯特定律,只有前一半数据有效。

而输入16个频率的复数值(分别代表不同幅度和相位的正弦信号),送入IFFT,将得到16个时域值,这个时域值序列就是16个信号在一定时间范围内的叠加,也就是一段时间范围内空中波形的样子。要赋予这个时域值序列具体的频率意义的话,就要以一定间隔将其逐个发出。(可以想象:这个序列可以慢慢发,形成一个长波,同样也可以很快地发完,波形越短频率自然越高。)显然,如果需要两个频率间隔为1Hz,那么就以1/16s的间隔发送,同时可以计算得到,这个信号带宽为16Hz;要使子载波间距为15kHz,那么就以1/15k/16s的间隔发送,同时可以计算得到,这个信号带宽为16*15kHz,当然用OFDM调制的话带宽仅为16*15k/2Hz。

那么为什么常常要在调制端进行升采样呢?显然我们可以分析,对于NB-IoT,如果仅仅使用12个子载波的复数信号产生时域波形,算上两边的0填充,得到的时域数据仅仅有16个采样点。如果直接将这16个点的数据送入DAC,很可能产生类似于方波一样的信号,方波信号由奇次谐波构成,这些谐波就会对信号产生干扰。但若增加采样点,生成的采样点会更多,产生的“台阶”也会更加密集,产生的奇次谐波频率也就会越高,也就越容易让之后的低通滤波器滤除。

升采样的另一个原因是,根据奈奎斯特定理,采样频率要高于原始信号最高频率的两倍,否则会发生频谱混叠(Aliasing)。所以如果要保证接收端成功采样,至少需要插值一倍。(个人认为这是次要原因,首先现实中DAC会保持上一个数据(Zero-Hold),这样的话也相当于做了插值)

那么如何升采样呢?对于OFDM调制,没必要使用插值滤波器(Interpolation Filter),使用扩展法(Expansion)即可,即在相邻频率信号中间插入若干个0(Zero-Padding)。实现过程中保证信号频率对应即可,剩下的工作就交给IFFT完成。

至于降采样,只不过是以相同的采样率采样,送入FFT,取出有用频率的信号。甚至可以按照奈奎斯特采样定律允许的最低频率直接采样,一样可以得到各频率信号。

OFDM解调

事实上,在空中传递的OFDM波形会受到各种因素干扰:

  • 因为运动产生的多普勒效应等因素造成的频率偏移,造成ICI、相位偏移。
  • 因为多径效应等因素造成的符号间干扰,造成ISI

所以要最大化地还原OFDM各子载波,需要对应做到两个同步:

  • 载波频率同步(频偏估计):确定一个OFDM符号的展宽程度,从而确定采样点的稀疏程度
  • 符号定时同步(定时估计):确定一个OFDM符号的开始时间,从而确定FFT接收窗

目前(仅仅在OFDM层面上),我们仅仅能使用循环前缀来实现这两个同步,效果比较粗糙,仅仅能大致捕获频偏和定时,勉强接收到信息,所以也称为粗同步/捕获。而要实现更加精细的同步,就要依赖协议的同步信号/导频(NB-IoT中对应NPSS和NSSS信号)来做到更加精细的同步,并应用信道估计来均衡信道(NRS信号)。

NB-IoT频偏估计及实现

(后期文章补充)

定时估计及其算法

同样地,使用CP与OFDM符号尾部相关性来滑动接收窗口,以获取一个符号的边界。

(后期文章补充)

参考文献

[1] 3GPP TS 36.211 version 15.2.0 Release 15 Section 10.1.2

[2] https://dsp.stackexchange.com/questions/69704/modulation-upsampling-method

[3] https://dsp.stackexchange.com/questions/27333/why-upsample-before-modulation

[4] https://en.wikipedia.org/wiki/Upsampling

[5] https://blog.csdn.net/qq_30404573/article/details/86708791

[6] https://www.mscbsc.com/viewnews-101389.html

[7] OFDM学习笔记(五)(同步技术) https://blog.csdn.net/daijingxin/article/details/108159600

发表评论