欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6863|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

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

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

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

信息壓縮與傳輸報告

題    目:一種QC_LDPC譯碼器的實現(xiàn)方法
摘要:為了克服LDPC碼BP譯碼算法硬件實現(xiàn)復(fù)雜度大的缺點,針對QC_LDPC碼校驗矩陣的結(jié)構(gòu)特性,研究了BP算法的特點,并利用TMS320C6747系列DSP作為實現(xiàn)平臺,成功實現(xiàn)了基于BP算法的QC_LDPC碼譯碼器.系統(tǒng)性能測試表明,經(jīng)優(yōu)化的BP算法譯碼器與理論分析相比,性能基本一致.
關(guān)鍵詞:QC_LDPC碼;BP算法;DSP;實現(xiàn)復(fù)雜度;譯碼器


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

1.2 QC__LDPC碼的校驗矩陣

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

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

2)迭代處理.

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

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

步驟2:變量節(jié)點信息處理.

對所有的變量節(jié)點和與其相鄰的校驗節(jié)點

,計算校驗節(jié)點傳向變量節(jié)點的信息

步驟3:譯碼判決.

對所有變量節(jié)點計算硬判決信息:

3)停止

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


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

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




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

clear all;
clc;
%------------初始化-------------%
EbN0 =0:0.5:8;%信噪比
iter2=30;%迭代次數(shù)
frame=10;%測量的幀數(shù)
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);
%---------------將循環(huán)矩陣轉(zhuǎn)換為實際的校驗矩陣--------------------%
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];  
       %-------------------調(diào)制-------------------%
      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誤碼率
有圖可以得出結(jié)論:
  同的信噪比下,采用LDPC編解碼技術(shù),得到的誤碼率明顯好于采用BPSK調(diào)制技術(shù),并且誤碼率提高一個的量化級,如在信噪比為2db的情況下,采用LDPC技術(shù)誤碼率比BPSK技術(shù)提高了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]竇高奇,高俊,劉冰.準(zhǔn)循環(huán)LDPC碼快速編譯碼算法及
DSP實現(xiàn)[J].解放軍理工大學(xué)學(xué)報,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
復(fù)制代碼

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表