openwifi · 2022年08月04日 · 北京市

WiFi芯片的维密(2)火车难题

火车车厢可以坐50个乘客,来了101个乘客,该挂几节车厢?挂2节就得扔1个乘客在站台,挂3节那第3节车厢就近乎空跑(仅1个乘客)。

OFDM或者几乎所有基于“包”的通信系统,都会面临车厢难题的尴尬时刻。这也是编码时填充bit(padding)的由来。

言归正传,继续WiFi芯片的维密(2)火车难题。

有了上篇的基础,来看看古老的802.11a/g/n是如何处理卷积编码,并告知接收机viterbi解码器何时停止解码的。N个信息bit在发射机从编码到调制映射到子载波的过程如下。

首先在N bit之前添加16 bit 0(Service field),并在N bit之后添加6个0,最后的这6个0即上篇所说为了驱动卷积编码器回到全0状态,从而使接收机Viterbi解码器可以从已知全0状态进行回溯(Trace Back),提高解码可靠性。

经过上述操作,总bit数变为16+N+6。这时车厢问题就来了。因为一个WiFi包是由一系列OFDM符号(车厢)首尾相接构成,每个OFDM符号能承载的bit数是一个固定值(取决于MCS--调制编码方案)。当16+N+6不能被这个固定值整除时,最后一个OFDM符号(车厢)就填不满。

为了(假装)解决这个问题,还需要在6个0bit之后继续添加合适数量的(N_pad个)填充bit,使得恰好填满最后一个OFDM符号。

接下来在真正把上面的bit序列送入卷积编码器之前,还需要进行加扰操作(Scambler),将输入bit随机化。而后进行1bit --> 2bit的卷积编码,得到2*(16+N+6+N_pad)个bit。

编码前有了加扰(Scambler)操作,给接收机带来3个问题:

第1个问题是:想要正确解扰,必须知道加扰器的初始状态。

解决方法:接收机一开始看到的是从信道来的16个随机bit。接收机又知道编码器总是从全0这个确定性状态出发,viterbi解码器利用全0起始状态这个重要信息并通过观测一段后续信道输出,就能对开头的16个bit估计的比较准确。再加上接收机知道这个16bit是由16个0(Service Field)加扰而来,那么即可猜出加扰器的初始状态,从而顺利解扰后续bit。

第2个问题是:那添加在N个信息bit后面的6个0bit也被加扰器随机化了,于是这些随机bit进入编码器就无法驱动编码器回到全0状态了。

解决方法:标准中规定,必须把加扰后的随机bit序列中的那6个尾bit的位置重新替换为全0,以确保编码器可以回到全0状态。但问题还没完。。。

第3个问题是:由于车厢问题,编码器即使已经在6个bit驱动下回到全0状态,后面依然会持续输入N_pad个随机填充bit,从而持续进行状态转移,离开确定的0状态。相应的,如果接收机Viterbi解码器继续尝试解这些填充bit,的确是可能正确解出的,但不能假设编码器以全0状态结束,而只能假设结束状态等概率分布,解码正确率会受到影响。

解决方法:接收机Viterbi解码器需要及时停止在6个0的尾bit输入对应的信道输出时刻,此时假设编码器终结于全0状态是成立的,从而避免后续的N_pad个随机填充bit的不可靠解码对前面解码结果的误导。即接收机需要数着多少个bit已进入Viterbi解码器,当进入Viterbi解码器的bit数达到2*(16+N+6)时,终止解码,开始解码之外的其他后续工作(例如解析MAC包,根据对方MAC地址准备ACK包等)。可见及时停止解码,可以为WiFi芯片一系列的复杂接收操作赢得宝贵的时间。

显然接收机想要及时停止Viterbi解码器,就需要知道N。而在802.11a/g/n协议中,N已经包含在物理层包头(即火车头)的一个字段里了。这个包头称作SIGNAL(可理解为信令的意思),那个字段即LENGTH字段(长度字段)。由于这个SIGNAL只包含约定好的固定bit数,包含固定含义的信息域(不像用户数据,内容和长度都是随机的),且采用固定的编码调制方案(MCS),所以接收机只需要解码SIGNAL里的LENGTH信息,就能在之后解码用户数据段(火车车厢)时,利用解析出来的N(LENGTH信息)及时停止Viterbi解码了。

编码后的bit进行QAM调制,并放到OFDM子载波之前,还需要根据预先设计好的一些MCS(编码调制方案)进行凿孔(puncture),即有意删除一些编码后的bit,这样可占用更少的子载波,在相同带宽下传输更高的速率。代价是需要更高的信噪比(即更强的信号更少的噪声和干扰)以保证解码可靠性。

再之后就是交织,QAM调制(BPSK/QPSK/16QAM/64QAM),以及把调制符号放入子载波。

对于802.11a/g,每个OFDM符号有48个子载波可用于放置QAM符号,对于802.11n,每个OFDM符号有52个子载波可用。这个固定的可用子载波数量,就是为何一个OFDM符号(车厢)只能承载固定的bit数(人数)的原因。

找到古老的802.11-2012.pdf,可知每个OFDM符号承载能力如下:

802.11a/g,N_DBPS(第5列)即每个OFDM符号可承载多少信息bit(在不同MCS配置下,第6列即常见的11a/g速率6M~54Mbps)。

802.11n,N_DBPS(第8列)即每个OFDM符号可承载多少信息bit(在不同MCS配置下)。

作者: 纸飞机
原文链接:知乎

推荐阅读

更多IC设计技术干货请关注开源芯片/FPGA设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
2189
内容数
35
开源Wi-Fi芯片openwifi项目相关技术进展,欢迎加入
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息