5G通信方式によるLDPC符号化・復号のビット誤り率

目次

1. 理論的根拠

2. コアプログラム

3. シミュレーションの結論


1. 理論的根拠

       5G通信システムに基づくLDPC(低密度パリティチェック)符号化誤り率の研究には、通信システムのチャネル符号化および復号化技術が含まれており、主にシステムの信頼性と伝送効率を向上させるために使用されます。5G 通信システムは第 5 世代移動通信システムであり、より高速なデータ レート、より低い遅延、より優れたユーザー エクスペリエンスを提供することを目的としています。新しい無線技術とコーディング方式を使用して、大規模なデータ送信と接続数のニーズに対応します。5G システムでは、LDPC 符号化は、効率的な誤り訂正パフォーマンスを実現するための重要なチャネル符号化技術です。
       LDPC符号化は、グラフ理論に基づいた線形ブロック符号化技術であり、疎なパリティ検査行列を構築することで効率的な符号化および復号化を実現します。LDPC符号の符号化プロセスは、入力データとパリティ検査行列との行列乗算演算を実行して、符号化された出力データを取得することである。LDPC コードの復号プロセスは、反復復号アルゴリズムを通じて送信中に発生したエラーを訂正することです。
        LDPC 符号の符号化式は次のように表すことができます。

      LDPC コードの復号化プロセスでは、反復復号化アルゴリズムを使用できます。その中で最も一般的に使用されるのは、メッセージ パッシング アルゴリズム (Sum-Product アルゴリズム) です。$\mathbf{r}$ が受信信号ベクトル、$\mathbf{L}$ が初期尤度情報ベクトルであるとします。各反復では、LLR (対数尤度比) 情報を更新することによってエラー ビットが徐々に修正されます。反復計算の式は次のとおりです。 

        このうち、$i$と$j$はそれぞれチェックノードと変数ノードのインデックスを表し、$N(i)$はチェックノード$i$に接続された変数ノードの集合を表し、$\tanh^{-1}$は逆双曲線正接関数を表します。
       5G通信システムでは、LDPC符号化・復号化を用いたチャネルのビット誤り率性能をシミュレーションや理論解析により評価できます。ビット誤り率 (BER、ビット誤り率) は、信号伝送の品質を測定するための重要な指標であり、通常、エンコーダとデコーダの性能を評価するために使用されます。
LDPC 符号化および復号化の場合、ビット誤り率のパフォーマンスと信号対雑音比 (SNR、信号対雑音比) の関係は BER 曲線で表すことができます。さまざまな SNR 値を通じて、デコードされた出力と元のデータの間のビット誤り率が計算され、BER 曲線が得られます。

       さらに、LDPC コードのビット誤り率性能は、分析手法によっても導き出すことができます。一般的な方法は、チャネル容量近似法を使用して、チャネル容量を計算することによってビット誤り率性能を推定することです。5G通信システムに基づくLDPC符号化のビット誤り率の研究は、5G通信システムの重要な技術分野の1つである。本稿では、5GシステムにおけるLDPC符号化の適用原理と数式、およびビット誤り率性能の解析方法を紹介します。LDPC符号化の研究を通じて、信号伝送効率を最適化し、通信システムの信頼性を向上させることができ、高速、低遅延、多数接続という5G通信システムの要件を満たすことができます。

2. コアプログラム

............................................................

EbNodB = [0:1:5];


for ij = 1:length(EbNodB)
for k = 1:20
[ij,k]
MaxItrs = 8;
rate_matching = 0;

load base_matrices\NR_1_0_16.txt;
B = NR_1_0_16;
[mb, nb] = size(B);
z = 16;

Slen = sum(B(:)~=-1);   %number of non '-1' in B
treg = zeros(max(sum(B~=-1,2)),z); %register storage for minsum

k = (nb - mb)*z;
n = nb*z;
if rate_matching == 1
    n = n -2*z;
end
Rate = k/n;                     
EbNo = 10^(EbNodB(ij)/10);              
sigma = sqrt(1/(2*Rate*EbNo));


Nbiterrs = 0; Nblkerrs = 0; Nblocks = 100;

for i = 1 : Nblocks
   %msg = randi([0 1],1,k);           %generate random message
   msg = zeros(1,k); % all-zero msg 
   
   %Encoding here
   cword = zeros(1,n);
      
   s = 1 - (2 * cword);                 %BPSK symbols
   r = s + sigma * randn(1,n);          %AWGN Channel
 
   %puncturing
   if rate_matching == 1
   r(1:2*z) = 0;
   end
   
   %Soft-Decision, iterative message-passing layered decoding here
   L = r;   % Total Belief
   itr = 0; % iteration number
   R = zeros(Slen, z);     %storage for row processing
   while itr < MaxItrs
       Ri = 0;
        for lyr = 1:mb
            ti = 0; % number of non -1 in row = lyr
            for col = 1:nb
                if B(lyr,col) ~= -1
                    ti = ti + 1;
                    Ri = Ri + 1;
                    %Substraction
                    L((col-1)*z+1:col*z) = L((col-1)*z+1:col*z) - R(Ri,:);
                    %Row alignment and store in treg
                    treg(ti,:) = mul_sh(L((col-1)*z+1:col*z),B(lyr,col));
                end  
            end
            %minsum on treg: ti x z
            for i1 = 1:z %treg(1:ti,i1)
                [min1, pos] = min(abs(treg(:,i1))); %first min
                min2 = min(abs(treg([1:pos-1 pos+1:ti],i1))); %second min
                S = sign(treg(1:ti,i1));
                parity = prod(S);
                treg(1:ti,i1) = min1; %absolute value for all
                treg(pos,i1) = min2; %absolute value for min1 position
                treg(1:ti,i1) = parity * S.*treg(1:ti,i1); %assign signs
            end
            %column alignment, addition and store in R
            Ri = Ri - ti; %reset the storage counter
            ti = 0;
            for col = 1:nb
                if B(lyr,col) ~= -1
                    Ri= Ri + 1;
                    ti = ti + 1;
                    %Column alignment
                    R(Ri,:) = mul_sh(treg(ti,:), z-B(lyr,col));
                    %Addition
                    L((col-1)*z+1:col*z) = L((col-1)*z+1:col*z) + R(Ri,:);
                end
            end
        end
        msg_cap = L(1:k) < 0; %decision
        itr = itr + 1;
   end

   Nerrs = sum(msg ~= msg_cap);
   
   if(Nerrs > 0)
      Nbiterrs = Nbiterrs + Nerrs;
      Nblkerrs = Nblkerrs + 1;
   end
end

BER_sim(ij,k) = Nbiterrs/(k*Nblocks);
FER_sim(ij,k) = Nblkerrs/Nblocks;

end
end


figure;
semilogy(EbNodB,mean(BER_sim,2),'b-o');
grid on
xlabel('EbNo');
ylabel('error');
up2175

3. シミュレーションの結論

 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/131901271