1.軟體版本
MATLAB2021a
2.本算法理論知識
在此基礎上做改進:
本文改進方案如下所示:
原論文中,第一個量化公式,的範圍是由一個統計範圍得到的,但是在實際中,根據信道的不同,可能存在多種可能,這裡,我們的考慮的方案是自适應的調整Ymax和Ymin
根據信道的大概估計結果對Ymax和Ymin進行調整,
方案如下所示:
的取值由信道品質決定。這裡設定的調整量為:
k1為0~1之間的值。
這種改進方案的思路是,當噪聲越大的時候,接收到信号的幅度波動範圍也就越大,是以,其置信區間并不是一個固定的範圍。
對于第二個量化公式,
這部分,做如下的改進。
然後MS裡面做了下改進,主要是結合了BP的一些思想,
因為論文上的方法,基本以及是MS可以達到的極限了,這裡将此基礎上, 改進量化,并結合部分BP的思路,進一步提升MS性能。
先看MS具體如下:
最小和方法如下:
然後基于MS做了改進的。
3.部分核心代碼
function vHat = func_Dec(rx,H,N0,itermax,Theta,delta,WB)
[M N] = size(H);
Lci0 = (-2*rx./N0)';
Lrji = zeros(M, N);
Phibetaji = zeros(M, N);
%非均勻量化
%非均勻量化
if N0 <= 0.6
Ymax = 4+N0;%自适應步長
Ymin = -4-N0;
else
Ymax = 1+N0;%自适應步長
Ymin = -1-N0;
end
for i=1:length(Lci0)
Lci(i) = sign(Lci0(i))*(abs(Lci0(i))*(2^WB-1)/(2*Ymax) + 0.5)*(2*Ymax/(2^WB-1));
end
Lens = 0.1/N0;
Lqji = H.*repmat(Lci, M, 1);
[r, c] = find(H);
checksum = ones(1, M);
deltas = eps;
for n = 1:itermax
success = nnz(checksum);
if nnz(checksum)~= 0
nb_iter = n;
alphaji = sign(Lqji);
betaji = abs(Lqji);
for l = 1:length(r)
Phibetaji(r(l), c(l)) = log((exp(betaji(r(l), c(l))) + 1) / (exp(betaji(r(l), c(l))) - 1));
end
for j = 1:M
c1 = find(H(j, :));
for k = 1:length(c1)
sumOfPhibetaji = 0;
prodOfalphaji = 1;
sumOfPhibetaji = sum(Phibetaji(j, c1)) - Phibetaji(j, c1(k));
minOfbetaij = log((exp(sumOfPhibetaji-deltas) + 1)/(exp(sumOfPhibetaji-deltas) - 1));
prodOfalphaji = prod(alphaji(j, c1))*alphaji(j, c1(k));
%公式4
Lrji(j, c1(k)) = Theta*prodOfalphaji*minOfbetaij;
end
end
for i = 1:N
r1 = find(H(:, i));
for k = 1:length(r1)
%公式6
Lqji(r1(k), i) = Lci(i)*delta + sum(Lrji(r1, i)) - Lrji(r1(k), i);
end
tmps = sum(Lrji(r1, i));
%譯碼疊代消息的非均勻量化算法
tmps2 = func_QX(tmps,N0);
%公式7
LQi = Lci(i)*delta + tmps2;
if LQi < 0
vHat(i) = 1;
else
vHat(i) = 0;
end
end
deltas = LQi/1e15;
checksum = mod(vHat*H',2);
end
end