%-----------------------------------------------
% 仿真参数设置
clc;clear;tic;
maxiter = 20; % 最大迭代次数
block = 1000; % 仿真码块数
num = 4; % 信噪比个数
load 245X343_G_187X156.mat;
%-----------------------------------------------
% 译码预处理
[M K] = size(BakG); % [校验式个数 信息比特长度]
N = K+M; % 码子长度
R = K/N; % 码率
N
R
%-----------------------------------------------
% 产生随机数矩阵 1 X K*block
SourceData = randint(1,K*block);
%-----------------------------------------------
% 编码 245X343_G_187X156.mat
for i = 1:block
EncodeData((i-1)*N+1:i*N) = encode( SourceData( (i-1)*K+1:i*K ),BakG );
end
%clear SourceData;
%-----------------------------------------------
% 调制
ModulateData = modulate( EncodeData );
%-----------------------------------------------
% 不同信噪比下的性能
for i=4:num
iter=i
ITER_NUM = 0;
SNR(i) = i;
sigma = sqrt( 1/( 2 * R * 10^(SNR(i)/10) ) );
ChannelFactor = 2/(sigma^2);
%-----------------------------------------------
% 经过信道
ChannelData = channel( ModulateData, sigma );
%-----------------------------------------------
% 译码
for j=1:block
[DecodeData((j-1)*N+1:j*N),iter_num] = decode_log( ChannelData( (j-1)*N+1:j*N ), ChannelFactor, BakH,maxiter);
ITER_NUM = ITER_NUM + iter_num;
end
%-----------------------------------------------
% 计算误码率
ErrorBit=0; % 统计错误比特数
for j=1:N*block
if(DecodeData(j)~=EncodeData(j))
ErrorBit=ErrorBit+1;
end
end
ErrorBit
BER(i) = ErrorBit/(N*block); % 计算误码率
num_iter(i) = ITER_NUM/block;
end
%-----------------------------------------------
% 画图
clear i j index_row index_col ;
clear ModulateData ChannelData;
semilogy(SNR,BER);
grid on;
toc;