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