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
最新推荐文章于 2023-08-09 20:42:59 发布