久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6350|回復: 1
打印 上一主題 下一主題
收起左側

一種QC_LDPC譯碼器的實現方法 帶實驗報告與源碼 信息壓縮與傳輸

[復制鏈接]
跳轉到指定樓層
樓主
ID:140725 發表于 2016-10-11 18:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

所有資料打包下載(含實驗報告與所有源碼):
一種QC_LDPC譯碼器的實現方法.rar (311.39 KB, 下載次數: 24)
下面是論文的部分內容預覽:

信息壓縮與傳輸報告

題    目:一種QC_LDPC譯碼器的實現方法
摘要:為了克服LDPC碼BP譯碼算法硬件實現復雜度大的缺點,針對QC_LDPC碼校驗矩陣的結構特性,研究了BP算法的特點,并利用TMS320C6747系列DSP作為實現平臺,成功實現了基于BP算法的QC_LDPC碼譯碼器.系統性能測試表明,經優化的BP算法譯碼器與理論分析相比,性能基本一致.
關鍵詞:QC_LDPC碼;BP算法;DSP;實現復雜度;譯碼器


One way to implement QC_LDPC decoder
AbstractIn order to overcome the shortcomings of the high complexity in hardware implementation of the BP decoding algorithm's hardware implementation,the characteristics of the BP algorithm were studied,in view of the structural properties of the QC_LDPC code check matrix. And the TMS320C6747 DSP were used for the implementation and the implementation of the QC_LDPC decoder based on the BP algorithm was completed in the end. The system tests results shows that the performance of the optimized BP algorithm decoder is almost the same to the theoretic analysis.
KeywordsQC_LDPC code;BP algorithm;DSP;implementation complexity;decoder



第1章 緒論1.1 課題研究背景

LDPC(low density parity check)碼是一種定義在稀疏奇偶校驗矩陣上的性能優越的線性分組碼,最初由Gallager[1]博士在1963年提出.該碼在用非常稀疏的校驗矩陣與基于BP(belief propagation)譯碼算法[2-3]的條件下具有逼近香農限的性能,具有良好的距離特性,且在當碼長時,不存在“地板效應”.LDPC碼的實用化是近年研究的熱點.隨機構造的檢驗矩陣雖然具有良好的性能,但是由于其節點的隨機性,給硬件實現帶來了難度.而近來興起的規則化構造校驗矩陣的LDPC碼,特別是Fossorier提出的低編碼復雜度的QC準循環(quasi cyclic)LDPC碼的出現在硬件實現上提供了新的思路[4].在譯碼算法方面,BP算法雖然性能優越,但由于其存在較多的浮點乘法運算,占據資源量大,一直是硬件實現的瓶頸.隨著高速高容量的數字信號處理器(DSP)的發展,文中采用TI公司的TMS320C6747系列DSP,基于QC_LDPC碼,針對BP譯碼算法,在資源存儲、數據精度處理方面提出了改進,實現了基于BP算法的QC_LDPC碼譯碼器,獲得了較好的性能。

1.2 QC__LDPC碼的校驗矩陣

QC_LDPC碼是一種特殊結構化LDPC碼,其校驗矩陣由一系列p×p循環子矩陣組成,所謂循環子矩陣是指子矩陣中每一行都是上一行的循環右移,第1行是最后一行的循環右移;每一列都是上一列的循環下移,第l列是最后一列的循環下移.當循環子矩陣的行重和列重為1時,該循環子矩陣可由同樣大小的單位陣循環移位得到[5]。

第2章 QC_LDPC碼的BP譯碼算法
BP譯碼算法的核心思想在于利用從信道中接收到的信息在變量節點和校驗節點之間進行信息傳遞、迭代運算,從而獲得最大的編碼增益,其每次譯碼迭代包括2步:校驗節點的信息處理和變量節點的信息處理.在每次迭代中,所有校驗節點從其相鄰的變量節點處接收信息,處理后再傳回到相鄰的變量節點;然后所有的變量節點進行同樣的過程;最后變量節點收集所有可以利用的信息進行判決[6]。
具體算法如下:
定義接收到的序列為y=(y1,y2,…,yn),譯碼得到的序列為c,rji(b)(b=0,1)表示校驗節點j傳給變量節點i的外部概率信息,qji(b)表示變量節點i傳遞給校驗節點j的外部概率信息.C(i)表示與變量節點i相連的校驗節點的集合;R(j)表示與校驗節點j相連的變量節點的集合;C(i)\j表示除j外與變量節點i相連的校驗節點的集合;R(j)\i表示除i外與校驗節點j相連的變量節點的集合;Pi(1)=Pr(ci=1|yi)表示接收到信息序列后判斷發送比特(或變量節點)為ci=1的后驗概率;同理,Pi(0)=Pr(ci=0|yi)表示接收到信息序列后判斷送比特(或變量節點)為ci=0的后驗概率。
1)初始化.計算信道傳遞給變量節點的初始概率Pi(1),Pi(0)=1-Pi(1),i=1,2,…,n.然后對每個變量節點i和與其相鄰的校驗節點j∈C(i),設定變量點傳向
校驗節點的初始消息:
   

2)迭代處理.

步驟1:校驗節點信息處理.對所有的校驗節點j和與其相鄰的變量節點

,第L次迭代時,計算量節點傳向校驗節點的信息

步驟2:變量節點信息處理.

對所有的變量節點和與其相鄰的校驗節點

,計算校驗節點傳向變量節點的信息

步驟3:譯碼判決.

對所有變量節點計算硬判決信息:

3)停止

若矩陣等于0或者達到最大迭代次數則結束運算,否則從步驟1繼續迭代。


第3章QC_LDPC譯碼器的DSP實現
采用TI公司的TMS320C6747系列浮點DSP作為譯碼器的實現平臺.此款DSP的最新型C674X內核將以往浮點型DSP的高精度數據處理優勢和只有定點處理器才具備的連接性外設、低功耗和低成本的優點完美結合在一起,具有300 MHz主頻、320 KB的片內RAM,以及1 024 KB的片內ROM.BP算法在以往難以用硬件實現的原因在于其算法本身存在大量的浮點數乘除法運算,處理比較復雜,且占據大量的內存空間,給處理器實現帶來難度;同時,由于處理的信息有接近于0的小數概率,在乘除法及對數運算時容易超出處理器設定的最大數量級范圍,從而造成數據的溢出,導致整幀信息無法譯出.為了解決以上難題,對譯碼器資源存儲和數據精度處理進行了優化:
(1)在信息迭代處理過程中,當碼長較長時,如果將整個LDPC碼校驗矩陣的“0”和“1”位置的信息均記錄在內存中,則勢必占據過多的系統資源,而事實上,參與迭代的有用信息僅存于“1”位置,故只需記錄“1”位置的信息即可.結合QC_LDPC校驗矩陣準循環結構的特點,將Aij對應到一個長度為p的數組L_ij上,L_ij的每一個位置存儲Aij對應列里“1”位置的信息,如L_ij(k)存儲的就是Aij中第k列的“1”位置的信息,其中k<p.圖1所示為校驗矩陣對應的ram存儲器陣列結構圖:

信息迭代處理時,當Aij為單位矩陣時,L_ij(k)對應的信息就是Aij中第k行第k列的“1”的信息;當Aij為單位矩陣的循環移位矩陣時,L_ij(k)對應的信息則是根據右移系數Iij推算出對應行的Aij第k列的信息。
2)在譯碼每次迭代過程中,如果對2類節點信息rij(b)和qij(b)、接收初始化信息Pi(1)和Pi(0)及譯碼中間環節變量分別存儲,則需要存儲器的數量為校驗矩陣中非零矩陣數量的2倍以上;如果將存儲器復用,即校驗節點更新時,存儲校驗節點信息,當進入變量節點更新時,將此存儲空間再用來存取變量節點信息,同時,不再為初始化信息和中間變量信息開辟存儲空間,而將其并入2類節點信息的存儲器中,往復利用,可以節省一半的存儲空間.事實證明,當LDPC碼長為1 536的情況下,優化前,所需空間約為282.6 KB,經復用,可以節省到約122.88 KB,極大地提高了資源利用率。
3)在用DSP實現BP譯碼算法時,在DSP系統外擴大容量SDRAM、Flash芯片來實現大容量數據存儲。對于部分不參與迭代的變量數組,如從解調模塊接收的信息數組、譯碼判決信息數組等,可以存在片外SDRAM中,如圖2所示,需要時可以從片外存取,從而進一步節省DSP片內存儲空間,
            圖2  DSP外擴存儲器結構圖
算法涉及的所有浮點型數組,均按照單精度浮點float型(32位)保存,而不采用64位的雙精度浮點型;譯碼判決序列按照char型(8位)保存,而不采用整形數組(16位).通過上述優化,在原有的基礎上進一步節省了DSP片內約60 KB的存儲空間。經驗證,以上闡述的存儲器復用、片外存儲變量、數據格式的選擇等資源優化方式節省了約3/4的存儲空間。




第四章程序驗證譯碼效果
程序介紹:
  使用碼率為0.5的準循環LDPC碼,碼矩陣(1255,2510)
迭代30次,輸入10幀數據。
  先對數據通過生成矩陣G進行編碼,進行BPSK調制,送入高斯白噪聲信道,通過校驗矩陣H進行譯碼操作。
   利用對數域LLR-BP算法譯碼,并且計算出誤碼率。
   并對只采用BPSK調制解調的誤碼性能和使用LDPC編解碼的誤碼性能通過實驗驗證做錯出比較
源程序如下:
%% 計算LDPC性能

clear all;
clc;
%------------初始化-------------%
EbN0 =0:0.5:8;%信噪比
iter2=30;%迭代次數
frame=10;%測量的幀數
rate=0.5;%誤碼
ber3=zeros(length(EbN0));
ber=zeros(length(EbN0));
q=251;
summ=0;
sumn=0;
count=0;
E0=eye(q);%μ¥λ¾ØÕó
EZ=zeros(q);%0¾ØÕó
load H_01_dual_diag.mat H_01;  %校驗矩陣  
load P.mat P;                  %生成矩陣
[row_h col_h]=size(H_01);
%---------------將循環矩陣轉換為實際的校驗矩陣--------------------%
for i=1:row_h
    for j=1:col_h
        if H_01(i,j)==-1
           H_0_matrix((i-1)*q+1:i*q,(j-1)*q+1:j*q)=circshift(EZ,H_01(i,j));
               else
          H_0_matrix((i-1)*q+1:i*q,(j-1)*q+1:j*q)=circshift(E0,H_01(i,j));
        end
    end
end
H=H_0_matrix;
for i = 1:length(EbN0)
   for j = 1:frame           
       fprintf('Frame : %d', j);
       %-------------------編碼-------------------%
       x=(sign(randn(1,size(P,1)))+1)/2;
       y=mod(x*P,2);
       u=[y x];  
       %-------------------調制-------------------%
      bpskMod = 2*u - 1;
       %---------------加入高斯信道---------------%
       N0 = 1/(exp(EbN0(i)*log(10)/10));
         tx =bpskMod+sqrt(N0/(2*rate))*randn(size(bpskMod));
         for iii=1:2510
             if tx(iii)<=0
                 tx1(iii)=0;
             else
                 tx1(iii)=1;
             end
         end
      comp=xor(u, tx1);
      summ=sum(comp);
      sumn=summ/2510;
      ber(i)=ber(i)+sumn;
        %---------------譯碼---------------%     
           vhat1 = decodeProbDomain(tx', H,  N0,iter2);%
       %---------------計算誤碼---------------%  
         [num3, rat3] = biterr(vhat1, u);
           ber3(i) = (ber3(i) + rat3);
   end

        ber(i)=ber(i)/frame;
          ber3(i)=ber3(i)/frame;
          fprintf(' i=%f',i);
          fprintf('ber3= %12.10f,ber= %12.10f',ber3(i),ber(i));
           if count==1
                ber3(i)=0;
           elseif ber3(i)<1/(q*10*frame)
              ber3(i)=1/(2*q*10*frame);
              count=1;
           end

end
%---------------誤碼曲線---------------%  
         semilogy(EbN0, ber3, '-b+',EbN0, ber, '-r<');   %


下面是通過運行程序,得出了對于兩種不同的編解碼方法誤碼率的比較,如下圖所示:
如圖上方紅線代表BPSK誤碼率,藍線代表LDPC誤碼率
有圖可以得出結論:
  同的信噪比下,采用LDPC編解碼技術,得到的誤碼率明顯好于采用BPSK調制技術,并且誤碼率提高一個的量化級,如在信噪比為2db的情況下,采用LDPC技術誤碼率比BPSK技術提高了10倍以上。
參考文獻:
[1]GALLAGER R G.Low-density parity-check codes[M].Boston:MIT Press,1963:70-81.
[2]GALLAGER R G.Low density parity check codes[J].IRE
Trans on Information Theory,1962,8(1):2l-28.
[3]MACKAY D J C,NEAL R M.Near Shannon limit performance of low-density parity-check codes[J].IE Electronics Let-ters,1996,32(18):1645-1646.
[4]FOSSORIER M P.Quasi-cyclic low-density parity-check codes from circulant permutation matrices [J].IEEE Trans on
Inform Theory,2004,50:1788-1793.
[5]LI Zongwang,CHEN Lei,ZENG Lingqi,et al.Efficient encoding of quasi-cyclic low-density parity-check codes[J].IEEETrans on Communications,2006,54(1):36-45.
[6]竇高奇,高俊,劉冰.準循環LDPC碼快速編譯碼算法及
DSP實現[J].解放軍理工大學學報,2008,9(4):324-327.

  1. function vHat = decodeProbDomain(rx, H, N0, iteration)
  2. % Probability-domain sum product algorithm LDPC decoder
  3. %
  4. %  rx        : Received signal vector (column vector)
  5. %  H         : LDPC matrix
  6. %  N0        : Noise variance
  7. %  iteration : Number of iteration
  8. %
  9. %  vHat      : Decoded vector (0/1)


  10. [M N] = size(H);

  11. % Prior probabilities
  12. P1 = ones(size(rx))./(1 + exp(-2*rx./(N0/2)));
  13. P0 = 1 - P1;

  14. % Initialization
  15. K0 = zeros(M, N);
  16. K1 = zeros(M, N);
  17. rji0 = zeros(M, N);
  18. rji1 = zeros(M, N);
  19. qij0 = H.*repmat(P0', M, 1);
  20. qij1 = H.*repmat(P1', M, 1);

  21. % Iteration
  22. for n = 1:iteration
  23.    
  24. %      fprintf('Iteration : %d', n);
  25.    
  26.    % ----- Horizontal step -----
  27.    for i = 1:M
  28.       
  29.       % Find non-zeros in the column
  30.       c1 = find(H(i, :));
  31.       
  32.       for k = 1:length(c1)
  33.          
  34.          % Get column products of drjic1(l)
  35.          drji = 1;
  36.          for l = 1:length(c1)
  37.             if l~= k
  38.                drji = drji*(qij0(i, c1(l)) - qij1(i, c1(l)));
  39.             end
  40.          end % for l
  41.          
  42.          rji0(i, c1(k)) = (1 + drji)/2;
  43.          rji1(i, c1(k)) = (1 - drji)/2;
  44.          
  45.       end % for k
  46.       
  47.    end % for i
  48.    
  49.    % ------ Vertical step ------
  50.    for j = 1:N
  51.       
  52.       % Find non-zeros in the row
  53.       r1 = find(H(:, j));
  54.       
  55.       for k = 1:length(r1)
  56.         
  57.          % Get row products of prodOfriji(l)
  58.          prodOfrij0 = 1;
  59.          prodOfrij1 = 1;   
  60.          for l = 1:length(r1)
  61.             if l~= k
  62.                prodOfrij0 = prodOfrij0*rji0(r1(l), j);
  63.                prodOfrij1 = prodOfrij1*rji1(r1(l), j);
  64.             end
  65.          end % for l
  66.          
  67.          % Update constants
  68.          K0(r1(k), j) = P0(j)*prodOfrij0;
  69.          K1(r1(k), j) = P1(j)*prodOfrij1;
  70.          
  71.          % Update qij0 and qij1
  72.          qij0(r1(k), j) = K0(r1(k), j)./(K0(r1(k), j) + K1(r1(k), j));
  73.          qij1(r1(k), j) = K1(r1(k), j)./(K0(r1(k), j) + K1(r1(k), j));
  74.                
  75.       end % for k
  76.       
  77.       % Update constants
  78.       Ki0 = P0(j)*prod(rji0(r1, j));
  79.       Ki1 = P1(j)*prod(rji1(r1, j));
  80.       
  81.       % Get Qj
  82.       Qi0 = Ki0/(Ki0 + Ki1);
  83.       Qi1 = Ki1/(Ki0 + Ki1);
  84.       
  85.       % Decode Qj        
  86.       if Qi1 > Qi0
  87.          vHat(j) = 1;
  88.       else
  89.          vHat(j) = 0;
  90.       end
  91. %          if rem(H*yo.',2) == 0,
  92. %         break;   
  93. %          end
  94.    end % for j
  95.    
  96. end % for n
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:896482 發表于 2021-5-18 11:43 | 只看該作者
運行有點問題,需要修改哪些參數嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品久久久 | 久精品视频| 中文视频在线 | 91福利在线导航 | 国内精品免费久久久久软件老师 | 亚洲区一区二区 | 久久久免费观看视频 | 色www精品视频在线观看 | 国产午夜精品久久久久免费视高清 | 亚洲精品久久久久久久久久久 | 欧美精品久久久久 | 国产精品久久久久久久久久久久久久 | 欧美成年人网站 | 久久久免费电影 | 久久精品小视频 | 午夜爽爽爽男女免费观看 | 午夜寂寞福利视频 | 中文字幕一区二区三区不卡 | 爱爱免费视频网站 | 国产美女永久免费无遮挡 | 人人干天天干 | 羞羞在线观看视频 | 老司机午夜性大片 | 久久久久国产精品午夜一区 | 国产亚洲精品美女久久久久久久久久 | 日韩av高清在线 | 欧美一区二区三区视频在线观看 | 亚洲精品99 | 久久久国产一区 | 午夜影视免费片在线观看 | 国产不卡一区 | 国产激情视频在线免费观看 | 亚洲国产精品99久久久久久久久 | 欧美日韩在线视频一区 | 综合精品 | 激情六月丁香婷婷 | 久久精品免费观看 | 欧美精品一区二区三区在线 | 婷婷综合激情 | 情侣酒店偷拍一区二区在线播放 | 亚洲国产成人精品久久久国产成人一区 |