Turbo编译码的Matlab实现
(6) 支持科学和工程计算标准的开放式、可交互结构; (7) 跨平台兼容。
2、Matlab工具箱和内容
目前Matlab已经成为国际上最流行的软件之一,它除了传统的交互式编程外,还提供了丰富可靠的矩阵运算。图形绘制、数据处理、图象处理、方便的Windows编程等便利工具。出现了各种以Matlab为基础的使用工具箱,广泛的应用于自动控制、图象信号处理、生物医学工程、语言处理、雷达工程、信号分析、震动理论、时序分析与建模、化学统计学、优化设计等领域,并表现出一般高级语言难以比拟的优势。较为常见的工具箱主要包括:
(1) 控制系统工具箱(Contorl systems toolbox) (2) 系统识别工具箱(Systems identification toolbox)
(3) 多变量频率设计工具箱(Multivariable freguency design toolbox) (4) 鲁棒控制工具箱(Robust control toolbox) (5) 分析与综合工具箱(analysis and synthesis toolbox) (6) 神经网络工具箱(Neural network toolbox) (7) 最优化工具箱(Optimization toolbox) (8) 信号处理工具箱(Signal processing toolbox)
(9) 模糊推理数据工具箱(Fuzzy inference system toolbox) (10) 小波分析工具箱(Wavelet toolbox) (11) 通信工具箱(Communications toolbox) 3、Simulink简介
Simulink是实现动态系统模型仿真的一个集成环境,她的存在使Matlab的功能得到进一步的扩展。这种扩展的意义表现在:(1)实现可视化建模。在Windews环境下,用户通过简单的鼠标操作就可以建立直观的系统模型,并进行仿真;(2)实现多工作环境内文件互用和数据交换,如Sinulink与Matlab,Simulink与Fortran、C和C++,Simulink与实时硬件工作环境的信息交换都可以方便的实现;(3)把理论研究和工程实现有利地结合在一起。
Simulink为用户提供了用方框图进行建模的图形接口,采用这种结构化模型就像纸和笔一样容易,它与系统仿真软件包用微分方程和差分方程建模相比具有更直观、方便、
Turbo编译码的Matlab实现
灵活的优点。由于Matlab与Simulink是集成在一起的,因此用户可以在这两种环境下对自己的模型进行仿真。
6.2 程序仿真结果
本节对Turbo码的整个编码、译码过程做了仿真。译码部分采用经典SOVA算法以及改进的双向SOVA算法。而后对两者的仿真结果作了简要的性能分析、比较和总结。
仿真过程中,由Matlab的伪随机函数“rand”自动产生要求长度的信息码,然后对其进行Turbo编码。然后用Matlab的另一个伪随机高斯随机函数“randn”产生与Turob码码字长度相同的一个伪随机序列,把它与Turbo码对应位相加来模拟信道中的加性干扰噪声。交织和解交织部分如前所述采用了伪随机交织方案,因为这种方案只用一条简单的Matlab语句就可实现,所以,不再细说。 1、经典 SOVA算法译码性能仿真结果
仿真时,比特误码率(BER)是在不同信噪比下对帧长为50、码率R为1/2、g=[1 1 1;1 0 1]的200帧的平均结果。BER采用矩阵得方式输出,其中第i行、第j列的元素对应的是第i个信噪比在第j次迭代后译码的BER。迭代次数为5次。信噪比从0dB间隔为0.5dB取值到6dB共13个值,即EbN0db=[0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6](dB)。
ber 1= 0.6885 0.6664 0.6396 0.6391 0.6365
0.5125 0.4763 0.4767 0.4706 0.4200 0.3604 0.3219 0.2958 0.2766 0.2682 0.2437 0.2047 0.1833 0.1734 0.1729 0.1604 0.1240 0.0932 0.0943 0.0802 0.0792 0.0505 0.0365 0.0359 0.0354 0.0410 0.0210 0.0158 0.0105 0.0074
0.0198 0.0099 0.0021 0.0031 0.0031 0.0073 0.0047 0.0021 0.0047 0.0031 0.0005 0 0 0 0 0.0005 0.0005 0.0010 0.0010 0.0010
0 0 0 0 0
0 0 0 0 0 2、在2的基础上改变生成矩阵
Turbo编译码的Matlab实现
此时采用过g=[1 1 1 1 1;1 0 0 0 1],仿真结果如下: ber3=0.7065 0.6793 0.6962 0.6612 0.6466 0.5408 0.5163 0.5337 0.5120 0.4690 0.3918 0.3478 0.3408 0.3120 0.2978 0.2272 0.1918 0.1864 0.1587 0.1429 0.1332 0.0783 0.0755 0.0750 0.0722 0.0529 0.0216 0.0283 0.0320 0.0261 0.0310 0.0141 0.0071 0.0049 0.0076 0.0114 0.0038 0.0022 0 0 0.0038 0 0 0 0 0.0002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
将g=[1 1 1 1 1;1 0 0 0 1]和g=[1 1 1;1 0 1]的译码性能图绘制在一幅里面进行比较,如下图:
0-0.5-1-1.5-2-2.5-3-3.5Eb/N0 -40123456log(BER) 图6-1 Turbo码的译码性能图
图6-1中实线表示的是g=[1 1 1 1 1;1 0 0 0 1]的情况下的性能图,而点划线表示g=[1 1 1;1 0 1]的译码性能图。经比较可以发现,改变生成矩阵可以改变Turbo码的译码性能。
Turbo编译码的Matlab实现
图中说明,当迭代次数较低时,[37,21]码的性能明显比[7,5]码要好的多,但随着迭代次数的增加,这种优势变弱。另一点是[37,21]码曲线比[7,5]码的曲线要平滑。分析其原因,可能是因为增加了约束长度,增大了码字内部各比特之间的相关性,从而提高了译码性能。
3、在4的基础上改变帧长
帧长由原来的50变为200,仿真结果及性能曲线图如下: ber4=0.7818 0.8199 0.8229 0.8284 0.8284 0.6446 0.6539 0.6459 0.6405 0.6564 0.4810 0.4274 0.4189 0.4255 0.4130 0.2732 0.1892 0.1629 0.1513 0.1468 0.1542 0.0857 0.0652 0.0617 0.0564 0.0685 0.0228 0.0176 0.0165 0.0147 0.0182 0.0031 0.0023 0.0018 0.0001 0.0047 0.0001 0 0 0 0.0020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0-0.5-1-1.5-2-2.5-3-3.5Eb/N0 -40123456log(BER) 图6-2 Turbo码的性能曲线图
Turbo编译码的Matlab实现
图6-2中点划线表示的是帧长为50的Turbo码的性能曲线图,而实线表示帧长为200的Turbo码的性能曲线图。从图中很明了的可以看出,帧长为200的码比帧长为50的码的误比特率性能要好的多,这符合前边提到的信道编码定理,码长越长,在保持码率不变得情况下,误比特率越小。并且,曲线也变得比较平滑了,抖动减小,这说明了较长码的译码性能比较短码的译码性能稳定。
总结上述几种参数下的仿真结果,最终可以看出,可以通过改变参数改善Turbo码的性能,比如改变生成矩阵和帧长。由具体仿真结果比较可以看出,分别改变生成矩阵和帧长得到的译码性能改善是有较大差异的。其中改变帧长对提高Turbo的译码性能更为有效。
值得提醒的是:仿真结果所示的译码性能没有前面章节所介绍的接近香农限,这是因为香农的信道编码定理指出的是错译率随码长的无限增长而无限下降,注意这里用的是无限长码字,而本文仿真时Turbo码码长最长只有200位。另一个原因是迭代次数不够多。之所以这样取值,也是考虑到仿真程序运行时间比较长。即使按照本文所述取值,运行时间仍然很长。这里的仿真只能用于测试该Turbo码的性能,并不是实际应用。仿真和实际运用是不同的。