数字通信系统中卷积码的方针实现软件课程设计报告.doc_第1页
数字通信系统中卷积码的方针实现软件课程设计报告.doc_第2页
数字通信系统中卷积码的方针实现软件课程设计报告.doc_第3页
数字通信系统中卷积码的方针实现软件课程设计报告.doc_第4页
数字通信系统中卷积码的方针实现软件课程设计报告.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中南民族大学 软件课程设计报告 学院 级 专业 题目 数字通信系统中卷积码的仿真实现 学生 学号 指导教师 目 录 数字通信系统中卷积码的仿真实现 1 1 引言 2 2 卷积码编码及译码原理 2 2 1 卷积码解析表示法 2 2 2 卷积码图形表示法 4 2 3 卷积码译码原理 6 3 MATLAB 卷积码仿真 7 3 1 传输信道仿真 8 3 2 改变卷积码参数仿真 9 3 2 1 不同回朔长度对卷积码性能的影响 9 3 2 2 不同码率对卷积码性能影响 10 3 2 3 不同约束长度对卷积码性能影响 11 4 MATLAB 译码过程仿真 12 4 1 硬件判决译码 12 4 1 软件判决译码 15 5 实验心得体会 18 参考文献 18 数字通信系统中卷积码的仿真实现设计 摘要 本文主要实现了用 matlab 实现卷积码的编码过程 Viterbi 译码程序 用软件仿真 了其实现过程 并且计算了器误码率 对比在没有卷积码的情况下实现相应的通信 的时候误码率 得出了卷积码的优良抗噪性能 关键字 matlab 卷积码 Viterbi 译码 1 引言 卷积码最早于 1955 年由 Elias 提出 稍后 1957 年 Wozencraft 提出了一种有效地译 实用的门限译码方法 使得卷积码开始走向实用化 而后 1967 年 Viterbi 提出了最大似 然译码算法 它对存储级数较小的卷积码很容易实现 被称作 Viterbi 译码算法 广泛的应 用于现代通信中 2卷积码编码及译码原理 卷积码是一种性能优越的信道编码 它的编码器和解码器都比较易于实现 同时还具 有较强的纠错能力 这使得它的使用越来越广泛 卷积码一般表示为 n k K 的形式 即将 k 各信息比特编码为 n 个比特的码组 K 为编码约束长度 说明编码过程中相互约束的码 段个数 卷积码编码后的 n 各码元不经与当前组的 k 个信息比特有关 还与前 K 1 个输 入组的信息比特有关 编码过程中相互关联的码元有 K n 个 R k n 是编码效率 编码效 率和约束长度是衡量卷积码的两个重要参数 典型的卷积码一般选 n k 较小 但 K 值可取 较大 10 以获得简单而高性能的卷积码 卷积码的编码描述方式有很多种 冲激响应描述法 生成矩阵描述法 多项式乘积描 述 法 状态图描述 树图描述 网格图描述等 2 1 1 卷积码解析表示法 卷积码的解析表示发大致可以分为离散卷积法 生成矩阵法 码多项式法 下面以离 散 卷积为例进行说明 卷积码的编码器一般比较简单 为一个具有 k 个输入端 n 个输出端 m 级移位寄存 器 的有限状态有记忆系统 下图所示为 2 1 7 卷积码的编码器 若输入序列为 u u0u1u2u3 则对应两个码字序列则对应两个码字序列 c0 c1 c2 c3 和 c0 c1 c2 c3 相应的编码方程可写为 c 符号表示卷积运算 表示编码器的两个冲激响应 即编码器的输出 可以由输入序列和编码器的两个冲击响应卷积而得到 故称为卷积码 这里的冲激响 应指 当输入为 1 0 0 0 0 序列时 所观察到的两个输出序列值 由于上图 K 值为 7 故冲激响应至多可持续到第 7 位 可写为 1 1 1 1 0 0 1 1 0 1 1 0 1 1 然后将两个输出端的码字序列合并为一个码字序列为 c0 c0 c1 c1 c2 c2 若输入信息序列为 1 1 0 1 则 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 c 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1 下图所示为 2 1 3 卷积码的编码器 也是本次课程设计所研究的卷积码编码器 由于其生成冲激响应分别为 1 1 1 和 1 0 1 故被称为 7 5 码 2 1 2 卷积码图形表示法 除了用解析法描述卷积码的编码外 还可以使用比较形象的图形法来表示卷积码 比较常用的有状态图法 网格图法和树图法 下面简介状态图法和网格图法 状态图法 由于卷积码编码器在下一时刻的输出取决于编码器的当前状态和下一时刻的输入 而 编码器当前状态取决于编码器当前各移位寄存器的存储内容 称编码器当前各移位寄存器 存储内容 0 或 为编码器在该时刻的状态 此状态代表记忆以前的输入信息 随着信息序 列的不断输入 编码器不断从一个状态转移到另外一个状态 并且输出相应的编码序列 编码器的总可能状态数为 2mk 个 对 7 5 码的编码器来说 n 2 k 1 K 3 m 2 共有四 个可能状态 其状态图如下 图中四个方块表示状态 状态间的连线与箭头表示转移方向 连线上的数字表示是状 态发生转移的到来比特 斜杠后的数字由一个状态到另一个状态转移时的输出码字 如当 前状态为 11 输入信息为 0 则转移到 01 状态并输出 01 码字 若输入信息为 1 则依 然为 11 状态并输出 10 码字 网格图法 网格图可以描述卷积码的状态随时间推移而转移的情况 该图纵坐标表示所有状态 横 坐标表示时间 网格图在卷积码的概率译码 特别是 Viterbi 译码中非常重要 它综 合了状 态图法直观简单和树图法时序关系清晰的特点 如下图 图中实线表示输入 0 时所走分支 虚线表示输入 1 时所走分支 编码时只需从起始状 态开始依次选择路线并读出输出即可 假设从 a 状态开始 输入为 1 0 1 1 则可由图 中读出输出为 11 10 10 01 2 2 卷积码译码原理 卷积码的译码方式主要有三种 1 1963 年 Massey 提出的门限译码 这是一种基于码代数结构的代数译码 类似于 分组码中的大数逻辑译码 2 1963 年有 Fano 改进的序列译码 这是基于码的树状图结构的一种准最佳概率译码 3 1967 年 Viterbi 提出的 Viterbi 算法 基于码的网格图基础上的最大似然译码算 法 是一种最佳概率译码 其中 代数译码 利用编码本身的代数结构进行译码 不考虑信道本身的统计特性 该方法的硬件实现简单 但性能较差 其中具有典型意义的是门限译码 另一类是概率译 码 这种译码通常建立在最大似然准则的基础上 由于计算是用到了信道的统计特性 因而 提高了译码性能 但这种性能的提高是以增加硬件的复杂度为代价的 常用的概率译码方 法有维特比译码和序列译码 维特比译码具有最佳性能 但硬件实现复杂 门限译码性能 最差 但硬件简单 序列译码在性能和硬件方面介于维特比译码和门限译码之间 2 2 1 Viterbi 译码 卷积码概率译码的基本思路是 以接收码流为基础 逐个计算它与其他所有可能出现的 连续的网格图路径的距离 选出其中可能性最大的一条作为译码估值输出 概率最大在大 多数场合可解释为距离最小 这种最小距离译码体现的正是最大似然的准则 卷积码的最 大似然译码与分组码的最大似然译码在原理上是一样的 但实现方法上略有不同 主要区 别在于 分组码是孤立地求解单个码组的相似度 而卷积码是求码字序列之间的相似度 基 于网格图搜索的译码是实现最大似然判决的重要方法和途径 用格图描述时 由于路径的 汇聚消除了树状图中的多余度 译码过程中只需考虑整个路径集合中那些使似然函数最大 的路径 如果在某一点上发现某条路径已不可能获得最大对数似然函数 就放弃这条路径 然后在剩下的 幸存 路径中重新选择路径 这样一直进行到最后第 L 级 L 为发送序列的 长度 由于这种方法较早地丢弃了那些不可能的路径 从而减轻了译码的工作量 Viterbi 译码正是基于这种想法 对于 n k K 卷积码 其网格图中共 2kL 种状态 由网格图的前 K 1 条连续支路构成的路径互不相交 即最初 2k 1 条路径各不相同 当接 收到第 K 条支路时 每条路径都有 2 条支路延伸到第 K 级上 而第 K 级上的每两条支路又 都汇聚在一个节点上 在 Viterbi 译码算法中 把汇聚在每个节点上的两条路径的对数似 然函数累加值进行比较 然后把具有较大对数似然函数累加值的路径保存下来 而丢弃另 一条路径 经挑选后第 K 级只留下 2K 条幸存路径 选出的路径同它们的对数似然函数的累 加值将一起被存储起来 由于每个节点引出两条支路 因此以后各级中路径的延伸都增大 一倍 但比较它们的似然函数累加值后 丢弃一半 结果留存下来的路径总数保持常数 由此可见 上述译码过程中的基本操作是 加 比 选 即每级求出对数似然函数的累加 值 然后两两比较后作出选择 有时会出现两条路径的对数似然函数累加值相等的情形 在这种情况下可以任意选择其中一条作为 幸存 路径 卷积码的编码器从全零状态出发 最后又回到全零状态时所输出的码序列 称为结尾 卷积码 因此 当序列发送完毕后 要在网格图的终结处加上 K 1 个己知的信息作为结 束信息 在结束信息到来时 由于每一状态中只有与已知发送信息相符的那条支路被延伸 因而在每级比较后 幸存路径减少一半 因此 在接收到 K 1 个己知信息后 在整个网 格图中就只有唯一的一条幸存路径保留下来 这就是译码所得的路径 也就是说 在己知 接收到的序列的情况下 这条译码路径和发送序列是最相似的 3 MATLAB 仿真 在本次课程设计中 我们对整个通信过程进行了仿真 其过程如下 下面将分别对每一部分进行仿真 3 1 卷积码编码仿真 在程序设计中 我们没有采用 MATLAB 自带的编码函数而是采用了自己 的编码函数 codec 其参数 m 为输入信息序列 g1 g2 为两个输出端口的冲激 响应序列 function cod codec m g1 g2 g1 g2 为两输出端口的冲激响应序列 m1 conv m g1 m2 conv m g2 l length m1 for i 1 l cod 2 i 1 rem m1 i 2 cod 2 i rem m2 i 2 end 下为试运行编码结果 g1 1 1 1 g2 1 0 1 clear all g1 1 1 1 g2 1 0 1 msg 1 1 0 1 cod codec msg g1 g2 输出为 cod 110101001011 符合预期结果 3 2 信道传输过程仿真 为了方便起见 我们采用了 BPSK 调制 为了简化设计 我们紧紧采用了基带传输 没 有采用调频方式的 BPSK 并测试了误码率 程序设计代码如下 x randint 1 3000 for i 1 3000 if x i 0 x i 1 else x i 1 end end x y awgn x 5 n Wn buttord Wp Ws Rp Rs for i 1 3000 if y i 0 y i 1 else y i 1 end end y tt sum abs x y 2 我们随机产生 3000 个数据 然后通过 BPSK 调制后 在通道里面叫上高斯白噪声 我 们统计了除了传输中出错的个数 列表如下 0 2 4 6 8 10 12 14 16 18 1234567891011 系列1 3 3 改变卷积码参数仿真以及结论 1 不同回溯长度对卷积码性能的影响 下面将以 2 1 7 卷积码来建立模块仿真 将译码模块中的 Traceback depth 分别设置为 20 35 45 并在一个图中画出这三种方式下的误码性能曲线得到下 图 4 8 从上到下的三条曲线分别是 Traceback depth 为 20 35 45 可以看出 回 溯长度是在 Viterbi 译码过程中一个很重要的参数 他决定了译码延迟 随着他的不断 变化 误码性能也随误比特率曲线可以清楚地看到 当回溯长度一定时 随着信道噪声的 逐渐减小 系统的误比特率逐渐降低 当回溯长度逐渐增加 系统的误比特率随之逐渐降 低 但是当回溯程度 增加到 5 N 时 N 为编码的约束长度 误比特率数值趋 于稳定 因此 在确定回溯长度时既要考虑到随着 的增加误比特率随之降低的趋势 也要考虑到译码延迟会变大 在选取回溯长度时 通常取 5 N 2 3 图 4 8 不同回溯长度对误码性能的影响 4 分析不同回溯长度对卷积码误码性能的影响时用到的程序如下 5 x 10 5 6 y x 7 for i 1 length x 8 SNR x i 9 sim yima 10 y i mean BitErrorRate 11 end 12 semilogy x y 13 hold on 14 for i 1 length x 15 SNR x i 16 sim yima1 17 y i mean BitErrorRate 18 end 19 semilogy x y 20 hold on 21 for i 1 length x 22 SNR x i 23 sim yima2 24 y i mean BitErrorRate 25 end 26 semilogy x y 2 不同码率对卷积码误码性能的响 下面图 4 9 是通过改变卷积码的码率为 1 2 和 1 3 而得到的二条对比曲线 上面的一 条曲线是码率为 1 2 下面的是码率为 1 3 卷积码的码率R k n 他是卷积码的一个重 要参数 当改变卷积码的码率时 系统的误码性能也将随之发生变化 从图 4 9 中的误比特 率曲线可以看出 当码率一定时 随着信道噪声的逐渐减小 系统的误比特率也逐渐减小 当 改变系统码率时 随着卷积码码率的逐渐提高 系统的误比特率也呈现出增大的趋势 也就是 说码率越低 系统的误比特率就越小 误码性能就越好 图 4 9 卷积码不同码率对误码性能的影响 分析不同码率对卷积码误码性能的影响时用到的程序如下 x 0 5 y x for i 1 length x SNR x i sim yima1 y i mean BitErrorRate end semilogy x y hold on for i 1 length x SNR x i sim yima2 y i mean BitErrorRate end semilogy x y 3 不同约束长度对卷积码的误码性能影响 如下图 4 10 对于码率一定的卷积码 当约束长度 N 发生变化时 系统的误码性能也会 随之发生变化 我们以码率 R 1 2 的 2 1 3 和 2 1 7 卷积码为例展开分析 上面的曲线是 2 1 3 卷积码的误码性能曲线 下面的曲线是 2 1 7 卷积码的误 码性能曲线 从图 4 4 中的误比特率曲线可以清楚地看到 随着约束长度的逐渐增加 系统 的误比特率明显降低 所以说当码率一定时 增加约束长度可以降低系统的误比特率 但是 随着约束长度的增加 译码设备的复杂性也会随之增加 所以对于码率为 1 2 的卷积码 我们在选取约束长度时一般为 3 9 图 4 10 不同约束长度对卷积码误码性能的影响 分析不同约束长度对卷积码误码性能影响用到的程序如下 x 0 5 y x for i 1 length x SNR x i sim yima y i mean BitErrorRate end semilogy x y hold on for i 1 length x SNR x i sim yima1 y i mean BitErrorRate end semilogy x y 通过上面从 1 回溯长度 2 码率 3 约束长度这三个卷积码的重要参数的变 化后对译码性能的分析 我们得到在卷积码的编码 译码过程中有很多条件是不可能 同时满足的 所以我们要根据具体情况来选择合适的参数 4 译码过程仿真 维特比译码可分为软判决和硬判决两种 下面我们对其分别进行仿真研究 4 1 硬判决译码 硬判决译码即比较汉明距作为累计度量 故直接将接收序列转为 0 1 序列即可 此时的 判决代码为 for j 1 length recv if recv j 0 recv j 1 else recv j 0 end end 相应的译码程序为 function dec Hviterbi cod leth length cod 2 nextstate 0 2 0 2 1 3 1 3 储存下一个到达状态信息 outputs 0 3 3 0 1 2 2 1 储存状态转移时的输出信息 suropt zeros 4 leth 2 使用 2 维数组保存幸存路径信息 suroptem suropt current 0 0 0 0 保存到达当前路径的累计汉明距值 current 1 HMdist 0 0 0 0 cod 1 2 3 4 初始化前两步的码重度量信息 current 2 HMdist 1 1 0 1 cod 1 2 3 4 current 3 HMdist 0 0 1 1 cod 1 2 3 4 current 4 HMdist 1 1 1 0 cod 1 2 3 4 suropt 1 1 2 0 0 前两步的输出信息 suropt 2 1 2 1 0 suropt 3 1 2 0 1 suropt 4 1 2 1 1 currenttem 0 0 0 0 ls 1 0 2 0 3 0 4 0 1 1 2 1 3 1 4 1 保存能到达当前状态的前两个状态 for i 3 leth 2 开始译码 for x 1 4 c HMdist deci2bin outputs ls x 2 1 1 ls x 2 1 2 1 2 cod i 2 1 i 2 有两个状态能转移到当前状态 计算其中一个转移过来时的输出与当 前接收码的汉明距 d HMdist deci2bin outputs ls x 2 1 ls x 2 2 1 2 cod i 2 1 i 2 计算另外一个状态转移过来时的输出与当前接收码的汉明距 if current ls x 2 1 1 c current ls x 2 1 d 比较找出累计 码重较小的一个 currentem x current ls x 2 1 1 c suroptem x suropt ls x 2 1 1 suroptem x i ls x 2 1 2 else currentem x current ls x 2 1 d suroptem x suropt ls x 2 1 suroptem x i ls x 2 2 end end current currentem suropt suroptem end a 1 9999 for s 1 4 找出累计度量最小的路径 即最佳路径 if current s 0 sigma sqrt 5 10 w 20 cod codec msg g1 g2 bpsk cod 2 1 noise randn 1 length bpsk recv bpsk 3 sigma noise de Sviterbi recv 3 即不判决而将直接将接收电平输入 Viterbi 软判决译码器 量化程序如下 function o quantization s l o 0 if s 1 o 2 l elseif s1 2 l 1 i 1 2 l o o 1 end end if s 0 o o end end o o 2 l 2 l 1 l 为量化比特数 s 为输入电平序列 程序将输入电平均匀量化为 0 1 之间的一级数 一 共 2 级电平 软判决代码如下 function dec Sviterbi recv l leth length recv 2 for i 1 length recv qr i quantization recv i l end nextstate 0 2 0 2 1 3 1 3 outputs 0 3 3 0 1 2 2 1 suropt zeros 4 leth 2 suroptem suropt current 0 0 0 0 current 1 EUdist 0 0 0 0 qr 1 2 3 4 current 2 EUdist 1 1 0 1 qr 1 2 3 4 current 3 EUdist 0 0 1 1 qr 1 2 3 4 current 4 EUdist 1 1 1 0 qr 1 2 3 4 suropt 1 1 2 0 0 suropt 2 1 2 1 0 suropt 3 1 2 0 1 suropt 4 1 2 1 1 currenttem 0 0 0 0 ls 1 0 0 2 0 0 3 0 0 4 0 0 1 0 1 2 0 1 3 0 1 4 0 1 for i 3 leth 2 for x 1 4 c EUdist deci2bin outputs ls x 2 1 1 ls x 2 1 3 1 2 qr i 2 1 i 2 d EUdist deci2bin outputs ls x 2 1 ls x 2 3 1 2 qr i 2 1 i 2 if current ls x 2 1 1 c current ls x 2 1 d currentem x current ls x 2 1 1 c suroptem x suropt ls x 2 1 1 suroptem x i ls x 2 1 3 else currentem x current ls x 2 1 d suroptem x suropt ls x 2 1 suroptem x i ls x 2 3 end end current currentem suropt suroptem end a 1 9999 for s 1 4 if current s 0 每次 96 比特信息 sigma sqrt 5 10 w 20 cod codec msg g1 g2 bpsk cod 2 1 noise randn 1 length bpsk recv bpsk 3 sigma noise

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论