Convolutional Code
分块码(block code):数据流(datastream)被切分为包含 k k k个数据符号(data symbol)的块,叫做数据字(dataword),然后将它们分别编码为包含 n n n个码符号(code symbol)的块,叫做码字(codeword),拼接成码流(codestream)。单个码字仅仅依赖于单个数据字。
Hamming码、BCH码,都是分块码。
格码(trellis code): q q q元( q − a r y q-ary q−ary)数据流(datastream)被切分为包含 k k k个数据符号(data symbol)的块,叫做数据帧(dataframe),然后将它们分别编码为包含 n n n个码符号(code symbol)的块,叫做码帧(codeframe),拼接成码流(codestream)。单个码帧要依赖于多个数据帧。
格码往往被描述为移位寄存器编码器(shift-register encoder)。编码器中可以存储 m m m个大小为 k k k的数据帧,这里 m m m叫做帧内存(frame memory)。
从零时刻开始,数据流按帧不间断地移位进编码器;每一跳(each clock time),一个新的数据帧移入寄存器,同时最旧的数据帧移出寄存器被丢弃;此时,寄存器中包含 m k mk mk个数据符号,编码器根据它们计算单个长度为 n n n的码帧。这是一个 ( n , k ) (n,k) (n,k)格码,码率 R = k / n R=k/n R=k/n。
如果每一时刻, n n n长码帧的前 k k k个位置就是数据帧的内容,那么我们称它为系统编码的(systematically encoded)。
最小编码器中 q q q元内存元胞的数量,叫做约束长度(constraint length),记做 v v v,且明显 v ≤ m k v \le mk v≤mk
注意,虽然格码被描述为移位寄存器编码器,但同一个格码有很多不同的编码器,编码器不是描述格码所必须的。
一种重要的格码是卷积码(convolutional code),它满足:
-
加法线性(additional linearity):两个数据流的任意线性组合的码流,等于码流的线性组合,
G ( β a 1 + γ a 2 ) = β G ( a 1 ) + γ G ( a 2 ) G(\beta a_1 + \gamma a_2) = \beta G(a_1) + \gamma G(a_2) G(βa1+γa2)=βG(a1)+γG(a2)
这里的 a 1 , a 2 a_1,a_2 a1,a2是无限长数据流, β , γ ∈ G F ( q ) \beta,\gamma \in GF(q) β,γ∈GF(q), G ( ⋅ ) G(\cdot) G(⋅)是无限长的码流。 -
时不变性(time-invariance):数据流通过填充全零的前导数据帧(a leading dataframe of zeros)来延迟单个数据帧(delayed by a single dataframe),那么码流会延迟单个码帧,它的前导码帧是全零的(a leading codeframe of zeros),
G ( 0 ∥ a ) = 0 ∥ G ( a ) G(\pmb 0\|a) = \pmb 0 \| G(a) G(000∥a)=000∥G(a)
左边的 0 \pmb 0 000是 k k k长的单个全零数据帧,右边的 0 \pmb 0 000是 n n n长的单个全零码帧。
一般卷积码的 k k k都很小,甚至是 k = 1 k=1 k=1。因此,它们的码率都远远达不到 1 1 1,这不像分组码可以达到 R = 1 R=1 R=1。
只有很少的卷积码构造类已知,大多数卷积码都是计算机搜索的。没有拥有令人满意的代数结构的一类卷积码已知,也没有令人满意的长约束长度的一类卷积码的构造方法已知。
Trellis description
网格图(trellis):一个有向图,每个节点上都有关于起始节点的良定义的深度(即从起始节点到达它的所有路径的长度相同)。
我们考虑向右半无限的(semi-infinite to the right)网格图,它的每一列包含 q v q^v qv个点,对应编码器的 q v q^v qv种状态,这一列点的深度相同。每个节点上都有 q k q^k qk个有向分支。相邻两列节点之间的连接方式是相同的。每一列都被用整数 l l l标记,它叫做时刻(time)。时刻 l l l上的节点表示编码器当前状态 s l s_l sl,再根据最新的数据帧来选择一条分支,到达 l + 1 l+1 l+1时刻的一个节点 s l + 1 s_{l+1} sl+1。
对于的 ( 2 , 1 ) 2 (2,1)_2 (2,1)2卷积码,网格图为:
对应的编码器为:
我们利用网格图来描述卷积码,而不必使用编码器。
我们可以构造一个系统编码的 ( 2 , 1 ) 2 (2,1)_2 (2,1)2卷积码,
可以看出,任意的 ( n , k ) q (n,k)_q (n,k)q卷积码,都可以被 n n n组有限脉冲响应滤波器(finite-impulse-response filter)所编码,每个滤波器由 k k k个前反馈移位寄存器(feedforward shift registers)所组成。
Polynomial description
我们可以用生成器多项式(generator polynomials)来表示卷积码的一个编码器。对于
(
n
,
k
)
q
(n,k)_q
(n,k)q卷积码的帧内存
m
m
m的编码器(注意,描述的不是code,而是encoder),定义多项式生成矩阵(polynomial generator matrix):
G
(
x
)
=
[
g
i
j
(
x
)
]
∈
(
G
F
(
q
)
[
x
]
)
k
×
n
G(x) = [g_{ij}(x)] \in (GF(q)[x])^{k \times n}
G(x)=[gij(x)]∈(GF(q)[x])k×n
包含
n
k
nk
nk个多项式,它们的度数不超过
m
m
m。并且需要至少有一个多项式不以
x
x
x为因式。如果
G
(
x
)
G(x)
G(x)中所有多项式都以
x
x
x为根,那么就可以同时提取出
x
x
x来,从而使得码流延迟单个码帧。
例如,非系统的
(
2
,
1
)
2
(2,1)_2
(2,1)2卷积码,
G
(
x
)
=
[
x
2
+
1
x
2
+
x
+
1
]
G(x) = \begin{bmatrix} x^2+1 & x^2+x+1 \end{bmatrix}
G(x)=[x2+1x2+x+1]
令数据多项式为:
a
(
x
)
=
[
a
00
,
a
01
,
⋯
,
a
0
,
k
−
1
]
+
[
a
10
,
a
11
,
⋯
,
a
1
,
k
−
1
]
x
+
⋯
a(x) = [a_{00},a_{01},\cdots,a_{0,k-1}] + [a_{10},a_{11},\cdots,a_{1,k-1}] x + \cdots
a(x)=[a00,a01,⋯,a0,k−1]+[a10,a11,⋯,a1,k−1]x+⋯
每一个系数都是一个数据帧的向量,它本身是
k
k
k个无限长多项式所组成的行向量。
编码过程为:
c
(
x
)
=
a
(
x
)
G
(
x
)
c(x) = a(x)G(x)
c(x)=a(x)G(x)
令码多项式为:
c
(
x
)
=
[
c
00
,
c
01
,
⋯
,
c
0
,
n
−
1
]
+
[
c
10
,
c
11
,
⋯
,
c
1
,
n
−
1
]
x
+
⋯
c(x) = [c_{00},c_{01},\cdots,c_{0,n-1}] + [c_{10},c_{11},\cdots,c_{1,n-1}] x + \cdots
c(x)=[c00,c01,⋯,c0,n−1]+[c10,c11,⋯,c1,n−1]x+⋯
每一个系数都是一个码帧的向量,它本身是
n
n
n个无限长多项式所组成的行向量。
截断卷积码(truncated convolutional code):对于无限长的 a ( x ) a(x) a(x),我们丢弃 c ( x ) c(x) c(x)后面的无限个系数。这是分块码。
终止卷积码(terminated convolutional code):限制 a ( x ) a(x) a(x)为有限长多项式,计算得到有限长的 c ( x ) c(x) c(x)。这是分块码。
生成矩阵可以通过列置换以及初等行变换,得到等价生成矩阵(equivalent generator matrices),它们生成相同的卷积码,仅仅是数据符号的对应方式不同。系统的生成矩阵:
G
(
x
)
=
[
I
P
(
x
)
]
G(x) = \begin{bmatrix} I & P(x) \end{bmatrix}
G(x)=[IP(x)]
一般地,由于多项式环
G
F
(
q
)
[
x
]
GF(q)[x]
GF(q)[x]上的元素不可逆,从而无法化作系统编码的。如果我们做分式域(包含整环的最小域):
G
F
(
q
)
(
x
)
=
{
a
(
x
)
/
b
(
x
)
:
a
(
x
)
,
b
(
x
)
∈
G
F
(
q
)
[
x
]
,
b
(
x
)
≠
0
}
GF(q)(x) = \{a(x)/b(x):\,\, a(x),b(x) \in GF(q)[x],\,\, b(x) \neq 0 \}
GF(q)(x)={a(x)/b(x):a(x),b(x)∈GF(q)[x],b(x)=0}
注意这里的
a
(
x
)
/
b
(
x
)
a(x)/b(x)
a(x)/b(x)就是一个有序二元组,不要试图做除法。
让矩阵 G ( x ) G(x) G(x)里的多项式取自这个分式域,叫做实矩阵(rational matrix)。如果 x ∤ b ( x ) x \nmid b(x) x∤b(x),我们说元素 a ( x ) / b ( x ) a(x)/b(x) a(x)/b(x)是可实数化的(realizable)。如果一个实的生成矩阵的每个元素都是可实数化的,我们说它是可实数化生成矩阵(realizable generator matrix)
例如,将非系统的
(
2
,
1
)
2
(2,1)_2
(2,1)2卷积码转换成系统的,
G
′
(
x
)
=
[
x
2
+
1
x
2
+
1
x
2
+
x
+
1
x
2
+
1
]
=
[
1
1
+
x
x
2
+
1
]
\begin{aligned} G'(x) &= \begin{bmatrix} \dfrac{x^2+1}{x^2+1} & \dfrac{x^2+x+1}{x^2+1} \end{bmatrix}\\ &= \begin{bmatrix} 1 & 1 + \dfrac{x}{x^2+1} \end{bmatrix}\\ \end{aligned}
G′(x)=[x2+1x2+1x2+1x2+x+1]=[11+x2+1x]
这里的分母
x
2
+
1
x^2+1
x2+1导致了编码器电路中包含反馈(feedback)。
明显, G ( x ) = T ( x ) G ′ ( x ) G(x) = T(x)G'(x) G(x)=T(x)G′(x),这里 T ( x ) T(x) T(x)是分式域 G F ( q ) ( x ) GF(q)(x) GF(q)(x)上的 k × k k \times k k×k非奇异矩阵。
k
×
n
k \times n
k×n的
G
(
x
)
G(x)
G(x)上,
k
×
k
k \times k
k×k的子矩阵的行列式叫做主行列式(principal determinant)。定义内度(internal degree)
deg
i
n
t
G
(
x
)
=
max
l
∈
[
(
n
k
)
]
[
deg
det
G
l
(
x
)
]
\deg_{int} G(x) = \max_{l \in [{n \choose k}]} [\deg \det G_l (x)]
degintG(x)=l∈[(kn)]max[degdetGl(x)]
定义外度(external degree)
deg
e
x
t
G
(
x
)
=
∑
i
=
0
k
−
1
max
j
[
deg
g
i
j
(
x
)
]
\deg_{ext} G(x) = \sum_{i=0}^{k-1} \max_j [\deg g_{ij}(x)]
degextG(x)=i=0∑k−1jmax[deggij(x)]
容易看出,
deg
i
n
t
G
(
x
)
≤
deg
e
x
t
G
(
x
)
\deg_{int} G(x) \le \deg_{ext} G(x)
degintG(x)≤degextG(x)
如果生成矩阵
G
(
x
)
G(x)
G(x)无法从更小内度的生成矩阵乘以
T
(
x
)
T(x)
T(x)得到,那么称它为基生成矩阵(basic generator matrix),令它的内度为
v
v
v,它就是约束长度。由于根据
G
(
x
)
G(x)
G(x)的定义
m
=
max
i
max
j
[
deg
g
i
j
(
x
)
]
m = \max_i \max_j [\deg g_{ij}(x)]
m=maximaxj[deggij(x)],因此有
v
≤
k
m
v \le km
v≤km
它测量了编码器的帧内存大小。
输入跨度(input span):
K
=
k
max
i
,
j
[
deg
g
i
j
(
x
)
+
1
]
K = k \max_{i,j} [\deg g_{ij}(x) + 1]
K=ki,jmax[deggij(x)+1]
它测量了能够影响单个码符号的数据符号序列的长度。
输出跨度(output span):
N
=
n
max
i
,
j
[
deg
g
i
j
(
x
)
+
1
]
N = n \max_{i,j} [\deg g_{ij}(x) + 1]
N=ni,jmax[deggij(x)+1]
它测量了单个数据符号能够影响的码符号序列的长度。
Matrix description
卷积码是包含无限个无限长的码字的线性码,从而可以用 G F ( q ) GF(q) GF(q)上的无限大的生成矩阵来表示。
对于
k
×
n
k \times n
k×n个生成器多项式:
g
i
j
(
x
)
=
∑
l
=
0
m
g
i
j
l
x
l
g_{ij}(x) = \sum_{l=0}^m g_{ijl} x^l
gij(x)=l=0∑mgijlxl
我们将它们的系数重新排列,令
G
l
=
[
g
i
j
l
]
∈
G
F
(
q
)
k
×
n
G_l = [g_{ijl}] \in GF(q)^{k \times n}
Gl=[gijl]∈GF(q)k×n,那么生成矩阵为:
G
=
[
G
0
G
1
⋯
G
m
0
0
⋯
0
G
0
⋯
G
m
−
1
G
m
0
⋯
⋮
]
G = \begin{bmatrix} G_0 & G_1 & \cdots & G_m & 0 & 0 & \cdots\\ 0 & G_0 & \cdots & G_{m-1} & G_{m} & 0 & \cdots\\ \vdots\\ \end{bmatrix}
G=⎣⎢⎡G00⋮G1G0⋯⋯GmGm−10Gm00⋯⋯⎦⎥⎤
其中的
0
\pmb 0
000表示
k
×
n
k \times n
k×n的零矩阵,
G
G
G是向下向右无限延伸的。
对于系统的生成矩阵和校验矩阵,写作:文章来源:https://www.toymoban.com/news/detail-411715.html
文章来源地址https://www.toymoban.com/news/detail-411715.html
到了这里,关于卷积码(convolutional code)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!