www.pudn.com > demo_turbo.rar > Block_Turbo_code.m
clear;clc;
EbN0=0:1:4;
% EbN0=10.^(EbN0_in_db/10);
% H=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
% 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 0;
% 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0;
% 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0;
% 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0;
% 0 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0];
H=[
1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 0;
0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0;
0 0 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0;
1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0;
0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0;
1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 0 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 1
];
alpha=[0,0.2,0.3,0.5,0.7,0.9,1.0,1.0];
beta=[0.2 0.4 0.6 0.8 1.0 1.0 1.0 1.0];
Frame_num=1000;
Pe=[];
for snr=EbN0
snr=snr+10*log10(2)+10*log10(26*26/32/32);
err=0;
for k=1:Frame_num
%%% (32,26)*(32,26) code
info=randn(26,26)>.5;
%%% coding
for row=1:26
row_coded(row,1:32)=extended_hamming_coding(info(row,:));
end
for col=1:32
col_coded(1:32,col)=(extended_hamming_coding(row_coded(1:26,col)'))';
end
tx=(col_coded-0.5)*2;
tx=reshape(tx,1,[]);
rx=awgn(tx,snr,'measured');
rx=reshape(rx,32,32);
%%% the minimum hamming distance is 4
W=zeros(32,32);
for iteration=1:8
%% column decoding
for col=1:32
%% form test vector.
R=rx(1:32,col)+alpha(iteration)*W(1:32,col);
Y=(1+sign(R))/2;
[minimum,place1]=min(abs(R));
[minimum,place2]=min(abs([R(1:place1-1);inf;R(place1+1:end)]));
if place1>place2
temp=place1;
place1=place2;
place2=temp;
end
[minimum,place3]=min(abs([R(1:place1-1);inf;R(place1+1:place2-1);inf;R(place2+1:end)]));
if place3place2
temp=place1;
place1=place2;
place2=temp;
end
[minimum,place3]=min(abs([R(1:place1-1);inf;R(place1+1:place2-1);inf;R(place2+1:end)]));
if place3