私は、sum-productデコードを使用するときに、BPSK AWGNチャネルでLDPCコードのパフォーマンスをシミュレートしようとしています。なぜこのMATLABスクリプトは実行に時間がかかりますか?
これについては、in the 34th page of this paperのアルゴリズムに従ったMATLABで関数を記述しました。しかし、私が大きな次元のパリティチェック行列(1012 x 1518の行列を使用する必要があります)を使って書いた関数を使用すると、プログラムはFOREVERを1回繰り返します(パフォーマンスをシミュレートしようとしています)このチャネルのコードを100k回以上反復して評価してください)。私が使用している行列Hは、が非常にで、低密度です(1列に2つしかありません)ので、スクリプトの実行速度が速くなると思います。
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'の値は?大部分の計算時間が費やされた場所を特定するためにあなたのコードをプロファイルしましたか? – excaza