由于二进制的LDPC算是基本完成(虽然只是普通的Mackay的生成H方法及BP译码算法),想着往GF(q)-LDPC方向继续学习。
如果仅仅使用的话matlab里有直接的函数,用hlep lu就可以查看了,像[L,U,P] = lu(A)可以直接调用LU算法。如下是自己的编写过程:
查阅文献,首先是编码方面,文献中提出LU分解编码方法可以保证编码复杂度与码长N成正比,减少了系统编码方法由于q进制而增加的大量复杂度,虽然改进LU方法还在学习,不过基本的LU算是实现了,如下:
function [L U] = LU_2(A) dim = size(A); n = dim(1); L = zeros(n,n); U = zeros(n,n); for i=1:n L(i,i)=1; end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)'); end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); end end
上面代码是按照Doolittle给的公式实现的,其中对于sum括号里的计算也可以写成如下,似乎更容易理解:
L(i,r)=(A(i,r)-L(i,1:r-1)*U(1:r-1,r))/U(r,r);
看出不同了吗?一个是.*,一个是*,正好这里复习下matlab矩阵乘法:
A = 1 2 3 1 B = 2 5 1 3 C = A*B 4 11 7 18 D = A.*B 2 10 3 3
第一种是普通矩阵相乘,按照行列来进行的;第二种是矩阵元素相乘~~
现在LU的问题就是那个改进的LU分解编码中PA=LU的P怎么得来...继续学习去...发现会的实在太少了...有会的或者做类似仿真的通知我下,我学习下,嘿嘿~~