对卷积码的编译码实现进行仿真编程和仿真实验.docx
- 文档编号:8688462
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:404.44KB
对卷积码的编译码实现进行仿真编程和仿真实验.docx
《对卷积码的编译码实现进行仿真编程和仿真实验.docx》由会员分享,可在线阅读,更多相关《对卷积码的编译码实现进行仿真编程和仿真实验.docx(12页珍藏版)》请在冰豆网上搜索。
对卷积码的编译码实现进行仿真编程和仿真实验
实验二:
卷积码编译器
1120510217吴宏晶
一、实验目的
对卷积码的编译码实现进行仿真编程和仿真实验
二、仿真软件
LabVIEW2013版(前面版用于数据显示,后面板为程序源代码)
三、实验流程
1.卷积码的编码
以(3,1,2)卷积码为例,下图为LabVIEW仿真前面板
每一时刻都有一个信息比特进入第一个寄存器中,如图中D1。
编码器利用D1和D2这两个寄存器来产生3比特的输出码字如图中所示C1、C2、C3。
编码的规则是C1=M1,C2=M1+D1+D2,C3=M1+D2。
定义D1和D2的状态为S1和S2,S1和S2共有四种组合状态。
描述的在不同的输入比特状态下,编码器对应的输出和下一个时刻的状态变化。
它们的转化关系如下图所示
2.卷积码的译码
卷积码的译码采用维特比译码法。
维特比算法的思路:
在每个节点处,留下到达该节点处局部度量最大的路径,丢弃其余的局部路径,这条留下来的路径叫做幸存路径。
如果所有幸存路径在某个支路处是重合的,就可以输出这个支路上数据的译码结果。
为了避免延时,在当前局部路径中,找出局部累积量最大的,沿着这个路径回退N步会有一个分支,输出这个分支的数据。
(3,1,2)卷积码t0~t5六个时刻,第一次选取幸存路径发生在从t2到t3转移时刻。
四、实验源程序说明
1.卷积码的编码
程序源代码如下图所示
1.坐标1处是输入码元数组,它经过一个FOR循环依次进入循环中。
2.坐标2处是D1和D2两个移位寄存器,D1的结果在一次循环过后移入D2中。
3.坐标3处表示C1的值为每次直接进来的码元值。
4.坐标4处为C2的计算值,对局部进行放大,有如下图
说明:
C2=D1+D2+M1(模2加法),M1为码元值。
因为没有模2加法的函数,故调用除2函数,再对余数与0进行比较是否相等,若结果为TRUE,则表明C2为2的倍数,即为0,故将0送入C2中,否则将1送入C2中。
5.坐标5处为C3的计算值,对局部进行放大,有如下图
说明:
C3=M1+C2,故将两数相加,再对结果与1比较,因为只有01或10相加才为1,其他值为0或者2,故若判断结果为TRUE,则将1的值赋值给C3,如上图所示。
6.坐标6表示对C1,C2,C3值进行合并为一个数组,按照C1在前的顺序。
对局部进行放大
7.坐标7处表示进行5次循环后,将最终的数组结果送入名为5个比特编码后的序列的数组容器中。
实验数据:
第一次执行,码元1进入,D1D2=00。
第五次执行后,所有码元都进入
2.卷积码的译码
前面板如下图所示,因为尚未执行程序,故数据框图被阴影覆盖。
左图为状态00的状态簇。
程序共有四个状态簇,簇相当于C语言中的结构体,以状态00簇为例。
它包括:
可能输入值数组,当前输出值数组,状态标号00字符串,与接收值的汉明距离数值显示控件。
其中:
1.可能输入值数组表明在某个t时刻,状态00在判断了两个到达的分支的汉明距离之后,所选定的那个分支的输出值。
2.可能输入值数组用来存储某个时刻到达状态00的有效分支所经历的0或1的输入值。
3.状态标号00是用来区别其他状态。
4.汉明距离是用来全部执行结束后,比较四个状态的汉明距离,从而判断是由哪个状态输出最终结果。
最终结果即是可能输入值数组的值。
源程序1
源程序2
1.因为在t0-t2这段时间,维特比译码的输出结果总是一样的,即在首次出现全部状态都到达的时刻t2时,状态00的输出为【000000】,输入结果为【00】,状态01的输出为【111010】输入结果为【10】,状态10的输出为【000111】输入结果为【01】,状态11的输出为【111101】,输入结果为【11】。
故对上述值进行初始化,并假设接收机实际接收到的码元为【111101101100101】。
初始化如下图所示
2.以状态00为例,当它接收到0码时,它的输入由原来的【00】变为【000】状态跳转到状态,输出变为【000000000】,并与实际码元相比较,产生汉明距离R000;当它接收到1时,它的输入由原来的【00】变为【001】。
状态跳转到10,输出变为【000000111】,并与实际码元相比较,产生汉明距离R001
如下图所示
子VI3是用来决定各种状态的跳转、输出值的变化。
程序如下图所示
上图中:
状态为11,假设输入为1时,输出就被赋值为110。
3.对同时到达下一个节点的两个值,我们要比较他们的汉明码距,从而决定保留哪一个,以00节点为例。
到达00节点的有:
上一时刻的00节点输入0时和上一时刻的01节点输入0时,取出他们的输出与实际接收值比较,得出各自的汉明码距,比较汉明码距,保留小的分支,并把输出值,输入值,汉明码距重新赋值到状态00簇中。
调用子程序VI4进行汉明码的计算,子程序如下图所示
通过等号进行比较,相等计数器不加1,不相等计数器加1,比较结束后送入汉明距离中。
4.四个状态都如前面所示进行保留距离小的分支,舍弃大的分支后,完成一次循环,通过移位寄存器进行下一次循环,直到达到实际接收码元的长度。
5.循环结束后,在四个状态簇中均会有一个汉明码距,一个输入值,一个输出值。
比较他们的汉明码距,选择最小的,将其输出送入最终结果中。
选择程序如下图所示
五、实验结果
卷积码编码结果为
维特比译码后为
译码结果为11011与发送的码元是一致的,所以译码正确。
同时从状态11簇可以看出汉明距离为1,此时为四个状态的整体最小累积量,故最终输入值取自它的簇中的输入结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 卷积码 译码 实现 进行 仿真 编程 实验