当前位置:文档之家› 卷积码的仿真与分析-信息论报告

卷积码的仿真与分析-信息论报告


2kL条路径(序列),而是接收一段,计算和比较一段,选 择一段最大似然可能的码段,从而达到整个码序列是一个 最大似然值得序列。 下面以图6的(2,1,3)卷积码编码器所编出的码为 例,来说明维特比解码的方法和运作过程。为了能说明解 码过程,这里给出该码的状态图,如图7所
mj mj-1 mj-2
输出序列 m1,m2,…mj,… y1j y2j 输入序列
产生网格图 确定l 输入序列数是k的整数倍 寄存器个数是k的整数倍 开始 开始 寄存器个数是k的整数倍 输入序列数是k的整数倍 结束
图3.2 Viterbi译码程序流程图
4.卷积码的仿真 4.1 (2,1)卷积码的仿真
随机输入一组序列,本仿真实验中输入的序列是:1 0 1 1 0 1 0 0,通过卷积编码程序对所输入的序列进行 编码,得到卷积码输出,再对这个卷积码进行噪声干扰, 在实际通信系统中即相当于在空中传输过程中出现传输错 误,出现误码,译码器接收到错误的码字进行解码,理论
单位的输入信息有关,即和前2个子码有关;而且要经过2 个时间单位才能移出存贮器,所以也参与了后2个子码中 的校验运算,称为编码约束度,说明编码过程中互相约束 的码段个数。本例的编码约束度为3。m或是表示卷积码编 码器复杂性的一个重要参数。m或越大,编码器和译码器 越复杂,但卷积码的纠错能力也越强。因此这是一对矛 盾,在具体设计时要根据应用要求进行折衷处理,选择适 当的码型。 卷积码的描述方式为解析法和图解法两类。解析法 包括矩阵形式和生成多项式形式,图解法包括树图、状态 图和网格图。
三级项目报告
课程名称: 码___________ 课程设计题目: _______ 卷积码的仿真与分析 信息论与编
指导教师: ______________ 系 学 别: 号: 专 姓 业: 名: _____
合 作 者
完成时间:
2012 年 6 月 10 日至 6 月 14
日 成绩: 1. 卷积码及其编译码原理概述
图4.2.2 解码器输出的序列
5.卷积码误码率
卷积码是面向流的编码,自由距只影响其中相邻若 干比特的误码。码长是无穷的,而自由距是固定的,因此 不能用纠错能力或检错能力来描述卷积码的性能,比较公 平的一种描述是它的平均误比特率,或在一定(较短)帧长 的误帧率,或者研究在某一位置开始发生一次错误(序列) 的概率。 对卷积码译码误码率的仿真结果如下图5.1所示。图 中,横坐标是信噪比(SNR),是信息功率与噪声功率的比
非分组码的卷积码的编码器是在任一段规定时间内产 生n个码元,但它不仅取决于这段时间中的k个信息位,还 取决于前(K-1)段规定时间内的信息位,这K段时间内的码 元数目为K·k,称参数K为卷积码的约束长度,每k个比特 输入,得到n比特输出,编码效率为k/n,约束长度为K。 在k=1的条件下,移位寄存器级数m=K-1。 卷积码一般可用(n,k,K)来表示,其中k为输入码 元数,n为输出码元数,而K则为编码器的约束长度。典型的 卷积码一般选n和k ( k< n ) 值较小,但约束长度K可取较 大值(K<10),以获得既简单又高性能的信道编码[6]。 卷积码是1955年Elias最早提出,1957年Wozencraft提 出了序列译码。1963年Massey提出了一种性能稍差,但比 较实用的门限译码方法。1967年维特比(Viterbi)提出了 最大似然译码。它对存储器级数较小的卷积码的译码很容 易实现,称为维特比算法或维特比译码。
评阅人:
图1、二进制卷积码的编码器
图2给出了(3,1,2)二进制卷积码编码器。在每 一时间单位,输入一个比特信息,同时存贮器内的数据向 右移一位,产生3个比特的输出,其中一个是输入比特, 两个是校验比特,。
图2
由图可知: 因为校验比特是输入信息元的模2和,它们是线性关 系,所以这类卷积码是线性码。称为卷积码的一个子码或 码段,它不仅与当前输入信息有关,还与前2个(m)时间
a b c d
节点号 0 1 2 3 4 5 6 7 00 00 00 00 00 00 00 11 11 11 11 11
11 11 11 00 00 01 01 01 01 01 01 01 01 01 01 01 11 11 10 10 10 10
设输入编码器的信息序列为(11011000),则由编码 器对应输出的序列为Y=(1101010001011100),编码器的状 态转移路线为abdcbdca。若收到的序列R= (0101011001011100),对照网格图来说明维特比译码的方 法。
a b c d
节点号
0 1 2 3 00 00 00 11 11 11 01 01 01
图9
维特比译码第3时刻幸存路径
由于该卷积码的约束长度为6位,因此先选择接收序 列的前6位序列R1=(010101)同到达第3时刻的可能的8个码 序列(即8条路径)进行比较,并计算出码距。该例中到达 第3时刻a点的路径序列是(000000)和(111011),他们与R1 的距离分别为3和4;到达第3时刻b点的路径序列是 (000011)和(111000),他们与R1的距离分别为3和4;到达 第3时刻c点的路径序列是(001110)和(110101),他们与R1 的距离分别为4和1;到达第3时刻d点的路径序列是 (001101)和(110110),他们与R1的距离分别为2和3。上述 每个节点都保留码距较小的路径作为幸存路径,所以幸存 路径码序列是(000000)、(000011)、(1101001)和 (001101),如图9所示。用于上面类似的方法可以得到第 4、5、6、7时刻的幸存路径。
图4.2.1 编码器输出的卷积码
当通信过程中遇到噪声干扰,出现错码时。例如本 例中将第一位、第五位、第十位和最后一位更改。得到噪 声之后的序列,之后再将噪声之后序列送入译码程序进行 译码输出。经过维特比译码之后输出的输出序列理论上是 原始的输入序列,若与输入序列相同,则验证成功。 设置译码器输入端: 编码器输出的卷积码序列: channel_output=[ 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0000001000 1 1 1 1 0 1 1 1 0 0 0 0 0 0] 加了噪声之后的序列(被送到译码器中进行译码的序列):
图4.1.1 编码器输出的卷积码
当通信过程中遇到噪声干扰,出现错码时。例如本 例中将第一位、第五位、第十位和最后一位更改。得到噪 声之后的序列,之后再将噪声之后序列送入译码程序进行 译码输出。经过维特比译码之后输出的输出序列理论上是 原始的输入序列,若与输入序列相同,则验证成功。 设置解码器输入端: 编码器输出的卷积码序列: channel_output =[ 1 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0] 加了噪声之后的序列(被送到译码器中进行译码的序列): channel_output =[ 0 1 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1] 经过译码器译码之后的输出序列: decoder_output =[ 1 0 1 1 0 1 0 0] 该序列与原始的输入序列coder_input=[1 0 1 1 0 1 0 0]相 同,即还原到了原始的输入序列,达到了纠错的目的。验证成 功。
channel_output=[ 0 1 1 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0000001000 1 1 1 1 0 1 1 1 0 0 0 0 0 1] 经过译码器译码之后的输出序列:decoder_output =[ 1 0 1 1 0 1 0 0] 该序列与原始的输入序列coder_input=[1 0 1 1 0 1 0 0]相同,即还原到了原始的输入序列,达到了纠错的 目的。验证成功。 仿真结果如图4.2.2所示。
3.卷积码编解码设计
开始 是 是 否 结束 否 i=i+1 是 是 error 否 否 输入序列数是k的整数倍 寄存器个数是k的整数倍 确定编码器寄存器个数G_2 确定编码器输出端个数n i=1 ? gg_out与输入矩阵G模2相乘输出 取输入序列前G_2 - i个,得到gg_out函数 i=i-1 gg_out与输入矩阵G模2相乘输出 取输入序列前G_2个,得到gg_out函数 i=i+1 i=寄存器个数G_2 -1 ? gg-out与输入矩阵G模2相乘输出 取输入序列前i个,其后补0得到gg_out函数 i=1 编码器初始化
开始
寄存器个数是k的整数倍 输入序列数是k的整数倍 i=1 gg-out与输入矩阵G模2相乘输出 gg_out与输入矩阵G模2相乘输出 gg_out与输入矩阵G模2相乘输出 结束
图3.1卷积码编码程序流程图 结束 error 是 是 否 否 由后到前得到各级的状态 从最佳路径中产生解码 回溯最佳路径 尾部信道更改幸存路径 尾部信道状态转移路径选择 无尾信道更改幸存路径 无尾信道更改汉明距 无尾信道计算汉明距,加、比、选 产生幸存状态矩阵 按输入输出划分矩阵 确定级数 产生状态转移矩阵、输出矩阵、输入矩阵 产生状态距离矩阵
上按照Viterbi译码算法是可以回溯到原始的正确码字 的,即正确的输入序列。现在对于编码程序在MATLAB系统 中对该实验进行仿真,验证译码是否正确,以得出是否有 差错控制的功能,即卷积码可以实现差错控制。 设置编码器输入端:
随机输入序列:
coder_input=[1 0 1 1 0 1 0 0] 输入(2,1)卷积码的生成矩阵: 设置输入端个数:k=1 则通过仿真得到编码器输出的卷积码序列: channel_output =[ 1 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0] 仿真结果如图4.1.1所示。
相关主题