写在前面:本博客是《通信原理》的学习笔记,仅供个人学习记录使用
目录
一、概述
1. 为什么要差错控制?
在生活中:运输一箱灯泡的时候
在通信时,各种干扰(乘性、加性)→使传送的数据流中产生误码:
针对乘性干扰,可以在接收端采取均衡等措施来进行纠正。
针对加性干扰,一个是可以合理选择调制/解调方法,增大发射功率;或者采用差错控制
,交织等措施来进行纠正。
2. 什么是差错控制编码?
(1)差错控制是以降低信息传输速率为代价换取提高传输可靠性。
(2)差错控制编码是在发送的信码中增加一些多余码元(监督码元),这些监督码元与信息码元之间存在某种数学约束关系,接收时利用这种关系来发现或纠正传输过程中产生的错码。差错控制编码是以降低传输的有效性为代价来换取提高传输的可靠性。
(3)编码目的: 纠检传输差错,降低误码率,提高通信质量。
(4)差错控制编码又叫做纠错编码
,属于信道编码
的范畴。不同的编码方法,有不同的检错或纠错能力。
3. 有哪些差错控制方式?
(1)检错重发/自动要求重发ARQ
:发送码元序列需要加入差错控制码元,接收端只检不纠
,需要来申请重发。为双向通道
,通信效率低,不适于实时通信。但编译码较为简单,编码效率高。
(2)前向纠错FEC
:发送码元序列需要加入差错控制码元,接收端既能检码还能纠正码
。只需要单通道
,通信效率高,适于实时传输。但编译码的设备复杂,编码效率低。
(3)反馈检验
:发送码元序列无需加入差错控制码元,接收端收到直接转发回接收端,与之比对。为双向通道
,收发设备很简单,但传输效率最低。
(4)检错删除:发送码元序列需要加入差错控制码元,接收端检测到后直接删除,有少量损失。但能及时接收后续消息。
二、纠错编码的基本原理
1. 码率与冗余度
在序列中,增加的监督码元越多,检/纠错的能力就越强。
如果编码序列中信息码元数量为
k
k
k,总码元数量为
n
n
n,则码率=
k
/
n
k/n
k/n,冗余度=
(
n
−
k
)
/
k
(n-k)/k
(n−k)/k。
2. 分组码
将信息码每
k
k
k个分为一组,按一定规则为每组信息码附加
r
r
r个监督码的编码称为分组码。编码后每组长度为
n
=
k
+
r
n=k+r
n=k+r。分组码用
(
n
,
k
)
(n, k)
(n,k)来表示。在分组码中,监督码元仅监督本码组中的信息码元。
-
系统码:编码后的信息码元保持原样不变,监督码元附在信息码元的后面。
-
许用码组:长度为 k k k的信息块有 2 k 2^{k} 2k种组合,每个信息块对应一个码字,一共有 2 k 2^{k} 2k个码字,这些码字被称为许用码组。
-
禁用码组:长度为 n n n的码共有 2 n 2^{n} 2n种组合,多于码字的数量,那些不是码字的码组被称为禁用码组。
-
码重 ( W ) (W) (W):码组中“1”的数目。
-
码距 ( d ) (d) (d):两个码组对应位上数字不同的位数称为码组的距离。——又称
汉明距离
。
-
最小码距 ( d 0 ) (d_{0}) (d0):某种编码中各个码组之间距离的最小值。
3. 检纠错能力
一种编码的检错和纠错能力将取决于最小码距 d 0 d_{0} d0!
最小码距 d 0 d_{0} d0与检纠错能力的关系为:
检 e e e 个错码,要求: d 0 ≥ e + 1 d_{0}\ge e+1 d0≥e+1
纠 t t t 个错码,要求: d 0 ≥ 2 t + 1 d_{0}\ge 2t+1 d0≥2t+1
纠 t t t 个错码,同时检 e e e 个错码,要求: d 0 ≥ e + t + 1 ( e > t ) d_{0}\ge e+t+1 (e> t) d0≥e+t+1(e>t)
三、纠错编码的性能
督元的加入
⟶
\longrightarrow
⟶ 使发送序列增长
⟶
\longrightarrow
⟶ 冗余度增大
⟶
\longrightarrow
⟶若仍须保持发送信息码元速率不变,则传输速率必须增大
传输速率增大
⟶
\longrightarrow
⟶系统带宽增大
⟶
\longrightarrow
⟶噪声功率增大
⟶
\longrightarrow
⟶使信噪比下降反而又使接收的错码增多
下图示例一种编码和误码率的关系:
对于给定的传输系统,其传输速率和信噪比
E
b
/
n
0
E_{b}/n_{0}
Eb/n0的关系为:
可以看出:
(1)
S
N
R
=
7
d
B
SNR=7dB
SNR=7dB:纠错编码前,
P
e
≈
8
×
1
0
−
4
P_{e}\approx 8\times 10^{-4}
Pe≈8×10−4,纠错编码后,
P
e
≈
4
×
1
0
−
5
P_{e}\approx 4\times 10^{-5}
Pe≈4×10−5。可见不增大发送功率, 就能降低误码率约一个半数量级。
(2)
P
e
=
1
0
−
5
P_{e}=10^{-5}
Pe=10−5:纠错编码前,
S
N
R
≈
9.5
d
B
SNR\approx 9.5dB
SNR≈9.5dB ,纠错编码后,
S
N
R
≈
7.5
d
B
SNR\approx 7.5dB
SNR≈7.5dB。可获得
2
d
B
2dB
2dB的编码增益(在保持误码率不变的情况下,采用纠错编码所节省的信噪比)
。根据上式可知付出的代价是带宽增大。
因此,纠错码主要应用于功率受限而带宽不太受限的信道中。
四、代数码(建立在代数上的编码)
1. 线性分组码
对于普通分组码,其信息和码字之间的映射关系没有规律,因此共有
2
k
2^{k}
2k个映射项,需要很大存储空间。
对于线性分组码,这种映射关系可以用一个矩阵来表达,即简洁又可以节省空间。
把输入信息块的长度为 k k k,输出码字长度为 n n n的线性分组码记为(n,k)。把信息块记为 m = [ m 1 , m 2 , … , m k ] \mathbf{m}=[m_{1},m_{2},\dots ,m_{k}] m=[m1,m2,…,mk],码字记为 c = [ c 1 , c 2 , … , c n ] \mathbf{c}=[c_{1},c_{2},\dots ,c_{n}] c=[c1,c2,…,cn],在线性分组码中,码字 c \mathbf{c} c和信息块 m \mathbf{m} m的关系可以用一个线性矩阵来表达,记为: c = m G \mathbf{c}=\mathbf{mG} c=mG其中, G \mathbf{G} G叫做生成矩阵,记为: G = [ g 1 g 2 … g k ] \mathbf{G}= \begin{bmatrix} \mathbf{g}_{1} \\ \mathbf{g}_{2} \\ \dots \\ \mathbf{g}_{k} \end{bmatrix} G= g1g2…gk 其中, g i ( i = 1 , 2 , … , k ) \mathbf{g}_{i}(i=1,2,\dots ,k) gi(i=1,2,…,k)是生成矩阵的每一行。如果生成矩阵满足: G = [ I k P T ] \mathbf{G} =[\begin{matrix} \mathbf{I_{k}} & \mathbf{P}^{T} \end{matrix}] G=[IkPT]则这就是一个系统码的生成矩阵。其中, I k \mathbf{I_{k}} Ik是 k × k k\times k k×k单位阵, P T \mathbf{P}^{T} PT是 k × ( n − k ) k\times (n-k) k×(n−k)矩阵。系统码的好处就在于码字的前 k k k位就是信息位,编码只需要计算码字的其他 ( n − k ) (n-k) (n−k)位,被称为校验位。
因为许用码组空间是
k
k
k维的,则其零空间是
(
n
−
k
)
(n-k)
(n−k)维的,把零空间的
(
n
−
k
)
(n-k)
(n−k)个基底作为行构成一个矩阵,这个矩阵是
(
n
−
k
)
×
n
(n-k)\times n
(n−k)×n的,记为:
H
=
[
h
1
h
2
…
h
(
n
−
k
)
]
\mathbf{H}=\begin{bmatrix} \mathbf{h}_{1} \\ \mathbf{h}_{2} \\ \dots \\ \mathbf{h}_{(n-k)} \end{bmatrix}
H=
h1h2…h(n−k)
H
\mathbf{H}
H当中每一个行向量都与
G
\mathbf{G}
G当中的行向量正交,这个
H
\mathbf{H}
H就被称为校验矩阵。注意,对一个生成矩阵,校验矩阵并不唯一。
线性分组码的解码算法可以参考:http://t.csdn.cn/Na1nL。我认为过程讲得很清楚。
2. 汉明码
对于
(
n
,
k
)
(n,k)
(n,k)线性分组码,若希望用
r
=
n
−
k
r=n-k
r=n−k个监督码元构造出
r
r
r个监督关系式来指出一位错码的
n
n
n种可能位置,则
r
r
r必须满足:
2
r
−
1
≥
n
或
2
r
≥
k
+
r
+
1
2^{r}-1\ge n \text{ 或 } 2^{r}\ge k+r+1
2r−1≥n 或 2r≥k+r+1
当
“
=
”
“=”
“=”成立时,构造的线性分组码称为汉明码,是一种能纠1位错码的高效线性分组码。
- 汉明码可以写作: ( n , k ) = ( 2 r − 1 , 2 r − 1 − r ) (n,k)=(2^{r}-1,2^{r}-1-r) (n,k)=(2r−1,2r−1−r)
- 汉明码的最小码距为: d 0 = 3 d_{0}=3 d0=3(纠1或检2)
- 汉明码的编码效率为: R c = k / n = ( n − r ) / n = 1 − r / ( 2 r − 1 ) R_{c}=k/n=(n-r)/n=1-r/(2^{r}-1) Rc=k/n=(n−r)/n=1−r/(2r−1)
3. 循环码
循环码是一种线性分组码,并具有循环性。循环性是指指任一码组循环移位(将最右端的一个码元移至左端,或反之)后,仍为该码中的一个许用码组。BCH码是能够纠正多个随机错误的循环码。
(1)码多项式:一个长度为
n
n
n的码组
A
=
(
a
n
−
1
,
a
n
−
2
,
…
,
a
0
)
A=(a_{n-1},a_{n-2},…,a_{0})
A=(an−1,an−2,…,a0)可表示成如下多项式形式:
A
(
x
)
=
a
n
−
1
x
n
−
1
+
a
n
−
2
x
n
−
2
+
⋯
+
a
1
x
+
a
0
A(x)=a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\dots +a_{1}x+a_{0}
A(x)=an−1xn−1+an−2xn−2+⋯+a1x+a0多项式的系数就是码组中的各码元,
x
x
x仅是码元位置标记 。
(2)码多项式的按模运算:若一任意多项式
F
(
x
)
F(x)
F(x)被一
n
n
n次多项式
N
(
x
)
N(x)
N(x)除,得到商式
Q
(
x
)
Q(x)
Q(x)和一个次数小于
n
n
n的余式
R
(
x
)
R(x)
R(x),即
则有:
F
(
x
)
≡
R
(
x
)
F(x)\equiv R(x)
F(x)≡R(x),(模
N
(
x
)
N(x)
N(x))
举个栗子:如果
则有:
(3)循环码的码多项式:在循环码中,若
A
(
x
)
A(x)
A(x)是一个长为
n
n
n的许用码组,则
x
′
⋅
A
(
x
)
x'·A(x)
x′⋅A(x)在按模
x
n
+
1
x^{n}+1
xn+1运算下,也是该编码中的一个许用码组,即若:
则
A
′
(
x
)
A^{'}(x)
A′(x)也是该编码中的一个许用码组。这是因为,
A
′
(
x
)
A^{'}(x)
A′(x)正是
A
(
x
)
A(x)
A(x)代表的码组向左循环移位
i
i
i次的结果。
一个长为n的循环码的码多项式都是按模
(
x
n
+
1
)
(x^{n}+1)
(xn+1)运算的一个余式。
(4)循环码的生成矩阵与生成多项式:
生成矩阵
G
\mathbf{G}
G可由
k
k
k个线性无关的码组构成。因此,要做的就是寻找这
k
k
k个线性无关的码组。
在
(
n
,
k
)
(n,k)
(n,k)循环码的
2
k
2^{k}
2k个码组中挑出一个前面
(
k
−
1
)
(k-1)
(k−1)位都是
“
0
”
“0”
“0”的码组——用
g
(
x
)
g(x)
g(x)表示;根据循环性,
g
(
x
)
、
x
g
(
x
)
、
x
2
g
(
x
)
、
…
、
x
k
−
1
g
(
x
)
g(x)、xg(x)、x^{2}g(x)、…、x^{k-1}g(x)
g(x)、xg(x)、x2g(x)、…、xk−1g(x)都是该循环码的码组,且线性无关。因此,用这
k
k
k个线性无关的码组可构成该循环码的生成矩阵
G
\mathbf{G}
G,即
g
(
x
)
g(x)
g(x)称为循环码的生成多项式。如何寻找任一
(
n
,
k
)
(n,k)
(n,k)循环码的生成多项式
g
(
x
)
g(x)
g(x)?
只要记住这个公式:
x
n
+
1
=
g
(
x
)
[
x
k
+
h
(
x
)
]
x^{n}+1=g(x)[x^{k}+h(x)]
xn+1=g(x)[xk+h(x)]这个公式表明:循环码的生成多项式
g
(
x
)
g(x)
g(x)应该是
(
x
n
+
1
)
(x^{n}+1)
(xn+1)一个
(
n
−
k
)
(n-k)
(n−k)次因子。
在设计循环码时可以采用将码长截短的方式,满足设计对码长的要求。
举个栗子: 求 ( 7 , 3 ) (7, 3) (7,3)循环码的生成多项式 g ( x ) g(x) g(x)
根据之前的分析, ( 7 , 3 ) (7,3) (7,3)码的生成多项式 g ( x ) g(x) g(x)应该是 ( x 7 + 1 ) (x⁷+1) (x7+1)的 7 − 3 = 4 7-3=4 7−3=4次因子,由
可见:有两个4次的因子,均可作为 ( 7 , 3 ) (7,3) (7,3)循环码的生成多项式 g ( x ) g(x) g(x)。选用的 g ( x ) g(x) g(x)不同,产生出的循环码码组也不同。
(5)循环码的编码
根据给定的 ( n , k ) (n,k) (n,k)值选定生成多项式 g ( x ) g(x) g(x),根据已知信息码 ( a n − 1 a n − 2 … a n − k ) (a_{n-1} a_{n-2}\dots a_{n-k}) (an−1an−2…an−k)的多项式 m ( x ) m(x) m(x)和循环码多项式 A ( x ) A(x) A(x),有 A ( x ) = m ( x ) g ( x ) A(x)=m(x)g(x) A(x)=m(x)g(x)。可见由 m ( x ) m(x) m(x)与 g ( x ) g(x) g(x)相乘就可生成循环码的全部码字。
系统循环码的编码步骤:
(6)循环码的解码
目的:检错和纠错
检错:对接收码组
B
(
x
)
B(x)
B(x)进行
B
(
x
)
/
g
(
x
)
B(x)/g(x)
B(x)/g(x),若能整除,则传输无错。如果数据在传输过程中出现了错误,则一般不能整除,利用这个性能可以检验数据库是否被正确传输,这个方法叫做循环冗余校验(CRC校验)。
在3GPP协议中采用的24,16和8位校验码的CRC,生成多项式分别是: G C R C 24 ( p ) = p 24 + p 23 + p 6 + p 5 + p + 1 G C R C 16 ( p ) = p 16 + p 12 + p 5 + 1 G C R C 8 ( p ) = p 8 + p 7 + p 4 + p 3 + p + 1 G_{CRC24}(p)=p^{24}+p^{23}+p^{6}+p^{5}+p+1\\G_{CRC16}(p)=p^{16}+p^{12}+p^{5}+1\\G_{CRC8}(p)=p^{8}+p^{7}+p^{4}+p^{3}+p+1 GCRC24(p)=p24+p23+p6+p5+p+1GCRC16(p)=p16+p12+p5+1GCRC8(p)=p8+p7+p4+p3+p+1
纠错:
- 作 B ( x ) / g ( x ) B(x)/g(x) B(x)/g(x),得出余式,即循环码的校正子多项式 S ( x ) S(x) S(x);
- 由 S ( x ) S(x) S(x)得到错误图样 E ( x ) E(x) E(x),确定错码位置;
- 从 B ( x ) B(x) B(x)中减去 E ( x ) E(x) E(x),纠正成原发送码组 A ( x ) = B ( x ) − E ( x ) A(x)=B(x)-E(x) A(x)=B(x)−E(x)。
4.卷积码
卷积码是一种非分组码,督元不仅和当前的k比特信息段有关,还同前面(N-1)个信息段也有约束关系。所以它监督者N个信息段。
卷积码用
(
n
,
k
,
N
)
(n,k,N)
(n,k,N)表示。 这里:
- N N N:编码约束度,表示编码过程中互相约束的码段个数;
- n N nN nN:编码约束长度,表示编码过程中互相约束的码元个数。
- N N N或 n N nN nN也反映了卷积码编码器的复杂度。
- 卷积码的码率: R = k / n R =k / n R=k/n
卷积码的一般结构:
在卷积码当中,信息位顺序通过移位寄存器组。上图的一个小格子是 一个移位寄存器, 可以存储
1
b
i
t
1bit
1bit 信息。 移位寄存器组在时钟的驱动下工作,每过一 个时钟脉冲,信息位就向右移动一个位置。
移位寄存器分成长度为 K K K的组,一共有 L L L组。 参数 L L L叫作约束长度,而 L − 1 L-1 L−1叫作记忆长度。 每个时钟节拍来临之后,寄存器向右移动 k k k, 输入 K K K个信息位, 并对寄存器组当中的信息位进行某种组合运算,输出 n n n个 b i t bit bit。 输出 b i t bit bit串行后得到输出的信息流,这个卷积码记作 [ n , k , L ] [n,k,L] [n,k,L]。
举个栗子: [ 2 , 1 , 3 ] [2,1,3] [2,1,3]卷积码生成
5. Turbo码
Turbo码是一种利用迭代解码算法和双卷积码编码的高性能纠错编码方案。它具有优异的纠错性能和误比特率表现,在无线通信等领域得到广泛应用。
Turbo码的设计基于两个编码器、一个交织器和两个迭代解码器。编码器使用两个不同的卷积码进行编码,其中一个卷积码作为主编码器,另一个作为辅助编码器。通过交织器对编码后的位进行交织操作,以增加传输抵抗信道的噪声和干扰。
在解码端,使用迭代解码算法对接收到的码字进行反复解码。迭代解码器根据先前解码结果的反馈信息,通过多次迭代的过程进行自我校正,从而提供更准确的解码结果。该迭代过程允许纠正较高比特错误率下的传输错误,并具有较好的性能优势。
Turbo码在无线通信等领域得到广泛应用,尤其在高速传输环境和信道质量较差的情况下表现出色。它在3G和4G移动通信系统中被采用为信道编码方案,并被应用于数据传输、语音通话和图像传输等场景。Turbo码的高纠错性能和低误比特率使得它成为许多现代通信系统中重要的纠错编码技术。