信道编码与交织在通信系统模型中的位置如下图所示。
信道编码的引入主要是为了解决数据在信道中传输时引入的误码问题。解决误码问题有两个办法: 1. 接收端在发现误码后,请求发送端对错误数据进行重传,称为后向纠错。ARQ就是一种后向纠错算法。
2. 发送端在发送数据时加入一定的冗余信息,以便在出现误码时接收端可以直接进行纠错,称为前向纠错。FEC就是一种前向纠错算法。
而我们今天的主要内容就是FEC:全称Forward Erro Correction。
1 重复码
在数据中增加冗余信息的最简单方法,就是将同一数据重复多次发送,这就是重复码。
例如:将每一个信息比特重复3次编码:0→000,1→111。接收端根据少数服从多数的原则进行译码。例如:发送端将0编码为000发送,如果接收到的是001、010、100,就判为0,发送端将1编码为111发送,如果接收到的是110、101、011,就判为1。
很明显,按照这种方法进行编译码,如果只错1位没问题,可以正确译码,如果错2位就不行了。例如:发送端将0编码为000发送,到了接收端变成了110,会被译码为1,译码出错。
重复码还有一个很大的问题是:传输效率很低。还是以上面的重复码为例,将同一个信息比特发送了3次,传输效率只有1/3。
2 分组码
为了提高传输效率,将k位信息比特分为一组,增加少量多余码元,共计n位,这就是分组码。
包含k位信息比特的n位分组码,一般记为(n,k)分组码,如下图所示。

分组码中的(n-k)位多余码元是用于检错和纠错的,一般称为监督码元或校验码元,它只监督本码组中的k个信息比特。
2.1 奇偶校验码
最简单的分组码就是奇偶校验码,其监督码元只有1位。
例如:(3,2)偶校验码,通过添加1位监督码元使整个码字中1的个数为偶数:
00→000
01→011
10→101
11→110
检错:收到1个码字,对所有位做异或,如果为0,正确;如果为1,错误。
纠错:奇偶校验码只能检测奇数个错误,不能纠正错误。
2.2 汉明码
奇偶校验码只有1位监督码元,只能发现奇数个错误,但不能纠正错误。有没有码可以纠正错误呢?汉明码就可以检测2位错误,纠正1位错误。
以(7,4)汉明码为例,信息码元为4位,监督码元为3位,如下图所示。

监督码元和信息码元的监督关系如下图所示。

a2是a6、a5、a4的偶校验码,因此:a6⊕a5⊕a4⊕a2=0
a1是a6、a5、a3的偶校验码,因此:a6⊕a5⊕a3⊕a1=0
a0是a6、a4、a3的偶校验码,因此:a6⊕a4⊕a3⊕a0=0
遍历所有信息码元(4位),可以得到16个码字,如下表所示。

如果接收到的码字不在上表中,一定是出现了误码。如何判断是哪位出错了呢?
a 检错原理
分别对3组偶校验码的所有位做异或,得到s2、s1、s0:
s2=a6⊕a5⊕a4⊕a2
s1=a6⊕a5⊕a3⊕a1
s0=a6⊕a4⊕a3⊕a0
根据计算结果s2s1s0,可以判断出是否出错,如果出错,具体是哪个码元出错,如下图所示。
如果没有错误,则s2s1s0=000。
如果信息码元出错:
a6错误,则:s2s1s0=111;
a5错误,则:s2s1s0=110;
a4错误,则:s2s1s0=101;
a3错误,则:s2s1s0=011。
如果监督码元错误:
a2错误,则:s2s1s0=100;
a1错误,则:s2s1s0=010;
a0错误,则:s2s1s0=001。

b 纠错原理
发现错误位后,只要将对应位取反:0改为1,1改为0,就完成了纠错。
3 卷积码
从前面的描述来看,分组码编码器每次输入k个信息码元,输出n个码元,每次输出的码元只与本次输入的信息码元有关,而与之前输入的信息码元无关。接下来介绍的卷积码,其编码器输出除了与本次输入的信息码元有关外,还与之前输入的信息码元有关。
一般用(n,k,K)来表示卷积码,其中:
n:编码器每次输出的码元个数;
k:编码器每次输入的信息码元个数,一般k=1;
K:约束长度,在k=1的情况下,表示编码器的输出与本次及之前输入的K个码元相关。例如(2,1,3)卷积码:编码器每次输入1个码元,输出2个码元,这2个码元与本次及之前输入的3个码元相关。
3.1 编码原理
a 编码器工作原理
(n,1,K)卷积码编码器一般使用(K-1)级移位寄存器来实现。例如:(2,1,3)卷积码编码器需要2级移位寄存器,如下图所示。

编码器输入:mi,输出:u1和u2。
u1=mi⊕mi-1⊕mi-2
u2=mi⊕mi-2
两个移位寄存器的初始状态为:00;假定输入序列为:11011,左侧数据先输入;寄存器的状态及编码器输出变化如下表所示。

b 编码器网格图
以输入序列11011为例。通过编码器网格图,很容易得到输入序列11011编码得到的输出序列:11 01 01 00 01,如下图所示。
实线表示输入0,虚线表示输入1。实线和虚线旁边的数字表示编码器输出。
3.2 译码原理
卷积码的译码一般采用最大似然译码。
a 最大似然译码
假定信道的误码率为Pe,且Pe<0.5。
编码器的输入信息序列长度为L,输出的码字序列有2L种可能:Ai=(i=1,2,…,2L),如下图所示。
译码器在接收到码字序列B后,遍历Ai(i=1,2,…,2L),计算发送码字序列为Ai、接收码字序列为B的发生概率,将发生概率最大的发送码字序列对应的发送信息序列作为译码结果,这就是最大似然译码。
以L=5为例,假定接收到的码字序列为:11 01 01 00 01
编码器输出的码字序列共有32种可能:
如果发送信息序列为11011,则编码器输出的码字序列为:11 01 01 00 01,全部码元传输正确,发生这种情况的概率为:(1-Pe)10。
如果发送信息序列为10011,则编码器输出的码字序列为:11 1011 11 01,5个码元传输错误,发生这种情况的概率为:Pe5(1-Pe)5。
如果发送信息序列为11010,则编码器输出的码字序列为:11 01 01 00 10,2个码元传输错误,发生这种情况的概率为:Pe2(1-Pe)8。
其他情况略。
很明显,发送信息序列为11011的概率最高,因此采用最大似然译码时译码结果为:11011。
错误的码元越少,发生概率越高。要找到发生概率最高的发送序列,只要找出误码数最少的发送码字序列就可以了。而两码字间对应位不同的个数总和称为汉明距离,所以只要找出汉明距离之和最小的发送码字序列就行了。例如:01和10的汉明距离为2,00和01的汉明距离为1。
最大似然译码要遍历2L种可能码字序列计算概率才能完成译码,译码过程的计算量随L的增大而指数增长,难以实现。维特比发现了一种方法,可以大大减小译码的计算量,将最大似然译码推向实用,这就是著名的维特比译码算法。
b 维特比译码
维特比译码的原理可以结合译码器网格图来理解。译码器网格图与编码器网格图类似,唯一的不同是:实线和虚线旁的数字不再表示编码器的输出,而是表示接收码字序列与编码器输出码字序列的汉明距离。
假定接收码字序列为11 01 01 10 01(错误1个码元),画出译码器网格图,如下图所示。

在上图中,选取汉明距离之和最短的那条,得到译码结果11011.
3.3 卷积码的应用
a CDMA2000 (3G移动通信标准)
使用了(2,1,9)、(3,1,9)和(4,1,9)卷积码,如图下面三张图所示。
b WCDMA
使用了(2,1,9)和(3,1,9)卷积码,如下面两张图所示
c LTE
LTE的控制信道采用了(3,1,7)卷积码进行信道编码,如下图所示。
到这里我们的前向纠错部分就讲完了。前向纠错可以在一定程度上解决误码问题,但是要想彻底解决还得借助交织和反馈重传。
4. 交织
交织和去交织是通过对寄存器按行写入按列读出实现的。
信道编码后的码字(添加前向纠错码后的码字)逐行写入交织寄存器,再逐列读出并发送出去,如下图所示。

接收到的数据逐行写入去交织寄存器,再逐列读出码字用于信道译码,如下图所示。

在信道传输过程中如果出现了如上图中所示的连续误码,去交织后,恢复出的第3、第4、第5、第6码字的第3码元出错,对于出错的几个码字来讲,每个码字只是错了1个码元,信道译码时很容易纠错。
5. 反馈重传
5.1 ARQ
自动请求重传:发送端发送具有一定检错能力的码,接收端发现出错后,立即通知发送端重传,如果还是错,再次请求重传,直至接收正确为止,如下图所示。

5.2 HARQ
混合ARQ:是FEC和ARQ的结合,发送端发送具有一定检错和纠错能力的FEC码,接收端发现出错后,尽其所能进行纠错,纠正不了,则立即通知发送端重传,如果还是接收错误,再次请求重传,直至接收正确为止,如下图所示。

5.3 HARQ+ARQ
很明显,HARQ的性能是优于ARQ的,但如果单纯使用HARQ重传,会导致解调门限大大提高。这是因为:重传次数一般都要受到最大重传次数的限制,要满足最恶劣信道条件下在达到最大重传次数之前能将数据传输正确,对解调门限提出了很高的要求。为了降低对解调门限的要求,移动通信系统中一般将二者结合起来使用,如下图所示。

利用HARQ重传将误码控制在一定水平,残留一部分误码给ARQ进行重传,这样系统性能可以达到最优。