tic clc clear all count=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) end toc semilogy(1:6,errratio,'-b*'); %画图 xlabel('SNR/dB') ylabel('误比特率') legend('BF译码') title('二元准循环ldpc') axis([1 10 10^-5 10^0]) grid on
比特翻转译码2
猜你喜欢
转载自blog.csdn.net/sinat_38151275/article/details/79985460
今日推荐
周排行