信道编码——卷积码Matlab编译码实现与性能分析

目录

第一篇博客感言

卷积码编译码原理

Matlab源码和运行结果

源码

结果

第一部分

第二部分

第三部分

待探究的问题


第一篇博客感言

“种一棵树最好的时间是十年前,其次是现在。”

从大二下进入通信专业起,就计划着要记录下这个领域的学习历程,并且随着做过的作业、课设、竞赛、项目等越来越多,想要把成果写下来的心情就越发强烈。原因有三:

一是保存,毕竟放我电脑上哪天没内存了就可能把那些资料删掉了很可惜;

二是开源,大二时和同学聊天,他说“通信领域开源很糟糕,大家各干各的”,于是不禁想起做项目时搜一个PM解调找不到一个可供参考的例子,那一刻起就想着至少把我的东西开源出去,并且有机会的话也会邀请同行业的人与我一起开源,为通信人提供微小的帮助;

三是敬畏,这也是最关键的因素吧,大三前很贪玩,觉得玩游戏能玩一天,学习学不进去一点,后来又实在觉得玩游戏没什么意思,还是技术有吸引力,想一门心思把技术做好,敬畏它就想把它画下来,裱起来,瞻仰瞻仰。

现在已经大三下了,虽然说从有记录的想法起到现在已经一年了,但也算是时机终于成熟了吧。最近想透了一些东西,决定深耕于通信领域;积累的东西也有一些了,是骡子是马可以拿出来溜溜了。

第一篇博客就先写最近刚做的编码课的课程设计,后面再慢慢更新之前的学习内容,没有特殊情况争取一周更一篇吧。

与诸君共勉。


卷积码编译码原理

原理部分网络上都能查到,此处不再赘述,这里放一点我参考的资料。

e13cc93bf97d4358a53f90d9e2a7339b.png

017d9ca8534b46fc92dc24b792ef2a10.png

e502d69e4c764bcc9cabb9e9151ffda0.png

bb85317dff524c6bab05108bcc655266.png


Matlab源码和运行结果

源码

作为学生党,超高的会员费让我一直备受百度网盘限速苦恼,所以我的资源都会上传到蓝奏云,希望蓝奏云不要因为没收益倒闭了......

https://wwb.lanzouv.com/iOzwx22cu5eb
密码:eefu

结果

代码实现总共分为三个部分:

第一部分

detailed部分是归零卷积码具体的编译码实现,但是只能编写形式为(n,1,N)的卷积码。这部分代码几乎全部来自于虎慕的文章,感谢大佬开源,有兴趣的朋友可以查看下面这篇博客。《实验七-卷积编码的MATLAB实现》icon-default.png?t=N7T8https://blog.csdn.net/weixin_46258766/article/details/119060965?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171712790016800186513830%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=171712790016800186513830&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-119060965-null-null.142%5Ev100%5Epc_search_result_base5&utm_term=213%E5%8D%B7%E7%A7%AF%E7%A0%81%E5%AE%9E%E7%8E%B0matlab&spm=1018.2226.3001.41870cd5ba8dff554034b2e1cf6fe9582b1a.png

运行main函数结果如下:

第二部分

diff_channel&softhard_decision是通过三种不同信道的不归零卷积码软判决、硬判决、理论、仿真性能比较,这部分使用的是Matlab的自带函数,可以任意调整各种形式卷积码。至于为什么最终都要经过AWGN信道,这是因为瑞利衰落和莱斯衰落都是一种多径的衰弱,并未考虑到噪声影响,而实际上噪声在任何信道中都会出现。

只经过AWGN信道(温和信道)的结果如下,可以看到软判决解码性能远好于硬判决性能。

经过瑞利衰落和AWGN信道(适用于传统无线信道和水声信道等)的结果如下。

经过莱斯衰落和AWGN信道(同样适用于传统无线信道和水声信道)的结果如下,值得注意的是莱斯衰落就是主信号和多径信号的叠加,而瑞利衰落仅有多径信号部分,并且莱斯衰落无法计算出理论曲线。

第三部分

diff_codetype是不同码率k/n的不归零卷积码通过同一AWGN信道的性能比较,可以看到码率越低性能是越好的,不过这意味着系统的开销也是更大的,这是很常见的要资源还是要准确率的问题。


待探究的问题

1、Matlab自带的函数convenc是不归零卷积码,也就是说不等待数据全部移出寄存器即停止编码。这与归零卷积码对比,在更复杂的编码时是否会有更低的性能,这有待考究;

2、自编函数实现k≠1,也就是每次输入比特大于1的卷积码实现;


欢迎交流讨论。

  • 38
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
卷积码是在信息序列通过有限状态移位寄存器的过程中产生的。通常,移存器包含N级(每级A比特),并对应有基于生成多项式的m个线性代数方程,输入数据每次以A位(比特)移入移位寄存器,在此同时有n位(比特)数据作为己码序列输出,码效率为A/n。参数N被称作约束长度,它指明了当前的输出数据与多少输入数据有关。它决定了码的复杂度。 译码器的功能就是,运用一种可以将错误的发生减小到最低程度的规则或方法,从已码的码字中解出原始信息。在信息序列和码序列之间有一对一的关系。此外,任何信息序列和码序列将与网格图中的唯一一条路径相联系。因而,卷积译码器的工作就是找到网格图中的这一条路径。 Viterbi算法可被描述如下; 把在时刻i,状态 所对应的网格图节点记作 ,每个网相节点被分配一个值 。节点值按如下方式计算: (1)设 , 。 (2)在时刻i,对于进入每个节点的所有路径计算其不完全路径的长度。 (3)令 为在i时刻,到达与状态 。相对应的节点 的最小不完全路径长度。通过在前一节点随机选择一条路径就可产生新的结果。非存留支胳将从网格图中删除。以这种方式,可以从 。处生成一组最小路径。 (4)当L表示输入码段的数目,其中每段为k比特,m为码器中的最大穆存器的长度,如果 ,那么令 ,返回第二步。 一旦计算出所有节点值,则从 时刻,状态 。开始,沿网格图中的存留支路反向追寻即可。这样被定义的支路与解码输出将是一一对应的。关于不完全路径长度,判决解码将采用Hamming距离,而软判决解码将采用Euclidean距离。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值