基于Matlab的卷积码编译器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
本科生毕业论文(设计)
题目:基于Matlab 的卷积码编译器设计
仿真
专业代码: 080603
作者姓名:张倍红
学号: **********
单位:物理科学与信息工程学院
指导教师:***
2010年 5 月 20日
目录
引言 (1)
1.系统仿真 (1)
1.1系统仿真的定义 (1)
1.2仿真模型与仿真研究 (1)
2.MATLAB仿真 (3)
3.差错控制编码 (4)
3.1差错控制编码 (4)
3.1.1 概述 (4)
3.1.2 差错控制编码方法 (4)
4.卷积码编译器设计仿真 (5)
4.1卷积码 (5)
4.2卷积码的编码 (6)
4.3卷积码的译码 (8)
4.4相关参数 (11)
4.5程序设计 (11)
4.5.1 卷积码编码函数 (11)
4.5.2 维特比译码函数 (12)
4.6卷积码的性能分析和仿真测试 (13)
4.6.1 理论计算 (13)
4.6.2 仿真结果与理论 (14)
结束语 (17)
参考文献 (19)
致谢 (20)
摘要
本文通过对卷积码的研究,用Matlab实现了卷积码的冲击响应编码和Viterbi译码,通过一系列的仿真实验进一步证明了卷积码的特性,从而说明卷积码是一种非常有前途的、能达到信道编码定理所提出的码类。
最后通过 Matlab仿真,对卷积码的性能进行了理论分析和实验仿真。
关键词:卷积码;Viterbi;Matlab;误比特率
Abstract
It makes a deeply analytical study about convolution code in this article and it makes a convolution impact response coding & Viterbi decoding also, the characteristics of convolution code was fully proved by a series of simulated experiment, it shows that convolution code is a perfect code style which is promising & fitting. In the end, the performance of convolution code is analyzed and simulated based on Matlab Keywords: convolution code; Viterbi; Matlab; bit error rate
基于Matlab的卷积码编译器设计仿真
引言
由于数字信号在传输过程中受到干扰的影响。
使得信号码元波形变坏,故传输到接收端后可能发生错误判决,通常在设计数字通信系统时,首先,应从合理选择调制解调制度,解调方法,以及发送功率等方面考虑,若采用上述措施仍难以满足要求,则就要采用差错控制编码的措施,差错控制编码又称信道编码,是降低误码率,提高数字通信系统可靠性的一种方法,分为:分组编码,卷积编码,其中卷积编码是一种很好的纠错编码的好方法,它满足线性叠加原理,而且子生成元不随时间变化;与之相应的维特比算法是加性高斯噪声信道下卷积码最优译码的算法。
维特比译码算法是1976年Viterbi提出的一种译的最大似然译码算法。
在码的约束长度较小时,它的译码效率较高,速度较快,因此,广泛应用于数字传输系统中,特别是卫星通信系统中。
本文通过对卷积码的研究,用MATLAB实现了卷积码的冲击相应编码器和VITERBI译码器,通过一系列的仿真测试实验进一步证明了卷积码的特性,从而说明卷积码是一种非常有前途的,能达到信道编码定理所提出的码类。
卷积码广泛应用在无线通信标准中,如:GSM,CDMA2000,IS—95中。
1.系统仿真
1.1系统仿真的定义
‘仿真’一词译自英文simulation,另一个曾用的译名是‘模拟’,意指在实际系统尚不存在的情况下,系统或活动本质的复现。
目前,比较流行于工程技术界的技术定义是:系统仿真是通过对系统模型的实验,研究一个存在的或设计中的系统。
1.2仿真模型与仿真研究
1)仿真模型
根据上述系统的分类,我门将系统仿真模型分为物理模型和数学模型,其中
物理模型比较简单,有动态和静态之分,动态有类比模型,静态有比例模型;数学模型也分动态和静态,动态含两部分:一部分是离散时间(方程描述)、事件(描述条件与实体流程图描述),另一部分是连续采样、分布(方程描述)、集中参数,对于计算机仿真,需要在计算机上建立起对象的数学模型。
一般来说,系统的数学模型都必须改写成适合于计算机处理的形式,称为仿真数学模型。
系统数学模型是系统的一次近似模型,仿真数学模型则是系统的二次近似模型。
2)计算机仿真三要素与过程
建立计算机模型(即仿真数学模型)很重要的一点是要具有实验的性质,即模型与对象的功能及参数之间所具有的相似性和对应性。
这种相似关系和对应关系不应被数学演算过程所掩盖,否则仅是一次数值求解。
仿真是一个建模——实验——分析——修改模型——再实验——分析……不断反复的过程,因此,良好的人——机交互性是系统仿真的重要特性。
对动态系统的计算机仿真而言,仿真三要素包括系统、模型和计算机。
相应仿真过程可划分为三个基本活动:建模,模型实现和模型试验。
3)动态系统计算机仿真学科
综上所述,系统仿真一般采用计算机仿真,一般是针对动态系统而言,因此又称为动态系统计算机仿真。
动态系统计算机仿真是一门以系统科学、系统工程理论、数理统计等多个学科理论为基础,以工程系统和各类社会经济系统为主要处理对象的,以数学模型和数字计算机为主要研究工具的新兴边缘科学。
4)系统仿真的发展和应用
纵观系统仿真技术发展的历史可知,仿真技术的发展是与控制工程,系统工程及计算技术的发展密切联系的。
1958年第一台混合计算机系统用于洲际导弹的仿真。
1964年生产出第一台商用混合计算机系统。
20世纪60年代,阿波罗登月计划的成功及核电站的广泛使用近一步促进了仿真技术的发展。
20世纪70年代,系统工程被应用于社会、经济、生态、管理等非工程系统的研究,开拓了系统动力学及离散事件系统仿真技术的广阔应用前景。
仿真技术在每个阶段有一个比较热门的应用领域,比如20世纪50年代热门的应用领域是武器系统及航空,60年代热门的领域是航空与航天,70年代热门的应用领域是核能、电力与石油化工,80
年代热门的应用领域是制造系统。
仿真技术现在已成为系统分析、研究、设计及人员训练不可缺少的重要手段,它给工程界及企业界带来了巨大的社会效益。
使用仿真技术可以降低系统的研制成本,提高系统实验、调试及训练过程中的安全性,对于社会、经济系统,由于不可能直接进行实验,仿真技术更显出它的重要性。
仿真技术在可能性、安全性、准确性、方便性等方面有明显的优点,除在要求十分准确或建模有一定困难时利用实际系统外,均应尽量利用系统仿真技术。
2.Matlab仿真
MATLAB是矩阵实验室(Matrix Laboratory)之意。
除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言做同的事情简捷得多它既适合编写只有区区几行的小程序(如对数据文件进行处理的程序),也适合开发复杂的大型程序,被称为第四代计算机语言。
开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.MATLAB提供的动态系统仿真工具箱Simulink,则是众多仿真软件中功能最强大、最优秀的一种。
它使得建模、仿真算法、仿真结果分析与可视化等实现起来非常方便。
Simulink 会使你的计算机变成一个实验室,可以对机械的、电子的、连续的、离散的、混合的系统,现实存在的、不存在的系统等,进行建模与仿真。
时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大的大型软件。
在国外,MATLAB已经经受了多年考验。
在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。
在国内,特别是工程界,MATLAB 一定会盛行起来。
可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找
到合适的功能。
3.差错控制编码
3.1 差错控制编码
3.1.1 概述
由于数字信号在传输过程中受到干扰的影响,使信号码元波形变坏,故传输到接收端后可能发生错误判决。
由信道中乘性干扰引起的码间干扰,通常,在设计数字通信系统时,首先应从合理地选择调制制度,解调方法以及发送功率等方面考虑。
若采用上述措施仍难以满足要求,则就要考虑采用本章所述的差错控制编码,又称为信道编码。
从差错控制角度看,按加性干扰引起的错码分布规律的不同,信道可以分为三类:即随机信道,突发信道和混合信道。
在随机信道中,错码的出现时随机的,且错码之间是统计独立的。
例如,由正太分布白噪声引起的错码就具有这只中性质。
因此,当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。
在突发信道中,错码是成串出现的,也就是说,在一些短促的时间区间内会出现大量错码,而在这些短促的时间区间之间又存在较长的无错码区间。
这种成串出现的错码称为突发错码。
产生突发错码的主要原因之一是脉冲干扰,而信道中的衰弱现象也是产生突发错码的另一主要原因。
当信道中加性干扰主要是这种干扰时,便称这种信道为突发信道。
我们把即存在随机错码又存在突发错码,且哪一种都不能忽略不计的信道,称为混合信道。
对于不同类型的信道,应采用不同的差错控制技术。
3.1.2 差错控制编码方法
(1)检错重发法接收端在收到的信码中检测出错码时,即设法通知发送重发,直到正确为止,所谓检测出错码,是指在若干接收码元中知道又一个或一些是错码,但不一定知道该错码的准确位置。
采用这种差错控制方法需要具备双向信道。
(2)前向纠错法接收端不仅能在受到的信码中发现有错码,还能够纠正错码,对于二进制系统,如果能确定错码的位置,就能纠正它。
这种方法不需要反向信道,也不存在由于反复重发而延迟时间,实时性好。
但是纠正设备要比检
错设备复杂。
(3)反馈校验法接收端将收到的信码原封不动的转发回发送端,并与原发送端比较。
如果发现错误,责发送端再进行重发。
这种方法原理和设备都较简单,但需要有双向信道。
因为每以信码都相当于至少传送了两次,所以,传输效率较低。
(4)检错删除法接受端发现错码后,立即将其删除,不再重发。
再上述四种方法中,除第(3)种外,其共同点是在接收端识别有无错码。
那么,接收端根据甚么来识别呢?有信息码元序列是一种随机序列,接收端是无法欲知的,也无法识别错码。
为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。
这些监督码和信码之间由一定的关系,使得接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。
在信息码元序列中加入监督码元就称为差错控制编码,优势也称纠错编码。
不同的编码方法,有不同的检纠错能力,有的编码只能检错,不能纠错。
一般来说,付出的代价越大,检纠错的能力就越强。
可见,差错控制编码是以降低信息传输速率为代价来换取传输的可靠性的提高的。
差错控制编码即信道编码,一般分为两类:分组编码和卷积编码。
其中卷积编码是一种比较不错的编码方法。
4.卷积码编译器设计仿真
4.1卷积码
卷积码,或称为连环码,是又伊莱亚斯(P.Elias)于1955年提出的一种分组码。
分组码编码时,先将输入的信息序列分为长度为k个码元的段,然后按照一定的编码规则,给含k个信息元的段附加上r个监督码元,于是生成n长的码组。
在编码时各码组之间没有约束关系,因此在译码时各码组分别独立的进行的。
卷积编码则不同与此,卷积码编码器把k比特信息段编成n比特的码组,但所编的n 长码组不仅与当前的K比特信息段有关联,而且还同前面的(N-1)个信息段有关联. 编码过程中相互关联的码元有 N×n个。
R=k/n是卷积码的码率,码率和约束长度是衡量卷积码的两个重要参数。
卷积码的性能在许多实际应用场合优于分组码,而且编码器设备只需要用简单的移位寄存器和模2加法器等部件组成即可。
4.2 卷积码的编码
卷积码的编码器是一个有K 个输入端,n 个输出端而且具有N 节移位寄存器的有限状态的记忆系统,在任意给定的时间单元处,编码器的n 个输出不仅与此时间单元的k 个输入有关,而且与前N-1个输入也有关,通常卷积码表示为:(n,k,N ),卷积码的编码描述方法有5种:冲激响应描述法、生成矩阵描述法、多项式乘积描述法、状态图描述法和网格图描述法。
图1示出了(2,1,3)最佳码卷积码编
码器的电路原理图。
C1
{b} b1
b2 b3 c
C2 图1 最佳码卷积码编码器的电路原理图
由图可知卷积码的解析解析表示为:b3b1c1+= b3b2b1c2++= 我们用移位寄存器各级与模2加的连接关系。
若某级寄存器与模2加相连接,则相应多项式系数为1,反之,无连接时相应的多项式系数为0.由图1可知相应的生成多项式为:()x21x g1+= ()x2x11x g2++= 为方便起见,人们还常用八进制序列和二进制序列来表示生成多项式,比如,x21x g1+=)( g1=(1 0 1) x2x11x g2++=)( g2=( 1 1 1) 下面将利用生成序列(注:生成序列与生成多项式是完全的对应关系)来表示生成矩阵,已知,(2,1,3)卷积码的生成序列为
)()(g11g12g13101g1==
)
()(g21g22g23111g2== 把生成序列按以顺序排列,即:
M1 M2
G1 G2 G3 0 ........
G= G1 G2 G3 0 .......
G1 G2 G3 0 ..
............ .....
其中式中每生成子矩阵Gi为g21)
(g11
G1=G2=(g12 g22) G3=(g13 g23),一般情况下,(n,k,N)卷积码的监督矩阵为:
P1In-k……..
P20 P1In-k ……
H= ….. …….
P N 0 P N-10 ….. P1In-k
式In-k.............(n-k)阶单位方阵
P i......................(n-k)k阶P矩阵0.......................(n-k)阶全零方阵
人们还称最后一行矩阵h=[ P N 0 P N-10 ….. P1In-k]为(n,k,N)卷积码的基本监督矩阵。
下面再来讨论(2,1,3)卷积码的图型表示,由(2,1,3)编码器得解析式可得
c1+
=
b1
b3
+
=
c2+
b1
b3
b2
得(2,1,3)卷积码的状态表格:
(2,1,3)卷积码的状态表格
名称b3b2b1c1c2b3b2名称
a0 0 0 0 0 0 0 a
1 1 1 0 1 b
b0 1 0 0 1 1 0 c
1 1 0 1 1 d
c 1 0 0 1 1 0 0 a
1 0 0 0 1 b
d 1 1 0 1 0 1 0 c
1 0 1 1 1 d
由上表还可以得到(2,1,3)卷积码的网格图:
t1 t2 t3 t4 t5 t6
状态 a=00 ·2 ·1 · 1 · 1 · 1 ·
0 1 1 1 1
b=10 ·· 1 ·1 1
1 1 1
c=01 · 2 ·2 · 0 ·2
0 0 0 2 2 0 0
d=11 2 0 2
图2 (2,1,3)卷积码的网格图
.3 卷积码的译码
卷积码的译码方法由两类:一类是大数逻辑译码,又称门限译码;另一类是概率译码。
概率译码又分为维特比译码和序列译码两种。
门限译码方法是以分组码理论为基础的,其译码设备简单,速度快,但其误码性能要比概率译码法差,维特比译码则是一种比较号的译码方法。
Viterbi属于概率译码,当卷积码的约束长度不太大时,与序列译码相比,维特比译码器比较简单,计算速度更快。
维特比译码算法,以后简称VB算法。
VB 算法是1976年由Viterbi提出的,近年老来有很大的发展。
在BSC信道情况下,维特比译码就是最小距离译码。
又称为最大似然译码,译码的任务是在树状图或网格中选择一条路径,计算出各支路与接收到的信息序列的距离。
从中选出距离最小的一条支路作为译码输出。
这样选出来的输出序列和发送端发出的序列最为相似。
换句话说,此序列出错的概率最低。
因此,Viterbi译码是一种极大似然译码。
通常把可能的译码序列与接收序列之间的距离称为量度。
Viterbi译码分为硬判决 Viterbi译码和软判决 Viterbi译码,他们之间惟一不同之处在于支路量度的计算方法。
硬判决 Viterbi译码以序列之间的汉明距离作为量度,适用于二进制对称信道(BSC);而软判决 Viterbi译码则是将信道输出的信号进行Q(>2)电平量化,然后再进行 Viterbi译码,这样充分利用了信道输出信号的信息,提高了译码的可靠性,是一种适用于离散无记忆信道(DMC)的译码方法。
维特比译码目前在数字通信的前向纠错系统中用得较多,而且在卫星深空通信中应用更多,该算法在卫星通信中已被采用为标准技术。
采用概率译码的一种基本思想法是:把已接收到序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。
如果发送L组信息比特,对于(n,k)卷积码来说,可能发送的序列有2kl个,计算机或译码器需存储这些序列并进行比较,以找到码距最小的那个序列。
当传信率和信息组数L较大时,使得译码器难以实现。
VB算法则对上述概率译码(又称最大自然解码)做了简化,以至成为了一种实用的概率算法。
它并不是在网格图上一次比较所有可能的2kl 条路径(序列),而是接收一段,计算和比较一段,选择一段有最大似然可能的码段,从而达到整个码序列是一个有最大自然值的序列。
下面将用图3的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。
为了能说明解码过程,这里给出该码的状态图,如图4所示。
唯比特译码需要利用图来说明译码过程。
根据前面的画网格图的例子,可以验证和画出该码网格图5,该图设输出信息数目L=5,所以画有L+N =8个时间单位(节点),图中分别标以0至7.这里设编码器从a状态开始运作。
该网格图的每一条路径都对应着不同的输入信息序列。
由于所有的可能输入信息序列共有2kl个,因而网格图中所有可能路径也有2kl条,这里节点a=00,b=01,c=10,d=11.
C1
输入序列
Mj Mj-1 Mj-2
输出序列
m0m1....m
n
c2
图3(2,1,3)卷积码编码器
设输入编码器的信息序列位(11011000),则由编码器输出的序列Y=(1101010001011100),编码器的状态转移路线为abdcbdca。
若收到的序列R=(0101011001011100),对照网格图来说明唯特比译码的方法
11 bb 01
00 a 00 10 d 10
11 c 01
图4(2,1,3)卷积码的状态图
a ·0 00 1 00 · 2 00· 3 00 · 4 00 5 00 6 00 7
11 11 11 11 11 11 11
b ··· 00 · 00
10 10 10 10
c ·· 01 01 01 01
01 01 01 01
d ··· 10 · 10 · 10 ·
图5(2,1,3,)卷积码的网格图
由于该卷积码的约束长度位为6位,因此先选择接收序列的前6位序列R1=(010101)同到达第3时刻的可能的8个码序列进行比较(即8条路径)进行比较,并计算出码距。
该例中到达第3时刻a点的路径序列是(000000)和(111011),它门与R1的距离分别是3和4;到达第3时刻b点的路径序列是(000011)和(111000),它们与R1的距离分别是3和4;到达第3时刻c点的路径序列是(0011100)和(110101),与R1的距离分别是4和1;到达第3时刻d的路径序列是(001101)和(110110),与R1的距离分别是2和3。
上述每个节点都保留码距较小的路径作为幸存路径,所以幸存路径码序列是(0000000),(000011),(110101)和(001101)如图6所示。
用上面类同的方法可以得到第4,5,6,7时刻的幸存路径。
需指出对于某一个节点而言比较两条路径与接收序列的累计码距时,若发生两个码距值相等,则可以任选一条路径作为幸存路径,此时不会影响最终的译码结果。
图6(b)中给出了第5时刻幸存路径,可以自行验证。
在码的终了时刻a 状态,得到一根幸存路径,如图6(c)所示。
由此看到译码器输出是R,=(1101010001011100),即可变换城序列(11011000),恢复了发端原始信息。
比较R和R序列,可以看到在译码过程中已纠正了在码序列第一和第七位上的差错。
当然,差错出现太频繁,以至超出卷积码的纠错能力,则发生误纠,这是不希望的。
有关问题不再讨论。
从译码过程看到,唯特比算法所需要的存储量是2N ,在上例中仅为8.这对于约束长度N<10的译码是很有吸引力的。
目前某些卷积码的唯特比译码芯片,在市场已经可以购买的,其硬件结构不再介绍。
4.4 相关参数
仿真时,我们采用(2,1,3)最佳卷积码,编码速率 R=1/2。
信号源采用周期为252-1的M 序列,其本原多项式为1x x G 325++=)(。
仿真源系统方框图6所示:
信息序列 译码序列
图6 仿真源系统方框图
4.5程序设计
4.5.1 卷积码编码函数
void v_encode(int *xinyuan,int *convolcode); 参数说明:
xinyuan 为编码器输入序列 convolcode 为编码器输出序列 设计思路
编码器为串入串出结构,这里一共定义四个端口信号,它们分别是: data_in : IN STD_LOGIC; --信息数据输入 clk_in : IN STD_LOGIC; --时钟输入 start : IN STD_LOGIC; --编码使能
data_out : OUT STD_LOGIC;--编码数据输出 定义内部状态信号 state ,表示mj 、mj-1、mj-2: SIGNAL state :STD_LOGIC_VECTOR(2 down to 0); 定义内部信号dtat_internal ,用以暂存x1,j 、x2,j : SIGNAL data_internal : TD_LOGIC_VECTOR (1 down to 0); 于是,由⑴、⑵式可知,data_internal 与state 的关系为: data_internal(1)=state(0)⊕state(1)⊕state(2) data_internal(0)=state(0)⊕state(2)
当编码使能 start 为0 时不进行编码,并将状态state 清零;start 为1 时进行编码,此时每2 个时钟周期输入一个新的信息比特,同时状态信号改变,输出2 位已编码比特,即每个时钟周期输出1 位已编码比特。
(2,1,3)卷积
码编码器
信道
Viterbi 译码器
4.5.2 维特比译码函数
void v_iterbi(int *convolcode,int *viterout);
参数说明:
convolcode 为译码器输入序列
viterout为译码器输出序列
这里有必要讲一下维特比译码的程序实现。
在程序中,维特比译码是分两段来译的。
第一段,在时刻m之前,这时候没有比较和选择,只要算出每个状态的部分路径值,实现这个功能的函数是:int viterbi0(int *code,int length,int *distance,int (*pat)[32])
code为译码器输入序列;length为译码深度,我们取length=32;distance 里面存储的是每个状态的部分路径值;pat里面记录了每个时刻每个状态的输入序列,以便到时往回搜索。
第二段是在时刻m之后,这时候对每个状态来说,有两个输入,我们必须在这两个输入中选择最有可能性的一条,然后删去另外一条。
其函数为:int viterbi(int *code,int *decode,int length,int *distance,int (*pat)[32])
与上面的第一段函数相比,只多了一个decode,decode在这里存储译码后的序列。
其他的参数与viterbi0中的一样的。
设计思路
端口及信号定义
输入输出端口为:
clk : in std_logic; --系统时钟
start : in std_logic; --开始信号,1 表示译码开始
datain : in std_logic; --串行数据输入
dataout : out std_logic; --译码输出
内部信号为:
signal inbuff:std_logic_vector(1 downto 0); --输入数据缓冲区
signal step:integer range 0 to 3; --译码步骤,0 为第一步之前状态signal state:std_logic;--译码状态,0 加,1 比选
signal chn0_0,chn0_1,chn1_0,chn1_1: std_logic_ vector(3 downto 0); --比前路径长度
signal chn2_0,chn2_1,chn3_0,chn3_1: std_logic_ vector(3 downto 0); signal rlength0,rlength1,rlength2,rlength3: std_ logic_ vector(3 downto 0); --选后路径长度
signal route0,route1,route2,route3: std_logic_ vector(9 downto 0); --译码路径,深度为10
其中“比前路径长度”中下划线前的数字代表该路径最后停在的状态,下划线后的数字代表是由哪个状态转移过来的。
如果是0 则代表由状态号较小的状态转移过来的那条路径,反之如果为1 则代表由状态号较大的状态转移过来的那条路径;“选后路径长度”和“译码路径”的序号表示该路径最后停在的状态号。
4.6 卷积码的性能分析和仿真测试 4.6.1 理论计算
我们分别针对AWGN(高斯白噪声)和Rayleigh 两种信道,给出卷积码的误比特率公式。
1)AWGN 原始误比特率 ()()1 (2)
1
D erfc P b =
下面讨论维特比译码器在实际信道中的性能。
信道中是白高斯噪声,输出量化成二进制(硬判决)。
信道的误码率如式1所示。
对一个自由距离为free d 的卷积码,在此信道中维特比输出的误码率为
()2....................
P 2Bd k
1P 2d b d free mb free
free
= 式中free d B 是(n,k,m)卷积码的码序列中,所有重量为free d 的码字中的非0信息元的总数目。
由式2得,free d =6,2=free d B 。
2)Rayleigh 信道原始误比特率
()3....................115.02
2⎥⎥⎦
⎤
⎢⎢⎣⎡+-⨯=D D P b 加卷积码后的误比特率
()4................P 2P 3
b17b = ,
]11[5.0122
11+-
⨯=D R D R P b , 21
1
=R
4.6.2 仿真结果与理论
卷积码编码器仿真结果
卷积码编码器的仿真波形如图7所示。
在编码使能之后输入序列data_in 为110111001000……( 每个bit 持续2 个时钟周期) , 编码输出序列data_out 为
110101000110011111101100……(每个bit 持续1 个时钟周期)。
图7 卷积码编码器仿真波形
卷积码译码器仿真结果
维特比译码器的仿真波形如图8所示。
其中图(a)为无误码时的情形,图中输入序列为1101010001100111…,译码输出序列为11011100…;图(b )为有误码时的情形,图中假设输入序列为1001010101100101…(其中有阴影的bit 为误码),则译码输出序列仍为11011100.....。
(a) 无误码时的波形
(b) 有误码时的波形。