[Matlab]如何随机产生信息码元矩阵u

在毕设仿真中,为解决线性分组码中大规模码字生成的问题,避免穷举法,作者探讨了如何在2^k个码字中选出互不重复的N个码字。通过与师兄交流,提出两种解决方案:1) 生成不重复的十进制随机数,转换为二进制并补足矩阵长度;2) 使用randperm的变通方式。最终发现使用unique函数结合判定条件能简洁地实现目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为毕设仿真的需要,今天遇到了这个问题。将自己遭遇到的困难和解决的办法记录下来。

首先描述一下我需要解决的问题。

对于线性分组码,其全部码字的产生都是通过生成矩阵G矩阵得到,而c=u*G,故而如果需要产生全部的c,则需要全部的u。从初步思考来看只需将u矩阵进行穷举即可,但是对于(n,k)码中较大的k时——意味着有2^k个码字,这么做既不方便,也失去的仿真的意义。所以需要换一种思路产生u矩阵。


一开始我也没觉得这个是个问题,因为现在的计算机CPU的主频已经达到如此高的频率,仿真个这些代码应该不在话下,毕竟从算法分析上来讲只是O(n)的复杂度,但是我错误估计了形势——面对(512,256)的LDPC码的时候我瞬间明白自己摊上事儿了,摊上大事儿了——这个在我有生之年是不太可能跑出来u矩阵的,更不说和G矩阵相乘产生c码字了,当然LDPC码产生G是另一个麻烦的问题,但是这里在第一步就没办法进行了下去。因为2^256≈1.16*10^77,也就是说我的笔记本一刻不停地跑,也至少需要1.53*10^60年才能完成这个巨大的任务——那个时候或许宇宙都不存在了吧...

通过和师兄等交流后我才恍然明白这一类仿真只需要仿真一定数量点即可,并不需要全部的码字——一般选取的N=10000。于是目前面临的问题就变成了如何在2^k个码字中选取出互不重复的N个码字出来。

师兄给了一个比较简单的代码来解决这个问题:

u = (rand(1,576)>0.5)

再在外面套一层N圈的循环即可实现。


但是仔细一想,这个跟我的初衷有一定违背,毕竟这个有可能产生相同的u,因为不能保证在N次循环内产生的u矩阵不重复。为了算法的严谨和数据的准确,只能想其他的办法。

我想到的思路是:先生成0~2^k-1的十进制数,然后转为二进制数,取出每一位,再添上不足矩阵长度的零。

这里面有两个问题需要解决的是:生成不重复的十进制随机数、取出对应位并补足。后面的那个问题比较好解决,通过矩阵运算即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值