資源簡介
LDPC碼的PEG算法Matlab code
代碼片段和文件信息
clear?all;
clc;
%輸入編碼參數(shù)m:校驗(yàn)節(jié)點(diǎn)數(shù)目,n:變量節(jié)點(diǎn)數(shù)目(注意碼率R不一定為1/2)
%構(gòu)造任意碼率的LDPC校驗(yàn)矩陣
m=input(‘The?number?of?check?nodes:‘);
n=input(‘The?number?of?variable?nodes:‘);
h=zeros(mn);
%給定變量節(jié)點(diǎn)度分布序列?dv=0.38354*x+0.04237*x^2+0.57409*x^3
%為了得到更好的性能,此處的度分布序列采用密度進(jìn)化理論選取
dv=inline(‘0.38354*x+0.04237*x.^2+0.57409*x.^3‘‘x‘);
%計(jì)算每個(gè)度分布的節(jié)點(diǎn)數(shù)
indv=quadl(dv01);
a2=round(n*(0.38354/2/indv));
a3=round(n*(0.04273/3/indv));
ds(1:a2)=2;
ds(a2+1:a3+a2)=3;
ds(a2+a3+1:n)=4;
%這里不考慮校驗(yàn)節(jié)點(diǎn)的度分布序列,構(gòu)造新Tanner圖時(shí),均為0
dc=zeros(1m);
%下面展開PEG算法,將每一個(gè)變量節(jié)點(diǎn)展成l層子圖,構(gòu)造Tanner圖
for?j=1:n????????????%對(duì)于每一個(gè)變量節(jié)點(diǎn)循環(huán)
????for?k=1:ds(j)????%對(duì)于度分布循環(huán),控制邊的數(shù)目
????????if?k==1
????????????%若為第一條邊,直接尋找最小度分布的校驗(yàn)節(jié)點(diǎn)
????????????k1=find(dc==min(dc));
????????????h(k1(1)j)=1;
????????????dc(k1(1))=dc(k1(1))+1;
????????else?%若不是第一條邊,則展成l層子圖,尋找在l層最小度分布的校驗(yàn)節(jié)點(diǎn)
????????????flag=1;
????????????l=1;
????????????%這里對(duì)每一個(gè)校驗(yàn)節(jié)點(diǎn)是否存在于第l層做標(biāo)記最大展開層數(shù)待定
????????????dcf=zeros(1000m);
????????????row=find(h(:j));???%列搜索,搜索為1的行標(biāo)
????????????dcf(lrow)=1;???????%展開第一層
????????????while(flag)
????????????????l=l+1;
????????????????h_row=h(row:);
????????????????if??length(row)==1
????????????????????col=find(h_row);
????????????????else
???????????????????
評(píng)論
共有 條評(píng)論