Matlab的卷积码译码器的设计与仿真.docx
《Matlab的卷积码译码器的设计与仿真.docx》由会员分享,可在线阅读,更多相关《Matlab的卷积码译码器的设计与仿真.docx(27页珍藏版)》请在冰豆网上搜索。
Matlab的卷积码译码器的设计与仿真
Matlab的卷积码译码器的设计与仿真
54080211
2008111
郭林《基于Matlab的卷积码译码器的设计与仿真》第1页共17页
Matlab
**
本课程设计主要解决对一个输入信号进行卷积码编码,以及维特比
(Viterbi)译码输出,并通过Matlab软件进行设计与仿真,并进行误码率分析。
程序
设计与仿真均采用MatlabR2007a(7.4),最后仿真详单与理论分析一致。
卷积码编码器;卷积码译码器;Matlab;设计与仿真
1
本课程设计主要解决对一个信号进行信道编解码,采用卷积码编码,维特比
(Viterbi)译码输出,并通过Matlab软件进行设计与仿真。
卷积码的译码有两种方法
——软判决和硬判决,此课程设计采用硬判决的维特比译码。
1.1
卷积码是一种向前纠错控制编码。
它将连续的信息比特序列映射为连续的编
码器输出符号。
这种映射是高度结构化的,使得卷积码的译码方法与分组码译码
所采用的方法完全不同。
可以验证的是在同样复杂度情况下,卷积码的编码增益
要大于分组码的编码增益。
对于某个特定的应用,采用分组编码还是采用卷积编
码哪一种更好则取决于这一应用的具体情况和进行比较时可用的技术。
本课程设计便是通过Matlab,构造了一个卷积码编码后,通过产生加性高斯
白噪声的信道,再进行译码的过程,译码后计算误码率,并进行分析。
郭林《基于Matlab的卷积码译码器的设计与仿真》第2页共17页1.2
2
卷积码,又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码。
卷积编码的最佳译码准则为:
在给定已知编码结构、信道特性和接收序列的
情况下,译码器将把与已经发送的序列最相似的序列作为传送的码字序列的估
值。
对于二进制对称信道,最相似传送序列就是在汉明距离上与接收序列最近的
序列。
卷积码的译码方法有两大类:
一类是大数逻辑译码,又称门限译码(硬判决,编者注);另一种是概率译码(软判决,编者注),概率译码又分为维特比译码和序
列译码两种。
门限译码方法是以分组码理论为基础的,其译码设备简单,速度快,
但其误码性能要比概率译码法差
[2]。
当卷积码的约束长度不太大时,与序列译码相比,维特比译码器比较简单,
计算速度快。
维特比译码算法是1967年由Viterbi提出,近年来有大的发展。
目
前在数字通信的前向纠错系统中用的较多,而且在卫星深空通信中应用更多,该
算法在卫星通信中已被采用作为标准技术。
采用概率译码的基本思想是:
把已接收序列与所有可能的发送序列做比较,
选择其中码距最小的一个序列作为发送序列。
如果发送L组信息比特,那么对于(n,k)卷积码来说,可能发送的序列有2kL个,计算机或译码器需存储这些序列
并进行比较,以找到码距最小的那个序列。
当传信率和信息组数L较大时,使得译码器难以实现。
维特比算法则对上述概率译码做了简化,以至成为了一种实
kL用化的概率算法。
它并不是在网格图上一次比较所有可能的2条路径(序列),
而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个
码序列是一个最大似然值得序列。
下面以图2.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码
的方法和运作过程。
为了能说明解码过程,这里给出该码的状态图,如图2.2所
郭林《基于Matlab的卷积码译码器的设计与仿真》第3页共17页
by1j
010011输入序列mmmjj-1j-2da0010输m,m,…m,…12j出序y1101列2j
c
图2.2(2,1,3)卷积码状态图图2.1(2,1,3)卷积码编码器示。
维特比译码需要利用图来说明移码过程。
根据卷积码画网格的方法,我们可
以画出该码的网格图,如图2.3所示。
该图设输入信息数目L=5,所以画L+N=8个时间单位,图中分别标以0至7。
这里设编码器从a状态开始运作。
该网格图
的每一条路径都对应着不同的输入信息序列。
由于所有可能输入信息序列共有
2kLkL个,因而网格图中所有可能的路径也为2条。
这里节点a=00,b=01,c=10,d=11。
节点号01234567
00000000000000
a1111111111
1111111111
b000010101010
01010101c
01010101
010101d
图2.3(2,1,3)卷积码网格图
设输入编码器的信息序列为(11011000),则由编码器对应输出的序列为
Y=(1101010001011100),编码器的状态转移路线为abdcbdca。
若收到的序列R=(0101011001011100),对照网格图来说明维特比译码的方法。
由于该卷积码的约束长度为6位,因此先选择接收序列的前6位序列R
=(010101)同到达第3时刻的可能的8个码序列(即8条路径)进行比较,并计算1
出码距。
该例中到达第3时刻a点的路径序列是(000000)和(111011),他们与R1
郭林《基于Matlab的卷积码译码器的设计与仿真》第4页共17页的距离分别为3和4;到达第3时刻b点的路径序列是(000011)和(111000),他们与R的距离分别为3和4;到达第3时刻c点的路径序列是(001110)和(110101),1
他们与R的距离分别为4和1;到达第3时刻d点的路径序列是(001101)和1
(110110),他们与R的距离分别为2和3。
上述每个节点都保留码距较小的路径1
作为幸存路径,所以幸存路径码序列是(000000)、(000011)、(1101001)和(001101),如图2.4所示。
用于上面类似的方法可以得到第4、5、6、7时刻的幸存路径。
节点号0123
000000
a111111
b
0101c
01
d
需要指出的是,对于某个节点,如果比较两条路径与接收序列的累计码距值图2.4维特比译码第3时刻幸存路径
相等时,则可以任意选者一条路径作为幸存路径,吃时不会影响最终的译码结果。
在码的终了时刻a状态,得到一条幸存路径。
如果2.5所示。
由此可看到译码器
节点号012345678
a0011
11
b00
01
01c
0101
d
图2.5第8时刻幸存路径
郭林《基于Matlab的卷积码译码器的设计与仿真》第5页共17页
输出是R’=(1101010001011100),即可变换成序列(11011000),恢复了发端原始信息。
比较R’和R序列,可以看到在译码过程中已纠正了在码序列第1和第7位上的差错。
当然如果差错出现太频繁,以致超出卷积码的纠错能力,还是会发生
纠误的。
3Matlab
3.1Matlab
在Matlab软件的Simulink组件库中包含有的两种卷积码译码模块,即后验
概率卷积译码器和维特比译码器。
图3.1,图3.2所示是维特比译码器参数设置
对话框和模块,它通过维特比译码还原出二进制信号序列。
图3.1维特比译码器参数设置
郭林《基于Matlab的卷积码译码器的设计与仿真》第6页共17页
图3.2维特比译码器模块
如果卷积编码器的输入长度为k,输出信号的长度为n,则维特比译码器的
输入好输出信号长度分别是n和k的整数倍。
维特比译码器模块主要有以下几个参数:
(1)Trellisstructure(Trellis结构)
与维特比一冒起相对应的卷积编码器的Trellis结构。
它既可以是
Matlab工作区中的一个Trellis变量,也可以是通过poly2trellis()函数产生
的Trellis结构。
(2)DecisionType(判决类型)
维特比译码器德判决类型有3种:
Unquantized(非量化)、Hard
Decision(硬判决)和SoftDecision(软判决),如表3.1所示。
3.1
判决类型解码器的输出类型说明Unquantized实数+1表示逻辑0;-1表示逻辑1HardDecision0表示逻辑0;1表示逻辑10,1
SoftDecision介于0和2b-1之间的0表示具有取值为0的最大概率;2b-1
整数,其中b是软判决表示具有取值为1的最大概率;介于两
位的个数者之间的数表示取0和1的相对概率。
(3)Numberofsoftdecisionbits(软判决的个数)
当Decisiontype设置为SoftDecision时,本参数有效,并且当它的取值
为b时,维特比译码器的输出是介于0和2b-1之间的一个整数。
(4)Tracebackdepth(反馈深度)
反馈深度D影响着维特比译码的精度,同时也影响着解码的时延(即
在输出第一个解码数据之前输出的0的个数)。
(5)Operationmode(操作模式)
维特比译码器有3种操作模式:
Continuous、Terminated或Truncated。
如果维特比译码器德输出信号是抽样信号,则应该把本参数设置为
郭林《基于Matlab的卷积码译码器的设计与仿真》第7页共17页
Continuous模式;当输入信号时帧数据时,操作模式可以是Continuous、
Terminated或Truncated。
对于Continuous模式,维特比译码器在每帧数
据结束时保存译码器的内部状态,用于对下一帧实施解码;在Truncated
模式下,解码器在每帧数据结束的时候总能恢复到全零状态,它对应于
卷积编码器的Oneachframe复位方式;Terminated模式适用于卷积编码
器的每帧输入信号的末尾有足够多的零,能够把卷积编码器在完成一帧
数据的编码之后把内部状态恢复为0。
(6)Enablerestinputport(启用复位信号端口)
当Operationmode参数设置为Continuous并且选中了本选项前面的
复选框之后,维特比译码器增加一个输出信号端口Rst。
同时当Rst的输
入信号不等于0时,维特比译码器复位到初始状态。
[3]
3.2Matlab
整个设计的结构框图如图3.3
编译码器约定参数
信号噪声信道信号信号
信源模块信宿模块
图3.3整体设计结构模块框图
可见,本设计由3个子系统组成:
信源模块对随机二进制信号进行卷积码和
二进制相位调制,输出基带调制信号;信道模块是一个有噪声信道;信宿模块对
调制信号进行软判决译码,得到原始信息序列,并且计算调制信号的误码率。
信源模块由贝努利二进制序列产生器、卷积码编码器以及二进制相位调制3个模块组成,如图3.4所示
郭林《基于Matlab的卷积码译码器的设计与仿真》第8页共17页
图3.4信源模块系统框图
各个模块的参数设置分别如表3.2~表3.4所示。
3.2BernoulliBinaryGenerator
参数名称参数值
BernoulliBinaryGenerator模块类型
Probabilityofzero0.5
Initialseed25741
Sampletime0.0001
Frame-basedoutputChecked
Samplesperframe10000
3.3ConvolutionalEncoder
参数名称参数值
ConvolutionalEncoder模块类型
TrellisPoly2trellis(7,[171133])ResetOneachframe
郭林《基于Matlab的卷积码译码器的设计与仿真》第9页共17页
3.4BPSKModulatorBaseband()
参数名称参数值
BPSKModulatorBaseband模块类型
Phaseoffset(rad)0
Samplespersymbol1
本设计使用相对较简单的一个加性高斯白噪声信道作为噪声信道,它在二进
制相位调制信号中叠加高斯白噪声。
加性高斯白噪声模块的参数设置如表3.5。
3.5AWGNChannel
参数名称参数值
AWGNChannel模块类型
Initialseed1237
ModeSignaltonoiseratio(SNR)SNR(dB)SNR
Inputsignalpower(watts)1
信道模块如下图3.6所示。
图3.6信道模块示意图
郭林《基于Matlab的卷积码译码器的设计与仿真》第10页共17页
信宿模块在接收到二进制相位调制信号后,首先由BPSKDemodulatorBaseband(二进制相位解调模块)对信号进行量化,得到硬判决量化信号,然后通
过ViterbiDecoder(维特比译码器)对软判决信号实施译码。
译码输出信号和信源
模块产生的原始信号输入到ErrorRateCalculator(误比特率统计模块)中,统计得到的数据一方面通过Display(显示模块)显示出来,另一方面通过一个Selector(选择器)把其中的第一个元素(即编码信号的误比特率)保存到工作区变量BitErrorRate中。
信宿模块如下图3.7所示。
图3.7信宿模块Sink
各关键模块参数设置如表3.7、表3.8所示。
3.7BPSKDemodulatorBaseband
参数名称参数值
BPSKDemodulatorBaseband模块类型
Phaseoffset(rad)0
DecisiontypeHarddecision
OutputdatatypeInheritviainternalrule
郭林《基于Matlab的卷积码译码器的设计与仿真》第11页共17页
3.7ViterbiDecoder
参数名称参数值
ViterbiDecoder模块类型
Trellisstructurepoly2trellis(7,[171133])
DecisiontypeHarddecision
Trecebackdepth1000
OperationmodeTruncated将此完整设计保存,命名为convh.mdl。
3.3
为了验证译码模块的正确性,便让其进行最简模式运行,为此,临时设计一
个简化信号系统,关闭信道噪声,不进行二进制相位的调制与解调,去掉误比特
率统计模块。
为了能看到输入二进制码和译码输出二进制码,增加了两个ToWorkspace(结果输入到工作区模块),整个系统模块框图如图3.8所示。
图3.8简化译码模块框图
同时,为了便于观察,将BernoulliBinaryGenerator(贝努利二进制序列产生
器)的参数设置为如表3.8所示,以产生简单的15位二进制随机码,也将ViterbiDecoder的Trcebackdepth值改为5。
将ToWorkspace1模块和ToWorkspace模块的变量名分别设置为pdata和data。
郭林《基于Matlab的卷积码译码器的设计与仿真》第12页共17页
3.8BernoulliBinaryGenerator
参数名称参数值
BernoulliBinaryGenerator模块类型
Probabilityofzero0.5
Initialseed5
Sampletime10
Frame-basedoutputChecked
Samplesperframe5
运行仿真(),在matlab的命令窗口中输入pdata和data分别得到相应的二进制序列。
对所得序列分别截图,可得如图3.9所示结果。
可见,译码器能够
正确进行译码,所设计简化译码器正确,因而,从理论上可推导,原设计正确。
图3.9简化译码器仿真结果
通过对convh.mdl文件进行仿真,证明设计正确,但因所得二进制码太多,
此处便不进行截图证明。
郭林《基于Matlab的卷积码译码器的设计与仿真》第13页共17页
4Matlab
编制M文件convolutionh.m,使convh.mdl在不同的信噪比条件下重复执行前面建立的项目convh.mdl。
然后绘制信道的信噪比与编码信号误比特率之间的
关系曲线图。
M文件代码如下:
%x表示信噪比
x=-10:
5;
%y表示信号的误比特率
y=x;
%准备一个空白图形
holdoff;
%重复运行convh.mdl,检验不同条件下硬判决译码的性能
fori=1:
length(x)
%信道的信噪比依次取x中的元素
SNR=x(i);
%运行仿真程序,得到的误比特率保存在工作区变量BitErrorRate中
sim('convh');
%计算BitErrorRate的均值作为本次仿真的误比特率
y(i)=mean(BitErrorRate);
end
%绘制x和y的关系曲线图,纵坐标采用对数坐标semilogy(x,y);
%保持已经绘制的图形
holdon
执行此M文件,得到如图4.1所示的关系曲线图,由此图可见,随着信道
信噪比的提升,维特比译码所得结果的误比特率越低,信道的可信度越高,信噪
比在大于-2时信道的误码率开始明显降低。
郭林《基于Matlab的卷积码译码器的设计与仿真》第14页共17页
图4.1convolutionh.m运行结果
5
此课程设计对整个通信系统包含的编码、传输和译码都进行了设计与仿真,
从这些过程中我们看到了通信系统的基本工作原理。
通过整个卷积码系统的设计
与仿真,使我们加深了对卷积码的理解,掌握维特比译码的基本思路,知道如何
进行误码率分析从而选者合适的信道传输信号,更重要的是学会了使用Matlab作为学习工具来对我们的通信系统进行设计和仿真等操作,这对我们以后的学习
和工作有着重要意义。
郭林《基于Matlab的卷积码译码器的设计与仿真》第15页共17页[1]RodgerE.Ziemer,RogerL.Peterson著.尹长川,郝建军,罗涛等译.数字通信基础(IntroductiontoDigitalCommunication).原书第2版.北京:
机械工业出版社,2005.1
[2]樊昌信,张甫翊,徐炳祥,吴成柯.通信原理.第5版.北京:
国防工业出版
社,2007.1
[3]邓华.Matlab通信仿真及应用实例详解.北京:
人民邮电出版社,2003.9[4]陈国通.数字通信.哈尔滨:
哈尔滨工业大学出版社,2002.4
[5]孙祥,徐流美,吴清.Matlab7.0基础教程.北京:
清华大学出版社,2005.5
郭林《基于Matlab的卷积码译码器的设计与仿真》第16页共17页
附录:
convh.mdl详图
郭林《基于Matlab的卷积码译码器的设计与仿真》第17页共17页
附录2:
M文件convolutionh.m程序清单
%程序名称:
convolutionh.m
%程序功能:
依次取不同的信噪比,重复对convh.mdl进行仿真,检验译码性能。
%程序作者:
郭林
%最后修改日期:
2008-1-1
%x表示信噪比
x=-10:
5;
%y表示信号的误比特率
y=x;
%准备一个空白图形
holdoff;
%重复运行convh.mdl,检验不同条件下硬判决译码的性能
fori=1:
length(x)
%信道的信噪比依次取x中的元素
SNR=x(i);
%运行仿真程序,得到的误比特率保存在工作区变量BitErrorRate中
sim('convh');
%计算BitErrorRate的均值作为本次仿真的误比特率
y(i)=mean(BitErrorRate);
end
%绘制x和y的关系曲线图,纵坐标采用对数坐标semilogy(x,y);
%保持已经绘制的图形
holdon
郭林《基于Matlab的卷积码译码器的设计与仿真》第18页共17页
7.5.3卷积码的应用
(一)性能较好的卷积码
考虑Viterbi译码,假设卷积码的编码存储m只是个位数。
在每一帧被接收时,译码器
km0都必须更新状态,对于每一个状态,都有2条路径要估算。
于是,译码器的计算量大致2
vkn,k与成正比,等于。
这是能够用此方式解码的码的约束长度的上限。
这个限的大小取22
决于要求达到的比特率和技术水平,但是通常情况下,约束度N取7~9,这些值是目前典型的最大值。
更长的约束长度也意味着功能更为强大的码,但只能在合理的码率下用其他
技术来译码,例如序贯译码。
我们将一些已知的性能良好的码率为1/2的卷积码的生成多项式用八进制的形式表示,
如表7-17所示。
(1)
(2)dmgg
2755
317156
435237
575538
617113310
737124710
875356112
最常见的卷积码的码率为1/2,输入约束度N=7,生成子多项式为:
(1)6543gDDDDD()1,,,,,
(0)643gDDDD()1,,,,
(二)删除卷积码
虽然可以为任意码率的卷积码定义性能良好的生成子多项式和使用Viterbi解码,但是在有码率很高时,计算会相当复杂。
以码率为3/4,v=3,K=6的情况为例。
解码器每输出4比特的一帧,就要做64次路径计算,每次都包含对4比特的比较。
现在假设我们使用码率
为1/2的码,每3帧去掉2个输出比特。
对于这种码,我们保留v=3,使其具有可比性,但是由于K=4,因而每帧都要做16次路径计算,同时还需要3帧,作为初始的4比特输出帧的等价形式。
这样,我们要做48次比较,每次只有1比特或2比特。
经过类似的推理,我们可以得出结论:
码率越大,计算增益就越大,计算增益对于码率为2/3的码来说正好合适。
郭林《基于Matlab的卷积码译码器的设计与仿真》第19页共17页
当然,如果通过上述删除过程产生的码不能产生相当的性能,那么考虑计算量是不值
得的。
但所幸的是,有很多删除的码的性能(以编码增益计算)可以达到0.ldB或0.2dB(这是最佳码的数据)。
表7-18中表明了码率为1/2的码可以被删除,产生码率为2/3或3/4的好码。
对于2/3码率的码来说,前两个生成子(八进制表示)用来生成第一个2比特的输出帧,而下一帧只用到了第三个生成子(和其他两个一样)。
对于3/4码率的码来说,紧接着的第
三帧要用到第四个生成子。
除了运算方面的考虑,删除卷积码还能在只用一个解码器的情况下