1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWVmZpr
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
在LDPC译码部分,其消息传递规则主要有SMP和RMP两种准则,两个复杂度类似,但是RMP的收敛速度更快。传统的BP译码算法,主要是基于SMP这种消息传递规则的。下面,我们就SMP和RMP的区别和性能优势进行分析:
对于SMP译码算法,其在译码迭代过程中,校验节点和变量节点同时进行消息传递和处理,其校验节点和变量节点的更新是一个同步的过程。
而对于RMP而言,其在译码迭代过程中,与校验节点相连的变量节点的更新可以使用该次迭代中已经更新过的消息,通过这种方式,可以提高算法的收敛性,所以在实际仿真中,基于RMP的译码算法,其收敛速度将远远大于基于SMP的译码算法。迭代一次RMP的译码效果相当于SMP算法多次迭代才能获得的性能。
4.部分源码
flag = 1;
%%
n = 3;
m = 6;
p = 150;
N = m*p;
M = n*p;
if flag==1
SNR = [-1,0,1,1.5];
eln = [500,200,100,25];
end
if flag==0
SNR = [-1,0,1,2,3];
eln = [500,300,200,100,100];
end
R = n/m;
k = R*log2(2);
EbN0 = SNR/k;
Max_iter = 15;
H1 = func_dys(n,m,p,flag);
pause(2);
%%
%开始循环,进行误码率仿真
for i=1:length(SNR)
i
Bit_err(i) = 0; %设置误码率参数
Num_err = 0; %蒙特卡洛模拟次数
Numbers = 0; %误码率累加器
%信道参数
Hsd = 1;
Hsr = 1;
Hrd = 1;
while Num_err <= eln(i)
fprintf('Eb/N0 = %f\n', SNR(i));
Num_err
N0 = 2*10^(-EbN0(i)/10);
Trans_data = round(rand(N-M,1)); %产生需要发送的随机数
[ldpc_code,newH] = func_Enc(Trans_data,H1); %LDPC编码
u = [ldpc_code;Trans_data]; %LDPC编码
Trans_BPSK = 2*u-1; %BPSK
%S->D
Rec_sd = Hsd*Trans_BPSK+sqrt(N0/2)*randn(size(Trans_BPSK));
%接收端
[vhatsd,nb_itersd,successsd] = func_Dec(Rec_sd,newH,N0,Max_iter);
[nberr,rat] = biterr(vhatsd(M+1:N)',Trans_data);
%LDPC译码
Num_err = Num_err+nberr;
Numbers = Numbers+1;
end
Bit_err(i) = Num_err/(N*Numbers);
end
figure;
semilogy(SNR,Bit_err,'o-');
xlabel('SNR(dB)');
ylabel('BER');
grid on;
if flag ==0
save data0.mat SNR Bit_err
else
save data1.mat SNR Bit_err
end
14_013_m