卷积码的编解码Matlab仿真与模拟.docx
- 文档编号:23237039
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:21
- 大小:417.19KB
卷积码的编解码Matlab仿真与模拟.docx
《卷积码的编解码Matlab仿真与模拟.docx》由会员分享,可在线阅读,更多相关《卷积码的编解码Matlab仿真与模拟.docx(21页珍藏版)》请在冰豆网上搜索。
卷积码的编解码Matlab仿真与模拟
卷积码的编解码Matlab仿真与模拟(总22页)
卷积码的编解码Matlab仿真
摘要
卷积码是一种性能优越的信道编码。
它的编码器和译码器都比较容易实现,同时它具有较强的纠错能力。
随着纠错编码理论研究的不断深入,卷积码的实际应用越来越广泛。
本文简明地介绍了卷积码的编码原理和译码原理。
并在SIMULINK模块设计中,完成了对卷积码的编码和译码以及误比特统计整个过程的模块仿真。
最后,通过在仿真过程中分别改变卷积码的重要参数来加深理解卷积码的这些参数对卷积码的误码性能的影响。
经过仿真和实测,并对测试结果作了分析。
得出了以下三个结论:
(1)当改变卷积码的码率时,系统的误码性能也将随之发生变化。
(2)对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化。
(3)回溯长度也会不同程度上地影响误码性能。
关键词:
卷积码;码率;约束长度;回溯长度
论文总页数:
21页
1引言
课题背景
随着现代通信的发展,高速信息传输和高可靠性传输成为信息传输的两个主要方面,而可靠性尤其重要。
卷积码以其高速性和可靠性在实际应用中越来越广泛。
1967年Viterbi译码算法的提出,使卷积码成为信道编码中最重要的编码方式之一[1]。
国内外研究现状
在对卷积码的研究中,其中编码器较简单,模式也很统一。
主要是研究提高卷积码的译码速度和可靠度。
译码算法中最重要的卷积码的Viterbi算法问世以来,软件仿真和实现都得到了迅速发展。
目前,利用计算机仿真Viterbi算法,模拟在各种不同情况下(使用不同码率、不同约束度等)卷积编码时的译码性能,寻找Viterbi算法的最佳适用信道和不同要求(如误码率)下最优编码。
本课题的意义
在卷积码中,因为Viterbi算法效率高,速度快,结构相对简单等特点,被广泛应用于各种数据传输系统。
特别是深空通信、卫星通信系统中。
在现代信息处理系统中,需要处理的信息量越来越大,实时性要求越来越高。
为减少对主处理器各种资源的占用,要求通信模块方面的大部分工作能独立完成。
因此采用Viterbi译码算法具有非常现实的意义。
本课题的研究方法
本文通过基于MATLAB的SIMULINK下的模块对卷积编码,解码进行仿真。
通过仿真可以更清楚的认识到卷积码的编码,解码的各个环节,并对仿真结果进行了分析。
得出卷积码Viterbi译码的误比特性能和回溯长度,码率,约束长度的关系。
2卷积码的基本概念
信道
信道是任何一个通信系统所必不可少的组成部分。
由于信道中可能存在着各种干扰,通信设备中也可能存在种种造成错码的因素。
随着数据处理、计算机通信、卫星通信以及高速数据通信网的飞速发展,用户对数据传输的可靠性提出了越来越高的要求。
因此如何在保证数据传输速率的前提下,提高传输数据的可靠性,就成为一个迫切需要解决的问题。
根据干扰对数据传输影响可分为随机干扰和突发干扰。
其中,电子热噪声产生的干扰可以看作是随机的高斯白噪声,它对信道主要的影响是产生码元的随机错误[6]。
纠错编码
因为信道状况的恶劣,信号不可避免会受到干扰而出错。
为实现可靠性通信,主要有两种途径:
一种是增加发送信号的功率,提高接收端的信号噪声比;另一种是采用编码的方法对信道差错进行控制。
前者常常受条件限制,不是所有情况都能采用。
编码理论可以解决这个问题,使得成本降低,实用性增强。
卷积码的基本概念
卷积码是一种性能优越的信道编码。
(n,k,N)表示把k个信息比特编成n个比特,N为编码约束长度,说明编码过程中互相约束的码段个数。
卷积码编码后的n个码元不仅与当前组的k个信息比特有关,而且与前N-1个输入组的信息比特有关[6]。
编码过程中相互关联的码元有N×n个。
R=k/n是卷积码的码率,码率和约束长度是衡量卷积码的两个重要参数[1]。
卷积码编码的概念
卷积码的编码描述方法有5种:
冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述法和网格图描述法[1]。
卷积码的纠错能力随着N的增加而增大,而差错率随着N的增加而指数下降。
在编码器复杂性相同的情况下,卷积码的性能优于分组码。
分组码有严格的代数结构,但卷积码至今尚未找到如此严密的数学手段。
分组码的译码算法可以由其代数特性得到。
卷积码虽然可以采用适用于分组码的门限译码(即大数逻辑译码),但性能不如维特比译码和序列译码[6]。
卷积编码
卷积码的编码器一般都比较简单。
图2-1是一般情况下的卷积码编码器框图。
它包括NK级的输入移位器,一组n个模2和加法器和n级的输出移位寄存器[6]。
对应于每段k比特的输入序列,输出n个比特。
由图可知,n个输出比特不但与当前的k个输入比特有关,而且与以前的(N-1)k个输入信息比特有关。
整个编码过程可以看成是输入信息序列与由移位寄存器和模2加法器的连接方式所决定的另一个序列的卷积,卷积码由此得名。
本文采用的是冲击响应描述法编码思想。
如图2-2是卷积码(2,1,3)卷积编码器的一个框图[6]。
左边是信息的输入。
下面分别是系统位输出和校验位输出。
其中间是3个移位寄存器和一个模2加法器。
简单的说就是信息位经过移位寄存器和一个模2加法器产生一个系统位和校验位加在一起输出。
可以看出:
每输入一个比特,移位寄存器中就向右移动一个位子。
原来的第三个寄存器就被移出。
可见卷积编码不只与现在的输入比特有关还与前面的3-1个比特有关。
所以约束长度是3。
在这里,其中K=1,n=2所以码率R=K/n=1/2。
卷积码的树状图
对于图2-2所示的(2,1,3)卷积码编码电路,其树状图如下图3-3所示。
这里,分别用a,b,c和d表示寄存器的4种状态:
00,01,10,和11,作为树状图中每条支路的节点。
以全零状态a为起点,当输入位信息位为0时,输出码元c1c2=00,寄存器保持状态a不变,对应图中从起点出发的上支路;当输入位为1时,输出码元c1c2=11,寄存器则转移到状态b,对应图中的下支路;然后再分别以这两条支路的终节点a和b作为处理下一位输入信息的起点,从而得到4条支路.以此类推,可以得到整个树状图。
如下图2-3[6]
卷积码的网格图
如下图2—4是(2,1,3)卷积编码的网格图[6]。
图2-4(2,1,3)卷积编码的网格图
图2-5卷积码状态图[6]
卷积码的解析表示
除上述三种图解表示方法外,常常还用解析表示方法描述卷积码,即延时算子多项式。
在延时算子多项式表示中,编码器中的移位寄存器与模2加法器的连接关系以及输入、输出序列都表示为延时算子D的多项式。
在一般情况下,输入序列可表示为[6]:
(2-1)
变量D的幂的次数等于相对于时间起点的单位延时数目,时间起点通常选在第1个输出比特,ml,m2,m3,m...为输入比特的二进制表示(1或0)。
用D算子多项式表示移位寄存器各级与各模2项连接关系时。
若某级寄存器与某模2和相连,则多项式中相应项的系数为1,否则为0(表示无连接)。
以图所示(2,1,3)卷积码为例,左、右两个模2和与寄存器各级的连接关系可表达为[6]:
(2-2)
通常把表示移位寄存器与模2和连接关系的多项式称为生成多项式,因为由它们可以用多项式相乘计算出输出序列。
卷积码的图解与解析表示方法各有特点。
用延时算子多项式表示卷积码编码器的生成多项式最为方便。
网格图对于分析卷积码的译码算法十分有用。
3卷积码的译码
卷积码译码的概述
卷积码的译码方式有三种[2]:
(1)1963年由梅西((Massey)提出的门限译码,这是一种基于码代数结构的代数译码,类似于分组码中的大数逻辑译码;
(2)1963年由费诺(Fano)改进的序列译码,这是基于码的树状图结构上的一种准最佳的概率译码;(3)1967年由维特比提出的Viterbi算法。
这是基于码的网(trellis)图基础上的一种最大似然译码算法,是一种最佳的概率译码方法[8]。
其中,代数译码,利用编码本身的代数结构进行译码,不考虑信道本身的统计特性。
该方法的硬件实现简单,但性能较差,其中具有典型意义的是门限译码。
另一类是概率译码,这种译码通常建立在最大似然准则的基础上。
由于计算是用到了信道的统计特性.因而提高了译码性能,但这种性能的提高是以增加硬件的复杂度为代价的。
常用的概率译码方法有维特比译码和序列译码。
维特比译码具有最佳性能,但硬件实现复杂;门限译码性能最差,但硬件简单;序列译码在性能和硬件方面介于维特比译码和门限译码之间。
卷积码的最大似然译码
卷积码概率译码的基本思路是[3]:
以接收码流为基础,逐个计算它与其他所有可能出现的、连续的网格图路径的距离,选出其中可能性最大的一条作为译码估值输出。
概率最大在大多数场合可解释为距离最小,这种最小距离译码体现的正是最大似然的准则。
卷积码的最大似然译码与分组码的最大似然译码在原理上是一样的,但实现方法上略有不同。
[2]主要区别在于:
分组码是孤立地求解单个码组的相似度,而卷积码是求码字序列之间的相似度。
基于网格图搜索的译码是实现最大似然判决的重要方法和途径。
用格图描述时,由于路径的汇聚消除了树状图中的多余度,译码过程中只需考虑整个路径集合中那些使似然函数最大的路径。
如果在某一点上发现某条路径已不可能获得最大对数似然函数,就放弃这条路径,然后在剩下的“幸存”路径中重新选择路径。
这样一直进行到最后第L级(L为发送序列的长度)。
由于这种方法较早地丢弃了那些不可能的路径,从而减轻了译码的工作量,Viterbi译码正是基于这种想法。
对于(n,k,K)卷积码,其网格图中共2kL种状态。
由网格图的前K-1条连续支路构成的路径互不相交,即最初2k_1条路径各不相同,当接收到第K条支路时,每条路径都有2条支路延伸到第K级上,而第K级上的每两条支路又都汇聚在一个节点上。
在Viterbi译码算法中,把汇聚在每个节点上的两条路径的对数似然函数累加值进行比较,然后把具有较大对数似然函数累加值的路径保存下来,而丢弃另一条路径,经挑选后第K级只留下2K条幸存路径。
选出的路径同它们的对数似然函数的累加值将一起被存储起来。
由于每个节点引出两条支路,因此以后各级中路径的延伸都增大一倍,但比较它们的似然函数累加值后,丢弃一半,结果留存下来的路径总数保持常数。
由此可见,上述译码过程中的基本操作是,“加-比-选”,即每级求出对数似然函数的累加值,然后两两比较后作出选择。
有时会出现两条路径的对数似然函数累加值相等的情形,在这种情况下可以任意选择其中一条作为“幸存”路径。
卷积码的编码器从全零状态出发,最后又回到全零状态时所输出的码序列,称为结尾卷积码。
因此,当序列发送完毕后,要在网格图的终结处加上(K-1)个己知的信息作为结束信息。
在结束信息到来时,由于每一状态中只有与已知发送信息相符的那条支路被延伸,因而在每级比较后,幸存路径减少一半。
因此,在接收到(K-1)个己知信息后,在整个网格图中就只有唯一的一条幸存路径保留下来,这就是译码所得的路径。
也就是说,在己知接收到的序列的情况下,这条译码路径和发送序列是最相似的。
由上述可见,Viterbi译码过程并不复杂,译码器的运行是前向的、无反馈的。
它接收一段,计算一段,选择一段最可能的码段(分支),从而达到整个码序列是一个有最大似然函数的序列。
传输序列很长时,判决需要的长延时和相当大的存储量是我们无法承受的。
因此,实际应用中采用截短Viterbi算法,即不需要接收到所有序列才进行判决,当译码器接收并处理完了固定的T(T< T称为截短深度,T选的足够大时,则对译码器输出的译码错误概率影响很小。 VITEBI译码的关键步骤 输入与同步单元 输入同步单元为译码器提供正确的支路同步,每次正确地输出属于一条支路的n个比特。 显然,当支路定时失步时,译码过程中将会出现大量的差错,只要能检测出这种状态,即能有效地调整支路同步。 一种方法是监视路径量度的增长率;另一种方法是检查网格图的路径合并性质。 当译码器出现失步时,网格图中幸存路径合并的速率比同步时慢得多[2]。 支路量度计算 每当接收到一条新支路的一组n个量度值(硬判决时为n比特),支路量度计算单元就对网格图中每一条不同的支路确定一新的量度值。 对R=k/n码来说,每次将有2个不同的量度值。 在软判决Viterbi译码时,支路量度值不但随支路不同而异,而且还与接收信号的量化值有关[2]。 路径量度的存储与更新 在此单元中,支路量度与以前所存储的路径量度相加,然后对汇聚到同一节点处的支路进行路径量度比较,选择一条路径量度最小的路径保留下来[2]。 信息序列的存储与更新 一种最佳的也是最常用的方法是基于最大似然译码。 对于R=1/n卷积码而言,每接收一组新的支路信息,在各个状态的路径存储器中存入经“加一比一选”电路选出的一位假想信息比特,同时将最先存入路径存储器的一位比特输出给判决单元。 因此,每接收到一条新支路,路径存储器就更新一次它所存储的假想信息序列[2]。 判决与输出单元 在R=1/n卷积码最佳译码时,应选择具有最小路径量度的假想信息序列中最早存入的一个比特做译码输出[2]。 4结论 卷积码的仿真 本文通过MATLAB下的SIMULINK仿真。 首先建立卷积码的仿真模块并组合起来。 图4-1卷积码的编码译码框图 如上图4-1的信号流程可以表示为先由BernoulliBinaryGenerator(贝努利二进制序列产生器)产生一个0,1等概序列,经过ConvolutionalEncoder(卷积编码器)对输入的二进制序列进行卷积编码,并用BPSK调制方式调制信号。 加入信道噪声(高斯白噪声)后再经过BPSK解调制后送入ViterbiDecoder(Viterbi译码器)进行硬判决译码。 最后经过ErrorRateCalculation(误码统计)后由Display(显示)输出。 然后通过Selector(数据选通器)将结果输出到Toworkspace(工作区间)。 SIMULINK仿真模块的参数设置以及重要参数的意义 在建立如图4-1的仿真模块后,对各个模块分别一一进行设置后并运行仿真。 图4-2贝努利二进制序列产生器模块的设置框图 如上图4-2是贝努利二进制序列产生器模块的设置框图,其中参数有三项: 第一项probabilityofazero取值为,表示0和1出现的概率相等。 Initialseed表示随机种子数。 不同的随机种子数将产生不同的二进制序列,特定的随机种子数可以产生一个特定的二进制序列。 Sampletime=表示抽样时间,也就是说输出序列中每个二进制符号的持续时间是秒。 Samplesperframe表示每帧的抽样数用来确定每帧的抽样点的数目。 Frame-basedoutputs是用来确定帧的输出格式。 图4-3BPSK调制器模块的设置框图 如上图4-3是BPSK调制器模块的设置框图中有二项,第一项是Phaseoffset(rad)(相位偏移),这里设置为0。 第二项是Samplespersymbol(输出信号采样数)这里设置为1。 图4-4卷积编码器模块的设置框图 如上图4-4是卷积编码器模块的设置框图。 其中Trellisstructure(Trellis结构)中通过poly2trellis()函数把卷积码的约束长度,生成多项式以及反馈多项式转换成Trellis结构的形式。 如上面是(2,1,3)卷积码的参数设置。 (3,[6,7])说明约束长度是3,生成多项式是(八进制)6和7,无反馈多项式。 后面还要用到的(2,1,7)的参数是(7,[171,133])是约束长度是7,生成多项式是171和133。 Reset是复位方式,这里设置为oneachframe,它表示卷积码编码器在每帧数据开始之前自动对寄存器复位。 图4-5误比特统计模块的设置框图 如上图4-5是误比特统计模块的设置框图。 其中Receivedelay表示接收延迟,意思是在通信接收端口需要对接收到的信号进行解调,解码或解交织而带来一定的延迟,使得到达误码统计模块接收端的信号滞后于发送端的信号。 为了补偿这种延迟这里设置为0。 Computationdelay表示计算延迟,在仿真过程中,有时间需要忽略最初的若干个输入数据就通过计算延迟来实现。 这里设置为0。 Computationmode表示计算模式,帧的计算模式(Entireframe),误码统计模块对发送端和接收端的所有输入数据进行统计。 outputdata是输出数据,这里设置为Port的意思是表示把统计数据从端口中输出。 workspace表示把统计数据输出到工作区。 图4-6数据选通器模块的设置框图 如上图4-6是数据选通器模块的设置框图。 对应图4-1看Elements是指输出端口的个数为1。 Inputportwidth表示输入端口的个数为3。 图4-7卷积码译码器模块的设置框图 如上图4-7是卷积码译码器模块的设置框图。 Trellisstructure: Trellis结构(前面已说明)。 Decisiontype是指判决类型,有3种: (1)Unquantized(非量化) (2)HardDecision(硬判决),(3)SoftDecision(软判决)Tracebackdepth表示反馈深度。 它的值会影响译码精度和解码延迟。 Operationmode是指操作模式。 在Truncated模式下,解码器在每帧数据结束的时候总能恢复到全0状态,它与卷积编码器的oneachframe复位方式相对应。 改变卷积码的参数仿真以及结论 不同回溯长度对卷积码性能的影响 下面将以(2,1,7)卷积码来建立模块仿真。 将译码模块中的Tracebackdepth分别设置为20,35,45并在一个图中画出这三种方式下的误码性能曲线得到下图4-8。 从上到下的三条曲线分别是Tracebackdepth为20,35,45。 可以看出: 回溯长度是在Viterbi译码过程中一个很重要的参数,他决定了译码延迟,随着他的不断变化,误码性能也随误比特率曲线可以清楚地看到,当回溯长度一定时,随着信道噪声的逐渐减小,系统的误比特率逐渐降低;当回溯长度逐渐增加,系统的误比特率随之逐渐降低,但是当回溯程度τ增加到τ≥5N时(N为编码的约束长度),误比特率数值趋于稳定,因此,在确定回溯长度时既要考虑到随着τ的增加误比特率随之降低的趋势,也要考虑到译码延迟会变大,在选取回溯长度时,通常取τ=5N。 图4-8不同回溯长度对误码性能的影响 分析不同回溯长度对卷积码误码性能的影响时用到的程序如下: x=-10: 5; y=x; fori=1: length(x) SNR=x(i); sim('yima'); y(i)=mean(BitErrorRate); end semilogy(x,y); holdon; fori=1: length(x) SNR=x(i); sim('yima1'); y(i)=mean(BitErrorRate); end semilogy(x,y); holdon; fori=1: length(x) SNR=x(i); sim('yima2'); y(i)=mean(BitErrorRate); end semilogy(x,y); 不同码率对卷积码误码性能的响 下面图4-9是通过改变卷积码的码率为1/2和1/3而得到的二条对比曲线。 上面的一条曲线是码率为1/2,下面的是码率为1/3。 卷积码的码率R=k/n,他是卷积码的一个重要参数,当改变卷积码的码率时,系统的误码性能也将随之发生变化。 从图4-9中的误比特率曲线可以看出,当码率一定时,随着信道噪声的逐渐减小,系统的误比特率也逐渐减小,当改变系统码率时,随着卷积码码率的逐渐提高,系统的误比特率也呈现出增大的趋势,也就是说码率越低,系统的误比特率就越小,误码性能就越好。 图4-9卷积码不同码率对误码性能的影响 分析不同码率对卷积码误码性能的影响时用到的程序如下: x=0: 5; y=x; fori=1: length(x) SNR=x(i); sim('yima1'); y(i)=mean(BitErrorRate); end semilogy(x,y); holdon; fori=1: length(x) SNR=x(i); sim('yima2'); y(i)=mean(BitErrorRate); end semilogy(x,y); 不同约束长度对卷积码的误码性能影响 如下图4-10,对于码率一定的卷积码,当约束长度N发生变化时,系统的误码性能也会随之发生变化,我们以码率R=1/2的(2,1,3)和(2,1,7)卷积码为例展开分析。 上面的曲线是(2,1,3)卷积码的误码性能曲线。 下面的曲线是(2,1,7)卷积码的误码性能曲线。 从图4-4中的误比特率曲线可以清楚地看到,随着约束长度的逐渐增加,系统的误比特率明显降低,所以说当码率一定时,增加约束长度可以降低系统的误比特率,但是随着约束长度的增加,译码设备的复杂性也会随之增加,所以对于码率为1/2的卷积码,我们在选取约束长度时一般为3~9。 图4-10不同约束长度对卷积码误码性能的影响 分析不同约束长度对卷积码误码性能影响用到的程序如下: x=0: 5; y=x; fori=1: length(x) SNR=x(i); sim('yima'); y(i)=mean(BitErrorRate); end semilogy(x,y); holdon; fori=1: length(x) SNR=x(i); sim('yima1'); y(i)=mean(BitErrorRate); end semilogy(x,y); 通过上面从 (1)回溯长度; (2)码率;(3)约束长度这三个卷积码的重要参数的变化后对译码性能的分析,我们得到在卷积码的编码,译码过程中有很多条件是不可能同时满足的。 所以我们要根据具体情况来选择合适的参数。 结论 通过本次课题的研究,针对Viterbi算法在理论和实现两方面分别进行了较深的研究。 理论方面,在深入了解了用于卷积码的Viterbi译码算法基本原理后,进一步将其拓展到SIMULINK模块仿真方面的应用,主要给出了基于Matlab的卷积编码和Viterbi算法应用过程。 在实现方面,本文重点研究的是用SIMULINK实现不同码率;不同约束长度;不同回溯长度下的卷积码的误码性能的对比研究.最后仿真得到对比图,达到了研究的预期目的。 经过自己的努力和曾老师的耐心指导,毕业设计顺利按时完成。 它是对我们把本科四年所学的理论知识运用到实践中的一次系统的检验。 从接到题目到设计结束的过程中经历了很多,总的来说可以概括为以下几点。 (1)设计中要用到的Simulink仿真软件是我第一次接触,所以刚接到题目时无从下手,后来通过上网和借助图书馆的书籍,学习这门新的软件,学习过程中遇到很多困难,但通过自己的努力和老师的帮助,最终掌握了仿真的基本方法。 (2)由于面临找工作的问题,和此次设计工作的时间安排上有一定的冲突。 为了顺利完成设计工作,老师安排了每周的工作量和所要达到的目标,自己也制定了相应的时间表,以求更充分的利用时间。 (3)刚
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 卷积码 解码 Matlab 仿真 模拟