可编程逻辑
介绍除了OFDM外,一个完整通信链路中所需的其他环节,给出发射机链路和接收机链路的整体框图,最后结合802.11a介绍相关技术指标。
在上一篇中,框图部分我们刚介绍了用IFFT/FFT来实现OFDM,通过加循环前缀(CP)来消除ISI和减少ICI。
在这一节中,我们要将整体的OFDM基带实现模型给完整描绘出来,即:
其中,图上省略了在输入的二进制数据之后,FEC编码器之前的加扰的部分,作用是为了避免出现长串的1或0,影响接收机的定时.
前向纠错 (英语: forward error correction ,缩写 FEC )或 信道编码 (英语: channel coding )是一种在单向通信系统中控制传输错误的技术,通过连同数据发送额外的信息进行错误恢复,以降低比特误码率。
在数字通信中,如果出现常‘1’或者常‘0’序列都会影响接收机链路中同步的建立和保持。所以往往可以在发射机链路中加入扰码器(scrambler)来将数字信号变换为具有近似白噪声统计特性的数字序列.这样同时能限制电路中存在不同程度的非线性特性对其他电路通信造成的串扰.
所谓加扰,即在不增加冗余而搅乱信号,改变其统计特性.这项技术的实现方式即耳熟能详的反馈移位寄存器序列(即伪随机序列,m序列).
在硬件实现上,有两种不同的实现方式,分别是输入信号不经过寄存器:
和输入信号经过寄存器:
其中,图中的+号为模2加法,即可以使用异或实现.而在这里,802.11a中采用的是方式1,其中生成多项式为:
在加扰后,为了加强对信道的抗噪能力,我们需要引入额外的监督码元来对接收信号进行检错纠错即信道编码过程.由于这一部分原理犹如天书,所以仅尽量写得像是个人能读懂的.
在802.11a中主要采用了:卷积编码.在框图中将称之为FEC( forward error correction ,前向纠错)编码/译码器
卷积码的由来,是因为输入的原始消息数据会和编码器(encoder)的冲激响应(impulse response)做卷积运算。即:
一个(n,k,m)卷积编码器由Nk个移位寄存器和n个模2加法器组成。编码输出的n比特不仅取决于正在移入的k比特,还与这之前输入的m个k位有关。所以对一般框图来说:
至此,我们可以得到1/2卷积编码器的原理图:
在此情况下,每输入1比特就是输出A和B两个两个比特,实现1/2码率.
为了提高传输效率,在卷积编码后一边会进行删余(puncture),即周期性删除一些相对不重要的数据比特.进行删余后的卷积编码一般也称作删余卷积码.而在译码前会对删掉的比特位置进行填充.
具体操作如下:
在ofdm系统中,针对不同的数据速率需要不同的编码率,所以我们可以用1/2通过删余得到2/3和3/4等编码率.
所以在很容易可以得到多码率卷积码的硬件结构:
那这个时候,就会有热心的网友想问:
那这个时候就要引入解调部分的原理了.
其基本原理为:将接收到的序列和所有可能的发送序列作比较,选择其中汉明距离最小的序列当作是现在的发送序列.这是一种利用最大似然估计进行译码的算法.
里面有从最短路径,动态规划,概率估计等角度去解读Viterbi算法的,大家都可以先去看看,而他们有一个共同的好处,就是图多,也方便大家理解.
需要注意的是,这里利用Viterbi算法进行卷积码译码的前提和转换思路是将编码的实现即有限状态的状态机,看成是一个**隐性马尔可夫模型(HMM)**这样子才能实现利用最大似然等概率的方式来反推电路的设计.
看完了上面的几个连接,就可以理解到状态编码将直接影响到整个算法的复杂度,所以在译码过程中先将数据进行增余,再进行译码,即将删余后的2/3或3/4码率通过增余再变成1/2的话,Viterbi算法的实现复杂度将会大大降低.
在信道编码后的信息具有一定的检纠错能力,但是面对信道的突发错误使得误码区块长度超过信道编码的纠错能力的上限时,信道编码就显得有点"失效"了.这个时候需要引入交织,将信道的突发错误平均到各个字段上,让他变成随机错误,再凭借信道编码,就可以大大提高其纠错能力了.
在上一节的信道编码中,我们可知道信道编码可以对一段字符中的某几个字符进行检错和纠错,但如果接收端是这样的:
直接有一个字段就全错了,这个时候信道编码是救不回来的,接下来看看交织是怎么做的(以分组交织为例,简单):
通过将信息进行重新整合,若信道出现突发错误,这样在解交织时就会平摊到各个字段上,这样子就可以通过信道编码进行纠错了.
交织有两种基本形式:分组交织和卷积交织.
还有利用两个卷积编码器进行级联,实现一串由伪随机性质的编码,即并行级联卷积码,又称为Turbo码.
其中,分组交织的原理在前面已经讲了,假设输入为N,输出为M,则称交织深度为N*M.可见交织深度必将给系统带来较大延时,故必然会受到约束.
然后就是卷积交织器,这是一个非常适用用于连续比特流通信系统的交织方式,其交织深度仅为分组交织的一半.图解如下:
由于在OFDM中采用的是多载波调制,所以分组交织的延时也没有这么严重,而在802.11中采用的是分组交织,故不过多讨论卷积交织和Turbo码,有兴趣的同学可以看一下参考文献.
此时可以换一个角度考虑问题:将分组交织看成是一种矩阵的转置
那么显然解交织也只需要对这个矩阵再进行一次转置就可以了,所以跟加扰的解扰一样,这里只要同样做一个转置的交织过程就可以了.
那么这个时候就会有热心的网友问:你说的这个加扰器,他不就是将基带信号变成具有伪随机信号性质的东西了吗,这个时候还整交织干嘛嘛?
那显然这个网友是没有好好看交织的原理的,他的目的是为了让信道中出现的突发错误转换成随机错误,让大伙们来"平摊"这个误码,而加扰的话主要目的是为了区别用户(上行加扰)或者区分小区和信道(下行加扰)。
加扰是发送端用小区专用的加扰序列(伪随机码,根据小区ID生成)进行加扰,接收端在进行解扰,只有本小区内的UE才能根据小区的ID进行解扰,从而区分小区,这么做的好处就是可以减少相邻小区的干扰。
这部分为通信原理究极基础部分,不详述.
需要注意的是,由于在OFDM中为多载波调制,各子载波可以选择不同的调制方式,而协议中对不同信息域的信息也会采用不同的调制方式,所以这个在后面具体实现时会再说.
同时,由于OFDM仅规定了子载波的频率与带宽,所以我们可以进行
那这个时候就会引入星座图,然后根据星座图画接收域,就可以实现解调了.
而! ,在前一节中介绍到OFDM系统具有峰均功率比(Peak-to-Average Power Ratio,OAPR)的问题,所以仅实现幅值上的调制是不是就有点亏啊.所以类似在第一节中的ASK-OFDM就不会太常见.
在802.11a或是其他协议中,在通信开始前都有训练序列以进行信道均衡,但是在OFDM中对频偏是很敏感的,因为他会破坏载波间的正交性,所以我们需要浪费一些子载波插入导频,降低随时间增长的对频率估计的偏差.
除了多径等对频率的影响,还有一个重要的比较重要的影响因素就是多普勒频移.他指的就是发送机位置的移动将对接收机的频率估计进行影响.图解如下:
在维基上有对其他状态的讨论,可见于参考文献.
仅针对 接收机不动,发送机移动的情况:
已知:
在一个波内,光源的速度变化乘以波的周期等于波长变化
刚听完郑同学的讲解啊,我想的就是 高铁要咋办呢?这么高速的情况下,应该频偏会很严重吧.
然后去查了一下,现在主要的方式就是结合MIMO配合Moose,S&C,CP等算法进行进行频率的补偿,这里不细说了,大家有兴趣的话可以看一下参考文献
高铁场景下OFDM_MIMO系统多普勒频偏估计算法研究^[5]^
那你这个 导频插入和信道均衡 在哪啊?
实际上这个导频插入大家可以短浅理解为DDS,导频产生可以回看我之前写的DDS:
基于FPGA的两路信号发生器-CSDN^[6]^
至于信道均衡的话,在这里具体包括四个方面的内容:
跟Viterbi算法一样,理论很多,实现很难,还是等到具体实现的时候再慢慢谈吧
在完成数字调制,即星座图映射之后,现在必然存在实数I和复数Q域,在最后发送前,我们需要将这两路信号合并,他的实现思路其实很简单,就是要维持他们的正交性:
这里主要就是 图多.
在802.11a中,可以根据应用的情景不同选择不同的调制方式实现不同的数据速率和不同的编码效率,其中编码效率的变换在上文的卷积码中已经提到了.
可见一个OFDM符号中有52个子载波,但其中4个为导频信号,即只有48个子载波进行数据传输.而一个OFDM符号位4us,而保护间隔位0.8us.即用于数据传输的时间为3.2us.即子载波间隔为:
在802.11a中,相关的帧结构如下:
其中,PLCP(Physical Layer Convergence Procedure),可见PLCP Preamble为前导码,具体每位定义如下:
在前导码中分为两种训练序列:
具体符号内容后续实现的时候再讲,这里我们可以得到在发送时的训练序列为:
其中,按4个子载波隔开的是短训练序列,各个子载波都需要的是长训练序列,那4个长条的是导频.
接下来就到了Signal域,也就是PLCP Header部分.这一部分需要使用BPSK调制,而且码率为1/2,即此时数据数据为6Mb/s,下面是signal域的结构
其中,前四位为速率位,决定后续数据域的传输方式,对应如下:
第五位为保留位,紧接着的是Length域,主要是MAC所需要发送的物理层服务数据单元(PSDU)的个数.第17位为0-16位的偶校验位.
18-23位全部置0,作用有2:
需要注意: SIGNAL字段的内容不加扰。
接着就到了数据域,其中包括服务域,PSDU,尾比特域和填充比特:
其中,Service的前7个比特设为了0,这里主要是为了初始化接收机的解扰码器.其余的字段主要用于计算data域长度和维持时间,pad段为了填充数据帧为ofdm数据符号数整数倍.
其他细节可参看参考文献,这里主要介绍重要的协议标准,其他细化的会在实现中说明.
最后可以看看物理层与MAC层的交互,以发送过程为例:
全部0条评论
快来发表一下你的评论吧 !