本文共 1404 字,大约阅读时间需要 4 分钟。
ticclcclear allcount=10000; %测试次数,可自己选择%初始化load('H.mat');load('G.mat');for SNR=1:6 total_err=0; %错误比特数初始化为0 for loop=1:count x = randi([0,1],1,1024); x_send=mod(x*G,2); %编码 x_bpsk=2*x_send-1; %BPSK调制 re_y=awgn(x_bpsk,SNR,'measured'); %进入高斯信道 max_ite=20; %最大迭代次数,可自己选择 [row,col]=size(H); iteration=0; hard=0.5*(sign(re_y)+1); y_re = hard; syn = mod(y_re*H',2); % 计算伴随式(校正子)syn while (sum(syn) ~= 0) & (iteration < max_ite) %循环条件syn=0 或达到最大迭代次数 iteration = iteration + 1; %Step 2. 计算每一比特参与校正子为1的方程的个数fn fn=zeros(1,1); for i = 1:col fn(i) = syn*H(:,i); end % Step 3: 找到不满足校验方程个数最多的码字的位置,并将其标记 [ma,index]=max(fn); % Step 4: 比特翻转 y_re(index)=not(y_re(index)); %将不满足校验方程个数最多的码字进行翻转 syn = mod(y_re*H',2); % 重新计算伴随式syn end % while u = y_re; %译码结果给u newerr=length(find(x_send~=u)); %统计测试一次的误比特数 total_err=total_err+newerr; %统计总的误比特数 loop end errratio(SNR)=total_err/(length(u)*count); %errratio=total_err/(length(u)*count) endtocsemilogy(1:6,errratio,'-b*'); %画图 xlabel('SNR/dB')ylabel('误比特率')legend('BF译码')title('二元准循环ldpc')axis([1 10 10^-5 10^0])grid on
转载地址:http://yjwsi.baihongyu.com/