1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJaVlZ9x
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
LDPC ( Low-density Parity-check,低密度奇偶校验)码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes),然而在接下来的 30 年来由于计算能力的不足,它一直被人们忽视。1996年,D MacKay、M Neal 等人对它重新进行了研究,发现 LDPC 码具有逼近香农极限的优异性能。并且具有译码复杂度低、可并行译码以及译码错误的可检测性等特点,从而成为了信道编码理论新的研究热点。Mckay ,Luby 提出的非正则 LDPC 码将 LDPC 码的概念推广。非正则LDPC码 的性能不仅优于正则 LDPC 码,甚至还优于 Turbo 码的性能,是目前己知的最接近香农限的码。Richardson 和 Urbank 也为 LDPC 码的发展做出了巨大的贡献。首先,他们提出了一种新的编码算法,在很大程度上减轻了随机构造的 LDPC 码在编码上的巨大运算量需求和存储量需求。其次,他们发明了密度演进理论,能够有效的分析出一大类 LDPC 译码算法的译码门限。仿真结果表明,这是一个紧致的译码门限。最后,密度演进理论还可以用于指导非正则 LDPC码 的设计,以获得尽可能优秀的性能。
4.部分源码
.....................................................................
Times = [5000,3000,1000,400,200,50,30];
EbN0_dB = [0.5:1:5.5];
max_iter = 15;
load GH.mat
[N,M] = size(H);
R = 1-N/M;
disp('Start......');
for i=1:length(EbN0_dB)
Bit_err(i) = 0;
Num_err = 0;
Numbers = 0; %误码率累加器
EbN0 = 10^(EbN0_dB(i)/10); % 比特信噪比,十进制表示
sigma = 1/sqrt(2*EbN0); % 求出方差值
while Num_err <= Times(i);
Num_err
fprintf('Eb/N0 = %f\n', EbN0_dB(i));
Trans_data = round(rand(1,M-N)); %产生需要发送的随机数
ldpc_code = mod(Trans_data*G,2); %LDPC编码
Trans_BPSK = 2*ldpc_code-1; %BPSK
%通过高斯信道
Rec_BPSK = Trans_BPSK + sigma*randn(size(Trans_BPSK));
z_hat = func_LLRBP(Rec_BPSK,sigma,H,max_iter) ;
x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));
[nberr,rat] = biterr(x_hat,Trans_data);
Num_err = Num_err+nberr;
Numbers = Numbers+1;
end
Bit_err(i)=Num_err/(length(Trans_data)*Numbers);
end
figure;
semilogy(EbN0_dB,Bit_err,'b-o');
xlabel('Eb/N0(dB)');
ylabel('BER');
grid on;
% save R1.mat EbN0 Bit_err
14_029_m