【发布时间】:2016-12-24 22:02:06
【问题描述】:
我正在尝试在使用 sum-product 解码时在 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
【问题讨论】:
-
什么版本的 MATLAB?重现性能问题的
r、H和I_max的值是多少?你有没有profiled your code 确定大部分计算时间都花在了哪里?
标签: matlab performance optimization