(维密 = 维特比解码器的秘密)
Viterbi解码器是每一个通信人在幼儿园阶段的必修课。卷积编码解码长度可以无限长,工作到宇宙末日。但实际网络数据包长度都是有限的,比如小于1500字节。虽然解码一时爽,一直解码一直爽,但如果不能在正确的时刻停止解码,很可能产生错误bit。对于一个数据包,哪怕只有1bit错误,也会全部丢掉。那么WiFi接收机里的Viterbi解码器如何知道正确的解码停止时刻呢?从802.11a/g/n直到802.11ax(WiFi6),采用了不同方法获得正确解码长度。我们以此一窥当今WiFi标准复杂度的提升。
基本概念:编码器的任务是添加冗余,以备(干扰、噪声等影响)发生错误时在接收机解码器那里纠正。比如每发送1bit信息,复制2次后变成3bit,我们说这是一个1/3编码器(1 --> 3bit变换)。这样接收机解码器可以每收到三个bit进行大数判决纠错。所以解码器的任务就是根据接收到的编码后bit猜测编码前的信息bit。
WiFi中的卷积编码器:
每输入1bit信息,编码器输出2bit,这2bit不但和目前输入的这1bit有关,也和内部状态即历史上所有输入的bit有关(状态转移是所有历史bit驱动的结果),即所谓卷积。接收机解码器的任务就是不断观察经过信道后的一系列的2bit,来猜测输入的一系列1bit。
所谓“有因必有果,有果必有因”。理论上,编码器的任何一个时刻的输入和输出,都和历史和未来的所有输入输出有关。也就是解码器对于第X个输入bit的猜测,只有等观测到了第X+M个信道输出后,综合考量第X个输出前后各M个观测结果,才能比较可靠。
问题就出现在如果这第X bit是最后一个bit(或者接近数据包结束的那些bit),它们仅与之前(历史上)的bit相关联,而他们之后已没有新的bit了(数据包1500字节都被编码器编完了),所以最后这些bit在接收机解码器的观测窗口长度几乎减半(2M --> M),对他们的猜测结果就不如之前的bit(既有历史,又有未来)来的可靠。减半的接收机解码器观测窗口示意如下图。
为了解决最后这些bit解码不可靠的问题,WiFi标准中规定,在将N个要编码的信息bit输入到编码器后,还要再接着输入6个0到编码器。由于编码器内部实际上是6单元的移位寄存器,这最后的6个0将会驱动编码器最终回到确定性状态--即全0状态。当然这6个0的输入也会驱动编码器继续输出6个2bit即12bit,但这12bit一般并不是零(想想这是为什么?)。
利用上面的编码方法,N个信息bit最终会被编码为2(N+6)个编码bit。好处是接收机viterbi解码器无需猜测便能预先知道编码器最终回到了0状态,至此便是历史的终结,可靠的终结。利用这些预先设定的信息,解码器对于最后几个bit的猜测变得更加准确。
如果解码器读入了从信道来的2(N+6)个bit之后,并没有终止解码,而是继续把后续的信道输出的噪声/随机bit当做编码器的输出去闷头继续解码,就会出问题。因为这些后续的随机bit并非编码器产生(编码器已经在输入最后6个0后停止工作),它们和之前的2(N+6)个bit并没有内在的编码关系,而viterbi解码器是串流工作状态,如果它没有停下来而是继续工作,它就会把后面的非编码器产生的bit误认为也是编码器产生,“强行”和之前真正编码器输出bit关联起来,从而可能把之前已经猜对的信息bit更新为错误结果。因为那些bit本就没有后续bit,解码器的持续工作就相当于他们有了错误的后续bit去误导解码器的猜测。
把N(即数据包内有效bit数)放在包头告诉接收机不就得了?从而接收机内的解码器可在观察到信道输出2(N+6)个bit之后及时停止解码。这的确是让解码器在正确时刻停机的思路,而早期的WiFi标准802.11a/g/n(WiFi4)也正是这么做的。但事情到了802.11ax(WiFi6),接收机已经没有那么直接的方法去知道N,而是变得复杂起来。
让解码器及时停止,除了有利于解码正确外,另一个好处是:越早解码结束,芯片就有更多的时间来及时完成后续的工作。比如准备接收下一个包,或者解析当前包的内容之后,及时生成正确的反馈包(ACK)并发射给对方(这个一般需要在SIFS,即10us或16us内完成。时间相当紧)。
接下来的几篇文章将会从解码器如何及时和正确停止的角度,聊聊早期WiFi标准和最近的WiFi6中做法的异同,一窥WiFi标准复杂度急剧提升的来龙去脉。
---END---
作者: 纸飞机
原文链接:https://zhuanlan.zhihu.com/p/529390490
推荐阅读
更多IC设计技术干货请关注开源芯片/FPGA设计技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。