📄 junjima.txt
字号:
The Sky in My Eyes
copy Bookmark http://blog.c114.net/?251806
博客 相册 好友 论坛 留言 空间管理 您的位置: 中国通信人博客 ? The Sky in My Eyes ? 日志
希望与通信界朋友分享技术的快乐!
卷积码编译码的实现2008-11-09 11:51:16 [ 上一篇 | 下一篇 ] / 精华(3)
通信系统 / 查看( 96 ) / 评论( 0 ) / 评分( 0 / 0 )
前段时间在学校做通信系统课程设计,选了信道卷积码编译码的课题,但在网上搜遍了也没找到它的MatLab实现,没办法,我只好在图书馆查资料自己解决了。这就是我课程设计论文的论证部分:
本次课程设计主要讨论卷积编译码过程,编码程序在lk_encode.m文件中,编码函数共有三个输入参数:待编码信息序列、状态转移矩阵和编码信息位数,输出为编码序列。使用(3,1,3)结构作为卷积编码器,以输入[0 1 1 0 1 0 0]信息序列为例的实现思路是:
<!--[if !supportLists]-->1) 给定输入序列input,信息位数k,3×3的状态转移矩阵G,卷积码位数n=7,<!--[endif]-->
<!--[if !supportLists]-->2) 计算编码器结构的约束长度(约束长度=生成矩阵大小/k);若有多个输入,约束长度应是一个输入的编码移存器个数<!--[endif]-->
<!--[if !supportLists]-->3) 计算一个信息位的输出位数num=L<!--[endif]-->
<!--[if !supportLists]-->4) 输入序列补零生成的序列uz,只需要前后补两个零即可将移存器清零,第三个开始为数据位,在原序列后补2个0使ux输出为0 0 0<!--[endif]-->
<!--[if !supportLists]-->5) 利用for循环,循环8次输出ux,ux即为数据在3位移存器内的所有时刻的取值,共计21位(1位编码3位)+6位(补的2位0编码成6位)<!--[endif]-->
<!--[if !supportLists]-->6) 对输入序列ux改变矩阵大小后的结果:变换为3×9矩阵,矩阵列来自ux[]《===》将数据流在移存器移动情况仿真出来<!--[endif]-->
0 1 1 0 1 0 0 0 0
0 0 1 1 0 1 0 0 0
0 0 0 1 1 0 1 0 0
<!--[if !supportLists]-->7) 最后用以上矩阵乘以状态转移矩阵,对结果取模二运算输出27位编码结果<!--[endif]-->
译码程序在lk_decode.m文件中,译码过程使用维特比算法,译码函数共有三个输入参数:待译码序列、状态转移矩阵、基于编码器结构的信息位数,输出为原信息序列。仍以[0 1 1 0 1 0 0]信息序列为例讨论译码实现思路:
<!--[if !supportLists]-->1) 根据维特比算法现将编码输出序列划分为7组子序列,每组长为3位<!--[endif]-->
<!--[if !supportLists]-->2) 输入编码输出序列、编码信息位数、约束长度、信息总长度、状态转移矩阵、状态数等参数<!--[endif]-->
<!--[if !supportLists]-->3) 利用两层嵌套for循环找到存储状态和幸存路径的矩阵,外层循环四种状态00、01、10、11,内层循环0、1两种可能取值。<!--[endif]-->
<!--[if !supportLists]-->4) 内层循环需要计算可能的下一状态,并记录之前走过的路径,所以定义mem_cont存储之前路径的二进制输入及其对应状态,next_state存储下一状态十进制值<!--[endif]-->
<!--[if !supportLists]-->5) 之后仿真逐位输入、状态逐次后移的过程,并将得到的next_state赋值到nextstate矩阵<!--[endif]-->
<!--[if !supportLists]-->6) 将找到的树杈支路输出转为十进制数放入output矩阵,为比较汉明距离做准备;<!--[endif]-->
output矩阵构成:第一个状态所有可能路径对应第一行,第二个状态的所有可能路径对应第二行......
<!--[if !supportLists]-->7) 两层循环结束后,就能找出所有路径的下一状态矩阵以及记录所有可能路径的一个矩阵。<!--[endif]-->
<!--[if !supportLists]-->8) 接下来寻找译码的幸存路径,将译码分为中间信道译码和最终信道译码两部分<!--[endif]-->
<!--[if !supportLists]-->9) 前1~7级深度为中间信道译码过程,嵌套了4级for循环的第一级为段的循环,第二级为每一段的状态循环,第三级为输入是0或1的循环,第四级是计算该状态时对应输入0或1的路径汉明距离的叠加<!--[endif]-->
10)之后的8~9级为最终信道译码,已知该段对应输入为全0,故可省去第三级的0、1输入循环,其余与上一步相同
11)以上步骤可通过汉明距离的比较找到幸存路径,并将它存在矩阵里;根据维特比算法,需要从最后一级状态沿幸存路径回溯到起始全零状态,则可首先将幸存路径的值用for循环赋值到状态序列里,也即由段得到状态序列,再由状态序列从input矩阵中得到该段的输出
12)for循环7次按状态序列的行列规定将数据从input矩阵里逐位取出(因状态序列是十进制表示的,取出的每位也是十进制的),将其化为二进制后放入输出矩阵作为译码输出。
程序实现维特比译码实际是建立在网格图基础上的,网格图共有4行10列个点,每一行代表一个状态,前一列上的一个点对应后一列的两个点(代表下一状态的两种取值0或1),本次课程设计只实现了维特比算法的硬判决译码,即比较由最佳路径得到的序列与待译码序列的汉明距离。
<!--[if !vml]--><!--[endif]-->
导入论坛 收藏 分享给好友 管理 举报
TAG: 卷积 编译码
[ 查看全部评论 ] -5 -3 -1 - +1 +3 +5
评分:0
我来说两句
显示全部
内容
提交评论
haiying7
羽扇纶巾,谈笑间、樯橹灰飞烟灭
用户菜单给我留言 加入好友 发短消息 我的介绍 论坛资料 空间管理 我的栏目通信系统
操作系统
游戏天下
对自己狠一点
标题搜索
数据统计访问量: 392
日志数: 5
图片数: 1
建立时间: 2008-11-08
更新时间: 2008-12-12
RSS订阅
清空Cookie - 联系我们 - 中国通信人博客 - 交流论坛 - 空间列表 - 站点存档 - 升级自己的空间
Copyright ? 1999-2008 CFriend All Right Reserved
事务处理联系人: 021-29715858 副管 021-29715959 管理员
沪ICP备06034512号
Last update: 2008-12-27 20:30:51
Open Toolbar
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -