LDPC译码:和积译码算法(SPA)、最小和算法(MSA)、分层译码算法(LBP)、动态信息更新策略IDS(含RBP、NW |
您所在的位置:网站首页 › SDR算法中MM算法全称 › LDPC译码:和积译码算法(SPA)、最小和算法(MSA)、分层译码算法(LBP)、动态信息更新策略IDS(含RBP、NW |
LDPC译码:和积译码算法(SPA)、最小和算法(MSA)、分层译码算法(LBP)、动态信息更新策略IDS(含RBP、NW-RBP、SVNF-RBP)的MATLAB实现
主要内容符号说明算法说明与代码实现和积译码算法(SPA)基本原理MATLAB代码实现SPA
分层译码算法(LBP)基本原理MATLAB代码实现LBP
IDS类算法单次迭代的终止条件及判决方法残差置信传播(RBP)算法内容RBP的贪婪性
NW-RBP (Node wise RBP)SVNF-RBP (Silent-Variable-Node-Free RBP)MATLAB代码实现
代码使用说明参考文献
主要内容
LDPC[1]码是一种接近香农极限的“好”码,自二十世纪九十年代被重发现以来,已获得越来越广泛的应用,成为诸多通信领域推荐使用的信道编码。近来,3GPP将其作为5G新空口eMMB应用上的数据传输编码方案。本文将主要介绍LDPC的一些主要译码方法并通过MATLAB实现,这里主要使用的译码方法为SPA([2] Sum-Product Algorithm和积译码算法)、LBP([3] Layered-Belief Propagation分层置信传播译码算法)以及性能更高的IDS(Information Dynamic Schdule)类译码算法如RBP([4] Residual Belief Propagation)、NW-RBP([5] Node Wise-RBP)、SVNF-RBP([6] Silent-Variable-Node-Free RBP)。 符号说明
LDPC码的概率域BP算法的变量节点和校验节点操作有大量乘法,这样计算量和复杂度都很高,如果将上述0和1的概率信息用对数似然比表示,就可以把乘法运算转换为加法运算,大大降低了运算量,此算法称为和积译码算法。步骤如下: 初始化 L v j → c i = C v j L_{v_{j} \rightarrow c_{i}}=C_{v_{j}} Lvj→ci=Cvj (1) 校验节点更新 m c i → v j = 2 × atanh ( ∏ v b ∈ N ( c i ) \ v j tanh ( L v b → c i 2 ) ) m_{c_{i} \rightarrow v_{j}}=2 \times \operatorname{atanh}\left(\prod_{v_{b} \in N\left(c_{i}\right) \backslash v_{j}} \tanh \left(\frac{L_{v_{b} \rightarrow c_{i}}}{2}\right)\right) mci→vj=2×atanh(∏vb∈N(ci)\vjtanh(2Lvb→ci)) (2) 变量节点更新 L v j → c i = ∑ c a ∈ N ( v j ) \ c i m c a → v j + C v j L_{v_{j} \rightarrow c_{i}}=\sum_{c_{a} \in N\left(v_{j}\right)\backslash c_{i}} m_{c_{a} \rightarrow v_{j}}+C_{v_{j}} Lvj→ci=∑ca∈N(vj)\cimca→vj+Cvj (3) 后验概率信息更新 L j = ∑ c a ∈ N ( v j ) m c a → v j + C v j L_{j}=\sum_{c_{a} \in N\left(v_{j}\right)} m_{c_{a} \rightarrow v_{j}}+C_{v_{j}} Lj=∑ca∈N(vj)mca→vj+Cvj (4) MATLAB代码实现SPA function Dec_out = LdpcDecode_SPA(in,H,MaxIter) %%% in为解调后的的对数似然比信息,为N维行向量 %%% H为校验矩阵,MaxIter为最大迭代次数 [M,N] = size(H); %% 初始化 V_n = in; %似然概率 V_mn = repmat(V_n,M,1); %m代表校验节点索引,n代表变量节点索引 V_mn(H == 0) = 0; U_mn = zeros(M,N); %% 译码 for i = 1:MaxIter % 校验节点更新 for m = 1:M Nm = find(H(m,:)==1); %校验节点m相邻的变量节点 for n = 1:length(Nm) aa = Nm; aa(n) = []; % MSA: U_mn(m,Nm(n)) = prod(sign(V_mn(m,aa)))*min(abs(V_mn(m,aa))); U_mn(m,Nm(n)) = 2*atanh(prod(tanh(V_mn(m,aa)/2))); end end %变量节点更新 for n = 1:N Mn = find(H(:,n)==1); %变量节点n相邻的校验节点 for m = 1:length(Mn) bb = Mn; bb(m) = []; V_mn(Mn(m),n) = in(n) + sum(U_mn(bb,n)); end V_n(n) = in(n) + sum(U_mn(Mn,n));%似然概率更新 end end %% 硬判决 decBits = zeros(1,N); decBits(V_n |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |