マルチプレクサLDPC-EMS復号アルゴリズム

3411 ワード

EMSアルゴリズムの詳細な解析から,メッセージベクトル間の演算は最大値演算結果の一部のみを保存し,演算中に数値間のサイズ比較の結果に基づいて判定する必要があることが分かった.復号結果を決定するのは、メッセージベクトル内の数値間の相対的な大きさであり、メッセージベクトル内の単一の値の大きさは復号結果に影響しない.初期メッセージも[L[0],...,L[q-1][[L[0]-M,...,L[q−1]−M]は初期メッセージベクトルとして等価である.
EMSアルゴリズムステップ:
1.初期化ステップa.受信メッセージからメッセージベクトルのLLRベクトルL[k],k={0.q−1}を算出する.b.ベクトルLを並べ替え、降順でLsとする.c.Lsベクトル全体からLs[0]を減算し、並べ替え後のLs[0]をベクトルの最大値とする.LsがすべてLs[0]を減算した後、初期値ベクトルの中でLs[0]=0を除いた残りの値はいずれも負である.注:ソート中に、ベクトル内の各成分に対応する要素、すなわちインデックス値は、ソートプロセスに基づいて対応する位置を変更します.
2.置換ステップU[a]=U[j]であり、ここでa=h*jであり、ここでhは検査方程式における行列Hの対応する位置の値である.hは非ゼロ要素である.
検証ノードの更新には、順方向-後方プロシージャが使用されます.EMS復号アルゴリズムにおける変数ノードと検証ノードの更新は,いずれも順方向−後方向演算プロセスを採用しているが,彼らの単一ステップ演算実装プロセスは異なる.
3.検証ノード更新検証ノードの更新は、実際には最大値を検索するプロセスです.ベクトルAとBを単一ステップ演算の2つの入力メッセージ変数とし、その値は降順に並べられる.ABは演算結果であり,対応する要素はそれぞれAq,Bq,ABqである.単一ステップ演算の結果は、AB[i]=max(A[p]+B(j))である.出力結果ベクトルABは降順配列であり、ABqにおけるドメイン要素はそれぞれ異なる.具体的なソートアルゴリズムは次のとおりです.
function [U,Uq]=check_order(V,I,Vq,Iq)
% clear
% clc
% load V
% load Vq
% load I
% load Iq

q=8;
Nm=q/2;
Uq(1:Nm)=-1;
U=zeros(1,Nm);

%      
P=2;M=log2(q);
field = gftuple((-1:P^M-2)',M,P);%  00,10,01,11,       ,       
[tuple power] = gftuple((-1:P^M-2)',M,P);% tuple field,power 0-3        
alpha = tuple*2.^(0:M-1)';%       , 0-3
beta(alpha + 1) = 0:P^M-1;

Vq_z=power(beta(Vq+1)+1);
Iq_z=power(beta(Iq+1)+1);

M=V+I(1);  
i=0;
k=ones(Nm,1);
while(i~=Nm)
     
    [x y]=max(M);
     uu_z=gfadd(Vq_z(y),Iq_z(k(y)),field);
     if uu_z== -Inf
         uu= 0;
     else
         uu= alpha(uu_z + 2);    %    
     end
     
     if isempty(find(Uq==uu,1))
        i=i+1;
        U(i)=x;
        Uq(i)=uu;
     end
     
     if i~=Nm
         k(y)=k(y)+1;
         M(y)=V(y)+I(k(y));
     end
         
end
end
Boutillonは2010年に検証ノードの基本ステップに対してバブル検出アルゴリズム(bubble check,BC)を提案し,アルゴリズムを変更することで上述したソートプロセスの複雑さを効果的に低減した.Simplified check node processing in nonbinary LDPC decoders; proceedings of the Turbo Codes and Iterative Information Processing (ISTC), 2010 6th International Symposium on, F, 2010 [C]. IEEE.
4.逆置換ステップは、ステップ2に対応するu(a)=u(i)であり、ここで、a=i/hの乗算、除算演算は、いずれも伽羅華域で行われる.
5.変数ノードの更新は順方向-後方向演算を採用し、ここでは単一ステップ演算プロセスのみを説明する.入力メッセージはAとBであり、対応する要素はAqとBqである.出力メッセージはTであり,対応するドメイン要素はTqである.a.ベクトルAとAqを遍歴する、if Aq[k]=Bq[i],Y=B[i]のT[k]=A[k]+Yを得る.b.ベクトルBおよびBqを巡回し、ベクトルAqにBq(i)、T[nm+i]=B[i]+A[nm-1]が含まれていない場合、何もしない.c.対ベクトルTは降順に並び、その中の大きいnm個の値とそれに対応するドメイン要素を単一ステップ演算の結果とする.具体的な手順は以下の通りです.
function [T,Tq]=variable_order(V,I,Vq,Iq)

% clear
% clc
% load VV
% load VVq
% load II
% load IIq

q=8;
Nm=q/2;
Tq(1:2*Nm)=-1;
T=zeros(1,2*Nm);

TTsq(1:Nm)=-1;
TTs=zeros(1,Nm);

for k=1:length(I)
    if ~isempty(find(Vq==Iq(k),1))
        l=find(Vq==Iq(k),2);
        Y=V(l);
    else
        Y=V(Nm);
    end
    T(k)=I(k)+Y;
    Tq(k)=Iq(k);
end

for i=1:Nm
    T(Nm+i)=V(i)+I(Nm);
    Tq(Nm+i)=Vq(i);
end

%    Nm    
[TT,TTq]=order_EMS(T,Tq);
k=1;
i=0;
while(i~=Nm)
    if isempty(find(TTsq==TTq(k),1))
        i=i+1;
        TTsq(i)=TTq(k);
        TTs(i)=TT(k);
    end
    k=k+1;
end
TTs1=TTs-TTs(1);    %        ?  

T=TTs1;
Tq=TTsq;
end
EMSアルゴリズムメッセージベクトルにおける尤度値の増大によるオーバーフローを回避するために、変数ノードの更新が完了した後、その各項目から最大項目、または最小項目を減算する必要がある.この操作は次の判決に影響しない.
6.復号判定出力変数x_hatは、メッセージシンボルインデックスベクトルUqの最初のエントリを判定する(メッセージシンボルLLRは、最初のエントリを降順に並べて最大であるため).検証方程式が最大反復回数を満たすか、または到達すると復号が終了し、そうでなければステップ2に戻る.復号後の変数メッセージUの計算は、変数メッセージ更新プロセスのついでに計算され、プログラムを再記述する必要はない.