FEC及前向纠错码,是一种广泛应用的编码技术。核心是通过传冗余数据来校验或恢复数据。
可以一个FEC算法看出有两个核心指标,冗余度和恢复能力。
这里先通过几个常见FEC算法来解释涉及到的一些核心概念。
重复编码
原始数据为0/1 两种;
编码后数据为000/111;
可以看出如果每个编码后的数据传输时发生错误的位数小于3,都是可以识别出来的。
而如果只发生了一位错误,我们是可以纠正错误的,即011,更有可能是111,而不是000。
这里有一个概念就是编码空间,重复编码其实是上升到了一个更高的空间,空间中加入了非法的状态。比如bag这个3位词,空间中合法状态多,lag,tag;而camputer则比较容易恢复成computer。
上图,是整个编码后的空间,000到111要经过3个线段,因而可以识别出一位错误。这个概念就是汉明距离,即纠错的能力为 汉明距离/2向下取整。
汉明编码
图中所示为汉名7,3编码。3位冗余数据,4位真实数据,冗余率要低于重复编码 。
3位可以表示8个状态,对应了没有错误,7位中有一位有错误。
而这里的变化矩阵,即是一个生成矩阵。FEC的变化,多是通过生成矩阵来进行的
Webrtc中FEC
webrtc中FEC主要用于抗丢包,把每一个数据包看成编码中的一位,来进行上述的FEC编码。
与重传相比,延时更少,对rtc的低延时至关重要。主要和两个因素有关,丢包率即编码延时。多采用异或方式的FEC算法。