dbeaver 设置编码_LDPC——编码实现(中)

7c8d730f88ebad50630fb5932de540ea.png

接上回。由于各种受限,本文少图,力争用最白话给大家讲清楚。

透过这么多公式啊什么的我们来大白话总结一下。首先编码的方法就是把待编码的序列和我们之前设计好的生成矩阵G的每一行的所有元素对应相乘再相加,得到的就是纠错码序列。

例如M位的待编码序列A[0]~A[M-1],对应的生成矩阵就有M列。设生成矩阵有N行。有简易的编程语言来表达为:

for i=0:N-1
  for j = 0:M-1
    C[i] = C[i] + A[j-1] * G[i,j]

这样我们就得到了N位的纠错码C[0]~C[N-1]。

看上去并不难,但是如果纯照这上面去写,一个8192位的待编码序列,768位纠错码的计算单元面积怕是已经爆炸。为了减小面积,我们采取QC-LDPC,生成矩阵就具备了循环结构。虽然推倒可能难了一丢丢,但是可以有效地复用核心计算部件。

QC-LDPC将整个生成矩阵G划分成一个一个小块,每个小块是一个小方阵,矩阵的大小称之为步长。每一个小方阵第二行是第一行右移一位,第三行是第二行右移一位,以此类推。而小矩阵的第一行是单位矩阵第一行右移得到的。所以,知道每个小矩阵第一行是单位矩阵右移几位得到的,我们也就知道了生成矩阵。基矩阵就是存储每个小矩阵第一行是单位矩阵右移几位得到的具体数字的矩阵。比如原来的生成矩阵是20*8的,我们划分时将步长设置为4,这样我们只需存储5*2个数。

如果就简化到这种程度我们就可以采用移位寄存器存储第一行,当乘完第一行之后向右移一位,此时寄存器中存储的数列就成矩阵的第二行了。以此类推。

每一行对于小矩阵的拆分就直接相加就可以,类似下面

1+1+1+1+1+1=(1+1)+(1+1)+(1+1)

但是这种省了不少地方,但计算时间就太长了。为了减少它的计算时间,我们采取并行化。同样的,比如设置为并行度为8,第一行是1 0 0 ……00;例如进来的第一位数据在第一行它要乘对应的是第七位,在进行第二行计算的时候,由于第二行是第一行的第6位。我们直接吧第一次他乘第一行的第6位的数值也存起来。这样下一行的数据就不用在计算一次了。按这个逻辑我们还是来看论文中官方的表达

50df66f864b54968609df6741f5d3285.png

cf20fb69f8edceb56d915cbe827fef89.png

这样我想大家就明白了为什么编码电路要设计成这个样子。

看到这里的读者一定是真的需求者,同行或者是前辈。容我向各位道个歉,这段时间答辩结题等事情非常多,险些这周的更新就鸽了。这篇文章也是使用其他电脑编写,所以图也不好添加,内容都是凭着当时做的印象写的。如果有哪些地方表达不合适,或者是错了,请您不吝赐教私聊我,万分感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值