- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
卷积编码设计与仿真实验报告
一、实验目的
了解卷积码对信号的纠错性能,掌握维特比译码算法,分析卷积码不同码率下纠错能力的强弱,深刻理解CCSDS标准、信道编译码等相关概念和算法。
二、实验内容
1、自己编码实现(2,1,3)卷积码的编译码,对比不同信噪比条件下,是否采用编码对于误码率性能的影响;
2、基于MATLAB自带的vitdec函数实现对(2,1,7)卷积码以及2/3、3/4码率删除码的编译码,并对于不同码率抗噪声能力的强弱;
3、构造BPSK调制、加性高斯白噪声的传输环境。
三、实验原理
卷积码一般表示为(n,k,N)的形式,即将k个信息比特编码为n个比特的码组,N为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的n个码元不仅与当前组的k个信息比特有关,还与前N-1个输入组的信息比特有关。编码过程中相互关联的码元有N*n个。R=k/n是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选n,k较小,但N值可取较大(10),以获得简单而高性能的卷积码。
1、卷积码的编码原理
卷积码的编码器一般比较简单,为一个具有k个输入端,n个输出端,m级移位寄存器的有限状态有记忆系统。下图所示为(2,1,7)卷积码的编码器。
图1(2,1,7)卷积码编码器
若输入序列为u=(u0u1u2u3……),则对应两个码字序列C1=(ca0ca1ca2ca3……)和C2=(cb0cb1cb2cb3……),相应的编码方程可写为P1=u*C1,P2=u*C2,P=(P1,P2)。“*”符号表示卷积运算,P1,P2表示编码器的两个冲激响应,即编码器的输出可以由输入序列和编码器的两个冲击响应卷积而得到,故称为卷积码。这里的冲激响应指:当输入为[10000……]序列时,所观察到的两个输出序列值。由于上图N值为7,故冲激响应至多可持续到第7位,可写为P1=[1111001],P2=[1011011]然后将两个输出端的码字序列合并为一个码字序列为C=(ca0cb0ca1cb1ca2cb2……)。若输入信息序列为[1101];则P1=[1001010101],P2=[1111101111],C=[11010111011001110111]。
2、卷积码维特比译码
网格图可以描述卷积码的状态随时间推移而转移的情况。该图纵坐标表示所有状态,横坐标表示时间。网格图在卷积码的概率译码,特别是Viterbi译码中非常重要,它综合了状态图法直观简单和树图法时序关系清晰的特点。
状态
状态
t1t2t3t4t5t6
2
1
1
1
1
1
1
1
1
1
1
1
0
2
2
0
2
0
0
2
0
2
0
2
1
1
1
0
2
0
10
00
01
11
图2译码器网格图
图中实线表示输入0时所走分支,虚线表示输入1时所走分支,编码时只需从起始状态开始依次选择路线并读出输出即可。假设从a状态开始,输入为[1011],则可由图中读出输出为[11101001]。
维特比译码是根据接收序列在码的格图上找出一条与接收序列距离(或其他量度)为最小的一种算法。它和运筹学中求最短路径的算法相类似。译码器从某个状态,例如从状态ɑ出发,每次向右延伸一个分支(对于l<L,从每个节点出发都有2种可能的延伸,其中L是信息序列段数,对l≥L,只有一种可能),并与接收数字相应分支进行比较,计算它们之间的距离,然后将计算所得距离加到被延伸路径的累积距离值中。对到达每个状态的各条路径的距离累积值进行比较,保留距离值最小的一条路径,称为幸存路径(当有两条以上取最小值时,可任取其中之一)。这种算法所保留的路径与接收序列之间的似然概率为最大,所以又称为最大似然译码。
四、实验过程
1、(2,1,3)卷积码的编译码实现
对于(n,k,N)卷积码,采用维特比译码需要构造2^N个状态转移矩阵,所以我们采用编码器结构简单的(2,1,3)卷积码来实现维特比译码。对于(2,1,7)型卷积码,我们采用MATLAB自带的vitdec函数来实现维特比译码。编码主要程序如下:
forii=1:length(data)
inter_var=[data(ii)an];%寄存器初始状态置0
first_out(ii)=mod(sum(cn_1.*inter_var),2);
second_out(ii)=mod(sum(cn_2.*inte
文档评论(0)