我正在尝试使用和积解码时模拟BPSK AWGN通道上LDPC码的性能。
为此,我在MATLAB中编写了一个函数,该函数遵循in the 34th page of this paper描述的算法。但是,当我使用我用大尺寸奇偶校验矩阵编写的函数时(我需要使用1012 x 1518的矩阵),程序需要FOREVER进行一次迭代(我试图模拟性能)通过至少100k次迭代来获得良好估计的此通道中的代码。我正在使用的矩阵H是非常低密度(每列只有两个1),所以我希望脚本运行得更快。
我认为可能使用float
来表示只有0和1的矩阵可能是问题,但我不确定这是否意味着一个巨大的变化。另外,如果这些矩阵是布尔值,我不知道如何执行我在函数中使用的一些操作。
所以有人有任何想法吗?我将把我写的函数放在下面。
function y = sum_product(r, H, I_max)
[m , n] = size(H);
I = 0;
for i = 1:n
for j = 1:m
if H(j,i) == 1
M(j,i) = r(i);
else
M(j,i) = 0;
end
end
end
M = sparse(M);
E = M;
while 1
for j = 1:m
for i = 1:n
aux = 1;
if H(j,i) == 1
for l = 1:n
if l~=i & H(j,l) == 1
aux = tanh(M(j,l)/2)*aux;
end
end
E(j,i) = log(1+aux)-log(1-aux);
end
end
end
for i = 1:n
aux = 0;
for j = 1:m
if H(j,i) == 1
aux = aux + E(j,i);
end
end
L(i) = aux + r(i);
z(i) = L(i)<=0;
end
if I == I_max | mod((H*transpose(z)) , 2) == 0
break;
else
for i = 1:n
for j = 1:m
aux = 0;
if H(j,i) == 1
for l = 1:m
if l~=j & H(l,i) == 1
aux = aux + E(l,i);
end
end
M(j,i) = aux + r(i);
end
end
end
I = I + 1;
end
end
y = z;
end
答案 0 :(得分:2)
正如在其他答案中所述,矢量化通常会加快计算速度。这意味着不是为矩阵的每个元素多次运行相同的函数,而是只能为整个矩阵运行一次函数。如果您对循环和GridLayoutManager
语句更熟悉,可以考虑使用c ++等语言来达到所需的速度。所以这是一个矢量化形式;
int findFirstCompletelyVisibleItemPosition();
int findLastCompletelyVisibleItemPosition();
答案 1 :(得分:1)
问题是你probbaly不应该使用for
- 循环,嵌套循环甚至更少,因为Matlab是一种解释语言。为了加快速度,请尝试对操作进行矢量化,以利用MATLAB内置函数的速度。