
信道编码作为一种基础技术,广泛应用于各种通信系统和存储系统,是实现可靠通信和数据存储的主要手段。MATLAB作为一种常用的工程语言,具有强大的科学计算和可视化功能,简单易用,且提供了针对通信系统设计的工具箱(算法功能模块),是进行信道编码研究、仿真和应用开发的基本工具和首选平台。 本书首先简要介绍MATLAB语言和程序设计方法,然后分章节介绍常用的线性分组码、卷积码、Turbo码、TPC码和LDPC码的编/译码原理和算法,给出编码、译码和联合仿真的MATLAB代码和注释,并对信道编码在深空通信中的应用进行介绍,给出仿真流程和仿真结果,最后介绍MATLAB提供的各种信道仿真模型和误比特率计算和分析工具。
前 言 随着通信技术的不断发展,现代通信系统的复杂化以及通信业务的多样化要求系统能够实现高速、实时和可靠数据传输,而且用户对通信质量的要求也在不断提高,使得对高数据率数字通信等领域所采用的信道编码技术的要求也越来越高。 在通信系统设计的过程中,信道编码是必须要考虑的主要组成部分。如何选择合适的信道编码方法,在不超过系统复杂性要求的前提下实现目标通信的可靠性,是信道编码实用化的主要研究内容。通常,计算机仿真是选择和设计信道编码的主要手段之一。MATLAB软件作为一种工程化语言,对信道编码的仿真有很好的支持。本书结合信道编码基本原理的介绍和具体的MATLAB仿真方法,为读者提供方便快捷地理解信道编码以及通过仿真进行信道编码设计和选择的方法。 全书共分9章,各章内容编排如下。 第1章首先介绍MATLAB集成开发环境和Simulink软件的使用方法,然后简要说明信道编码的作用和分类,以及几类常用的信道编码。 第2章主要介绍MATLAB的基本编程组件、数据类型、矩阵和数组、基本数学运算、数据导入导出和MATLAB绘图等在信道编码仿真时用到的MATLAB基础知识。 第3章重点描述MATLAB程序设计方法,包括M文件编程、MATLAB函数方法、程序调试和出错处理、内存使用和优化、程序计划、仿真性能分析和优化等程序设计思想,最后简要介绍MATLAB提供的通信工具箱的内容。 第4章首先针对信道编码研究和开发涉及的有限域及其运算进行具体解释和说明,然后重点介绍线性分组码、循环码、BCH码和RS码等分组码,给出每种分组码的原理、编码方法和译码算法以及MATLAB仿真程序代码,并详细介绍MATLAB提供的相关函数。同时本章还给出了在深空通信中RS码的应用和仿真结果。 第5章介绍卷积码的原理、编码方法和Viterbi译码算法,重点分析MATLAB提供的卷积码编译码函数和Simulink仿真模块,最后给出在深空通信中卷积码以及RS码和卷积码级联组合码的结构和仿真结果。 第6章针对Turbo码这一性能优异的级联码进行分析,在介绍并行级联编码和迭代译码原理和算法的基础上,给出了MATLAB仿真代码,详细解释MATLAB提供的各种类型的交织器函数,最后介绍深空通信中的标准Turbo码及仿真结果。 第7章介绍结构简单但性能较好的TPC码,描述编码方法和基于迭代的改进Chase译码算法,最后给出具体的MATLAB实现代码和仿真结果。 第8章重点介绍LDPC码的原理和基于消息传递的译码算法,给出基于迭代的译码仿真代码,结合深空通信标准的LDPC码介绍编码方法并给出仿真结果。 第9章主要介绍通信系统和信道编码仿真中常用的信道模型,包括BSC、AWGN信道和衰落信道模型,详细介绍各种信道模型的MATLAB仿真函数和Simulink仿真模块的参数设置和使用方法,最后简要介绍MATLAB提供的通信误比特率和误符号率统计函数及误比特率分析工具。 本书详尽介绍现有常用信道编码及其MATLAB仿真实现方法,编写过程中参考了经典的信道编码专著和部分学位论文,在此对其相关作者表示衷心的感谢。 参于本书编写工作的还有梁光明、胡耀华、刘丽华、刘祎斌、吕文龙、刘军发、敖宇、王月磊、蔺吉顺、马新军、张绘国等。 感谢电子工业出版社和本书的责任编辑田宏峰老师,在田老师的大力支持和帮助下本书才得以与广大读者见面。 由于作者水平有限,错误遗漏之处在所难免,恳请各位读者批评指正。同时也欢迎大家就信道编码及MATLAB仿真相关技术与作者交流,联系邮箱:ldh_1976@163.com。 作 者 2013年12月
目 录 第1章 概述 (1) 1.1 MATLAB (1) 1.1.1 MATLAB的组成 (1) 1.1.2 开发环境 (2) 1.2 Simulink (6) 1.2.1 启动Simulink (6) 1.2.2 创建Simulink模型 (8) 1.2.3 模块参数设置 (10) 1.2.4 仿真Simulink模型 (10) 1.3 信道码 (11) 1.3.1 信道码在数字通信系统中的地位和作用 (11) 1.3.2 信道码的类型 (12) 1.3.3 常用信道编译码方法 (13) 1.3.4 信道码的应用 (14) 1.4 基于MATLAB的信道码仿真 (14) 第2章 MATLAB编程基础 (15) 2.1 基本编程组件 (15) 2.1.1 MATLAB命令 (15) 2.1.2 变量 (16) 2.1.3 关键字 (16) 2.1.4 操作符 (17) 2.1.5 MATLAB表达式 (18) 2.1.6 程序控制状态 (18) 2.1.7 常用符号 (20) 2.2 数据类型 (22) 2.2.1 数值 (22) 2.2.2 逻辑类型 (28) 2.2.3 字符和字符串类型 (29) 2.2.4 日期和时间 (30) 2.2.5 结构体 (31) 2.2.6 元胞数组 (31) 2.2.7 函数句柄 (32) 2.2.8 MATLAB类和Java类 (32) 2.3 矩阵 (32) 2.3.1 矩阵构造 (33) 2.3.2 矩阵访问 (34) 2.3.3 矩阵操作 (37) 2.3.4 对角矩阵 (39) 2.4 数学运算 (40) 2.4.1 线性运算 (40) 2.4.2 稀疏矩阵 (41) 2.4.3 多项式 (44) 2.5 数据导入/导出 (44) 2.5.1 支持的文件格式 (44) 2.5.2 导入向导的使用 (46) 2.5.3 导入/导出MAT文件 (48) 2.5.4 导入/导出文本数据 (49) 2.5.5 底层文件I/O函数 (51) 2.6 MATLAB绘图 (52) 2.6.1 基本绘图命令 (53) 2.6.2 绘制特殊图 (60) 2.6.3 图形编辑工具 (67) 第3章 MATLAB程序设计 (74) 3.1 M文件编程 (74) 3.1.1 M文件设计 (74) 3.1.2 M文件结构 (75) 3.1.3 M文件脚本和函数 (76) 3.1.4 函数调用 (77) 3.2 函数类型 (79) 3.2.1 匿名函数 (79) 3.2.2 主函数 (79) 3.2.3 嵌套函数 (80) 3.2.4 子函数 (81) 3.2.5 私有函数 (82) 3.2.6 重载函数 (82) 3.3 程序调试和出错处理 (82) 3.3.1 调试程序 (83) 3.3.2 出错处理 (87) 3.4 内存使用和优化 (91) 3.4.1 内存分配 (91) 3.4.2 内存管理函数 (92) 3.4.3 提高内存使用效率 (93) 3.5 程序计划 (96) 3.5.1 创建和设置定时对象 (97) 3.5.2 启动和停止定时器 (98) 3.5.3 创建和执行回调函数 (99) 3.5.4 定时对象执行模式 (100) 3.6 性能分析和优化 (101) 3.6.1 程序性能分析 (102) 3.6.2 MATLAB程序优化 (106) 3.7 MATLAB通信工具箱 (109) 3.7.1 信道编译码函数 (109) 3.7.2 交织器函数 (110) 3.7.3 信道模型函数 (111) 3.7.4 Galois域函数 (112) 3.7.5 其他相关函数 (113) 第4章 线性分组码 (114) 4.1 有限域及其运算 (114) 4.1.1 基本概念 (114) 4.1.2 有限域上的运算 (115) 4.1.3 有限域多项式 (116) 4.1.4 有限域相关函数 (118) 4.2 线性分组码 (124) 4.2.1 基本原理 (124) 4.2.2 编码方法 (129) 4.2.3 译码算法 (130) 4.2.4 MATLAB仿真实现 (132) 4.3 循环码 (150) 4.3.1 基本原理 (150) 4.3.2 编码方法 (156) 4.3.3 译码算法 (158) 4.3.4 MATLAB仿真实现 (164) 4.4 BCH码和RS码 (173) 4.4.1 基本原理 (173) 4.4.2 编码方法 (177) 4.4.3 译码算法 (178) 4.4.4 MATLAB仿真实现 (189) 4.4.5 CCSDS标准RS码 (216) 第5章 卷积码 (223) 5.1 基本原理 (223) 5.1.1 卷积码的定义 (223) 5.1.2 生成矩阵和校验矩阵 (224) 5.1.3 状态图和网格图描述 (231) 5.1.4 距离特性和重量分布 (233) 5.1.5 特殊卷积码 (235) 5.2 编码方法 (236) 5.3 译码算法 (236) 5.3.1 硬判决Viterbi译码算法 (236) 5.3.2 软判决Viterbi算法 (240) 5.4 MATLAB仿真实现 (242) 5.5 CCSDS标准卷积码及仿真 (261) 5.5.1 CCSDS标准建议的(7,1/2)卷积编码器 (261) 5.5.2 CCSDS标准建议的删余卷积编码器 (262) 5.5.3 仿真实现流程 (263) 5.5.4 仿真结果 (265) 5.6 CCSDS标准级联码 (267) 5.6.1 级联码的编码和译码 (268) 5.6.2 仿真实现流程 (268) 5.6.3 仿真结果 (270) 第6章 Turbo码 (272) 6.1 基本原理 (272) 6.1.1 Turbo码的定义 (272) 6.1.2 分量码设计 (272) 6.1.3 交织器设计 (274) 6.2 编码方法 (276) 6.3 译码方法和算法 (279) 6.3.1 迭代译码 (279) 6.3.2 MAP类算法 (281) 6.3.3 SOVA (287) 6.4 MATLAB仿真实现 (294) 6.4.1 编码 (294) 6.4.2 译码 (298) 6.4.3 编译码联合仿真 (304) 6.4.4 MATLAB交织函数的使用 (305) 6.5 CCSDS标准Turbo码 (322) 6.5.1 编码 (322) 6.5.2 译码 (323) 6.5.3 仿真实现流程 (324) 6.5.4 仿真结果 (327) 第7章 TPC码 (329) 7.1 基本原理 (329) 7.1.1 TPC码的定义 (329) 7.1.2 分量码的设计 (330) 7.2 编码方法 (332) 7.3 译码算法 (334) 7.3.1 硬判决译码 (334) 7.3.2 软判决译码 (335) 7.3.3 改进的Chase算法 (335) 7.3.4 迭代译码 (340) 7.4 MATLAB仿真实现 (341) 7.4.1 编码 (341) 7.4.2 译码 (342) 7.4.3 编译码联合仿真 (345) 7.5 仿真及性能分析 (347) 第8章 LDPC码 (349) 8.1 基本原理 (349) 8.1.1 LDPC码的定义 (349) 8.1.2 LDPC码的因子图表示 (350) 8.2 LDPC码的构造 (354) 8.2.1 Gallager LDPC码 (354) 8.2.2 准循环LDPC码 (355) 8.2.3 基于Q矩阵构造LDPC码 (356) 8.3 译码算法 (358) 8.3.1 和积算法的基本概念 (358) 8.3.2 概率测度下LDPC码的和积译码算法 (360) 8.3.3 不同测度下的消息更新规则 (362) 8.4 MATLAB仿真实现 (364) 8.4.1 编码 (364) 8.4.2 译码 (364) 8.4.3 编译码联合仿真 (366) 8.4.4 MATLAB函数的使用 (367) 8.5 LDPC码在深空通信中的应用 (378) 8.5.1 编码 (382) 8.5.2 译码 (385) 8.5.3 仿真实现流程 (386) 8.5.4 仿真结果 (388) 第9章 信道仿真和误码率分析 (391) 9.1 二元对称信道 (391) 9.1.1 数学模型 (391) 9.1.2 MATLAB仿真 (392) 9.1.3 Simulink仿真 (393) 9.2 高斯加性白噪声信道 (394) 9.2.1 数学模型 (394) 9.2.2 MATLAB仿真 (395) 9.2.3 Simulink仿真 (397) 9.3 衰落信道 (399) 9.3.1 数学模型 (400) 9.3.2 MATLAB仿真 (401) 9.3.3 Simulink仿真 (423) 9.4 误码率分析 (426) 9.4.1 通用误码率计算函数 (426) 9.4.2 不同信道条件下误码率的计算 (431) 9.4.3 误码率分析工具 (435) 参考文献 (441)