关于卷积码编码结果的位数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于卷积码编码结果的位数
一、问题描述
卷积码的编码是我们经常遇到的,在讲解卷积码的输出时,我们都是如下所示的这个典型的(2,1,3)卷积码为例的,其中1111g =,2101g =。
在这个例子的条件下,我们总是可以迅速地求得正确的编码结果,无论使用离散卷积,还是多项式,还是生成矩阵。但是,实际中可不都是这样的,生成多项式可能出现左侧或者右侧为零的情况,比如1100g =,2001g =之类的,这样就出现了离散卷积或者多项式相乘后位数不正常的情况,使得输出结果存在前后补零的问题。另外,输入也不见得都是10111u =这样的,也可能出现1011100u =,此时结果又会出现位数上的疑问。
下面就从根源开始,详细说说这个位数的问题。
二、生成多项式含零
考虑生成多项式含零的问题,就用最极端的例子,1100g =,2001g =,前者是右侧含零,后者是左侧含零。为了更有针对性,暂不考虑输入两侧含零的情况,假设输入10111u =。
1、完整输出的位数
首先我们需要对正常完整输出的位数有个理解,在输入为5位,1g 长度为3的情况下,上支路输出位数应该是7位,具体计算是5+3-1。实际上,对于输入n 位,1g 长度为m 的情况,上支路输出位数应该是n +m -1位,其中m -1是寄存器的个数。也即输入为n 位时,输出完n 位之后寄存器中还存在输入的数据,只有当寄存器的内容跟输入都无关了,才算输出结束,所以输出除了输入的n 位,还会输出跟寄存器数量相等的m -1位。当然,这里只讨论了一个支路,总的输出位数应该是n +m -1乘以输出路数。
所以,抛开输入是否为零,生成多项式是否为零的因素不看,正常的完整的输出就应该是n +m -1位,这是后续分析的基础。
2、离散卷积法
对于一个一般的111g =,进行离散卷积显然如下图(a )所示,离散卷积的结果长度为7。但是对于1100g =和
2001g =,很多同学就觉得困惑了,因为结果长度不够,不知道该如何合并。实际上,这个并不难,只要不偷懒,把
计算过程写完整,完全没有问题,如下图(b )(c )所以。至于什么前面补零还是后面补零的问题,根本就不是问题,我们就按照正常的方法去计算,算出来是多少就多少。
输出
1
g 2
1
c
最后得到11011100c =,20010111c =,两路输出交错合并,得到10001110110101c =。 3、多项式法
输入10111u =对应多项式234()1u x x x x =+++。如果2()1g x x x =++,多项式相乘的结果是46()1c x x x x =+++,再写成二进制就是1100101c =,这没什么问题。但是如果考虑1100g =和2001g =,有同学就感到困惑了。其实也没什么,这里()g x 的理论最高次方是2次方,()u x 的理论最高次方是4次方,所以相乘之后的完整多项式理论最高次方应该是6次方。注意,这里说的是“理论最高次方”,因为不是所有的多项式都会取到这个最高,如果右边有零,这里
的“理论最高次方”次方就取不到。1()1g x =,22()g x x =,跟()u x 相乘得到2341()1c x x x x =+++,24562()c x x x x x =+++。
根据“理论最高次方”为6的结论,我们把这两个多项式写成完整形式,即0次方都6次方都补齐,没有的用0代替,就什么问题都没有了。
2341()1000c x x x x =++++++,24562()000c x x x x x =++++++
我们再把这两个完整多项式写成码字,就得到了卷积结果,11011100c =,20010111c =。两路输出交错合并,得到10001110110101c =。
当然,在熟练之后,不应该在多项式中写上这些0,否则会看上去很奇怪,这只是我们为了解决这个问题而详细列出的,实际做题的时候脑子里面有这个概念就可以了。
4、生成矩阵法
其实生成矩阵法是最不容易错的,因为矩阵的每一位都有严格卡位,不可能多出或者少了哪一位,从而就不存在补零的问题了。考虑1100g =和2001g =,10111u =,对应的计算式如下:
1000011000011011110001110110101100001
100001100001c uG ⎛⎫
⎪
⎪==⨯= ⎪
⎪
⎝
⎭ 注意,卷积码计算时生成矩阵的行数是不固定的,要跟输入位数一致。因为卡位严格,所以生成矩阵算出来的结果无懈可击,如果遇到不确定的情况,用生成矩阵来计算或者验证其实也是不错的主意。
三、输入序列含零
现在考虑输入1011100u =的情形,为了更有针对性,假设1111g =,2101g =,这样我们就能把精力集中到输入上。首先根据前面的分析,这里输入是7位,生成多项式序列1g 是3位,所以完整的输出长度应该是7+3-1=9位。有
10111
111
1011110111101111100101
()
a 10111
001
1011100000000000010111
()
b 10111
100
101111011100
()
c 0000000000
了这个预期再进行计算,就不容易出错了。
前面三种方法已经讲清楚,下面就以多项式计算法为例来算一下。输入为7位,理论最高次方是6次方,1()g x 的理论最高次方是2次方,所以相乘后的理论最高次方应该是8次方。234()1u x x x x =+++,21()1g x x x =++,
22()1g x x =+,所以461()1c x x x x =+++,3562()1c x x x x =+++。根据理论最高次方为8,将多项式补齐如下:
461()100000c x x x x =++++++++,3562()100000c x x x x =++++++++
我们再把这两个完整多项式写成码字,就得到了卷积结果,1110010100c =,2100101100c =。两路输出交错合并,得到111000011001110000c =。
再讲问题复杂化一点,假设1100g =,2001g =,我我们照样可以轻松求出编码结果而无需担心长度的问题。
234()1u x x x x =+++,1()1g x =,22()g x x =,所以2341()1c x x x x =+++,24562()c x x x x x =+++。根据理论最高次方
为8,将多项式补齐如下:
2341()100000c x x x x =++++++++,24562()00000c x x x x x =++++++++
我们再把这两个完整多项式写成码字,就得到了卷积结果,1101110000c =,2001011100c =。两路输出交错合并,得到100011101101010000c =。
当然,使用离散卷积和生成矩阵的方法都能得到正确的结果,只要我们注意把过程写完整就一定不会错。仍以1011100u =,1100g =,2001g =为例,离散卷积方法如下:
使用生成矩阵的计算过程如下:
100001100001100001
1011100100011101101010000100001100001100001100001c uG ⎛⎫ ⎪ ⎪ ⎪==⨯= ⎪
⎪
⎪ ⎪⎝⎭
四、尾比特的问题
有时候卷积码的描述中并没有已知生成多项式,只是已知了状态转移图,比如最常见的(2,1,3)卷积码状态转移图如下:
1011100
100
101110000
0000000
000000010111001011100
001
001011100
000000000000001011100