m基于SPA和積譯碼算法的LDPC誤碼率matlab仿真

1.算法仿真效果

matlab2022a仿真結(jié)果如下:


2.算法涉及理論知識概要

LDPC ( Low-density Parity-check,低密度奇偶校驗)碼是由 Gallager 在1963 年提出的一類具有稀疏校驗矩陣的線性分組碼 (linear block codes),然而在接下來的 30 年來由于計算能力的不足,它一直被人們忽視。1996年,D MacKay、M Neal 等人對它重新進(jìn)行了研究,發(fā)現(xiàn) LDPC 碼具有逼近香農(nóng)極限的優(yōu)異性能。并且具有譯碼復(fù)雜度低、可并行譯碼以及譯碼錯誤的可檢測性等特點,從而成為了信道編碼理論新的研究熱點。


Mckay ,Luby 提出的非正則 LDPC 碼將 LDPC 碼的概念推廣。非正則LDPC碼 的性能不僅優(yōu)于正則 LDPC 碼,甚至還優(yōu)于 Turbo 碼的性能,是目前己知的最接近香農(nóng)限的碼。


在LDPC碼的校驗矩陣中,如果行列重量固定為(P,Y),即每個校驗節(jié)點有Y個變量節(jié)點參與校驗,每個變量節(jié)點參與P個校驗節(jié)點,我們稱之為正則LDPC碼。Gallager最初提出的Gallager碼就具有這種性質(zhì)。從編碼二分圖的角度來看,這種LDPC碼的變量節(jié)點度數(shù)全部為P,而校驗節(jié)點的度數(shù)都為Y。我們還可以適當(dāng)放寬上述正則LDPC碼的條件,行列重量的均值可以不是一個整數(shù),但行列重量盡量服從均勻分布。另外為了保證LDPC碼的二分圖上不存在長度為4的圈。我們通常要求行與行以及列與列之間的交疊部分重量不超過1,所謂交疊部分即任意兩列或兩行的相同部分。我們可以將正則LDPC碼校驗矩陣H的特征概括如下:


1. H的每行行重固定為P,每列列重固定為Y。


2. 任意兩行(列)之間同為1的列(行)數(shù)(稱為重疊數(shù))不超過1,即H矩陣中不含四角為1 的小方陣,也即無4線循環(huán)。


3. 行重P和列重Y相對于H的行數(shù)M、列數(shù)N很小,H是個稀疏矩陣。


在正則LDPC碼的校驗矩陣中。行重和列重的均值保持不變,所以校驗矩陣中1的個數(shù)隨著碼長的增加而線性增長,整個校驗矩陣的元素個數(shù)則成平方增長。當(dāng)碼長達(dá)到一定長度時,校驗矩陣H是非常稀疏的低密度矩陣。對于正則的LDPC碼,MacKay給出了以下兩個結(jié)論:


1. 對于任意給定列重大于3的LDPC碼,存在某個小于信道傳輸容量且大于零的速率r ,當(dāng)碼長足夠長時,可以實現(xiàn)以小于r且不為零的速率無差錯的傳輸。也就是說任意給定一個不為零的傳輸速率r,存在一個小于相應(yīng)香農(nóng)限的噪聲門限,當(dāng)信道噪聲低于該門限且碼長足夠長的時候,可以實現(xiàn)以r速率無差錯的傳輸。


2. 當(dāng)LDPC碼的校驗矩陣H的列重Y不固定,而是根據(jù)信道特性和傳輸速率來確定時,則一定可以找到一個最佳碼,實現(xiàn)在任意小于信道傳輸容量的速率下無差錯的傳輸。


對LDPC碼的定義都是在二元域基礎(chǔ)上的,MaKcay對上述二元域的LDPC碼又進(jìn)行了推廣。如果定義中的域不限于二元域就可以得到多元域GF(q)上的LDPC碼。多元域上的LDPC碼具有較二進(jìn)制LDPC碼更好的性能,而且實踐表明在越大的域上構(gòu)造的LDPC碼,譯碼性能就越好,比如在GF(16)上構(gòu)造的正則碼性能己經(jīng)和Turbo碼相差無幾。多元域LDPC碼之所以擁有如此優(yōu)異的性能,是因為它有比二元域LDPC碼更重的列重,同時還有和二元域LDPC碼相似的二分圖結(jié)構(gòu)。


碼率是0.5,碼長是2304,nb=24,kb=12,


基礎(chǔ)矩陣為


3.MATLAB核心程序

H ??????= func_H(Hb,eye(96));

[Rh,Ch] = size(H);

x ???????= [ones(1,Ch)];

EbN0 ????= [0:0.5:2];



Max_iter = 1;



for ij = 1:length(EbN0)

for k = 1:100

[k,ij]

sigma = sqrt(1/(10^(EbN0(ij)/10)));

%實際驗證過程中,這個位置加入你的編碼模塊

code ?= (2*x-1);

r ????= code+randn(size(x))*sigma;

%對應(yīng)PPT公式

Lv ???= 2*r/(sigma^2);

%SPA算法

[ber,v1] = Sum_product_algorithm(Lv,H,Max_iter);

%輸入變量

x(Rh+1:Ch);

%輸出變量

v1(Rh+1:Ch);

%計算錯誤數(shù)據(jù)

err1(k,ij)=1-length(find(v1(Rh+1:Ch)==x(Rh+1:Ch)))/length(x(Rh+1:Ch));

end

end


if Max_iter==1

save R1.mat EbN0 err1

end

if Max_iter==5

save R2.mat EbN0 err1

end

if Max_iter==10

save R3.mat EbN0 err1

end

if Max_iter==25

save R4.mat EbN0 err1

end

if Max_iter==100

save R5.mat EbN0 err1

end



figure;

semilogy(EbN0,mean(err1,1),'b-o');

grid on

xlabel('EBNO');

ylabel('ber');

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容