⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hard_viterbi_decode.txt

📁 viterbi硬判决的程序
💻 TXT
字号:
%soft viterbi and hard viterbi decode algorithm
clc
clear all

%modifiable parameters
m=2;%totol momery of convolution coder
r=0.5;%code rate
info_length=1000;%info length
g1=[1 1 1];
g2=[1 0 1];
Eb_N0=[1 2 3 4 5 6 ];
%end modifiable parameters

%defaule constant

Lc=4.*Eb_N0;

%end defaule constant

%need calculated constant
sigma=sqrt(1./(2*r.*Eb_N0));
%sigma=0;
%end need calculaterd constant

%generate ramdon informations
info=randint(1,info_length);
%end generate informatons

%convolutional coding
conv_gene=[info,0 0;0 ,info,0;0 0,info];
conv_coded1=mod(g1*conv_gene,2);
conv_coded2=mod(g2*conv_gene,2);
%end convolutional coding

%bpsk modulation
conv_coded1=1-2*conv_coded1;
conv_coded2=1-2*conv_coded2;
%end bpsk modulation

%decode for each Eb_N0
for SNR_i=1:length(Eb_N0)
    %generate noise for this Eb_N0 codition
    noise=sigma(SNR_i).*randn(1,info_length);
    noise=[noise 0 0];
    %end generate noise for this Eb_N0 codition
    
    %add noise
    receive1=conv_coded1+noise;
    receive2=conv_coded2+noise;
    %end add noise
    
    %viterbi decode
    likelihood_soft_1_4=[0 0 0 0];%initialization to zeros
    likelihood_hard_1_4=[0 0 0 0];%initialization to zeros
    track=zeros(4,1);
    track_temp=zeros(4,2);
    for VA_decode_i=1:info_length+m
        
        %hard decision
        if receive1(VA_decode_i)>0
            hard1_0=1;%error
            hard1_1=0;%right
        else
            hard1_0=0;%right
            hard1_1=1;%error
        end
        
        if receive2(VA_decode_i)>0
            hard2_0=1;%error
            hard2_1=0;%right
        else
            hard2_0=0;%right
            hard2_1=1;%error
        end
        %end hard decision
        hard=[hard1_1 hard2_1];
        
        %updata four states accumulation (for hard)
            %for S0 (   S0->S0              and         S1->S0)
            if likelihood_hard_1_4(1)+sum(abs([0 0]-hard))>likelihood_hard_1_4(2)+sum(abs([1 1]-hard))
                likelihood_hard_1_4_temp(1)=likelihood_hard_1_4(2)+sum(abs([1 1]-hard));
                track_temp(1,:)=[track(2,:) 0];
            else
                likelihood_hard_1_4_temp(1)=likelihood_hard_1_4(1)+sum(abs([0 0]-hard));
                track_temp(1,:)=[track(1,:) 0];
            end
            %for S1 (   S2->S1              and         S3->S1)
            if likelihood_hard_1_4(3)+sum(abs([1 0]-hard))>likelihood_hard_1_4(4)+sum(abs([0 1]-hard))
                likelihood_hard_1_4_temp(2)=likelihood_hard_1_4(4)+sum(abs([0 1]-hard));
                track_temp(2,:)=[track(4,:) 0];  
            else
                likelihood_hard_1_4_temp(2)=likelihood_hard_1_4(3)+sum(abs([1 0]-hard));
                track_temp(2,:)=[track(3,:) 0];
            end
            %for S2 (   S0->S2              and         S1->S2)
            if likelihood_hard_1_4(1)+sum(abs([1 1]-hard))>likelihood_hard_1_4(2)+sum(abs([0 0]-hard))
                likelihood_hard_1_4_temp(3)=likelihood_hard_1_4(2)+sum(abs([0 0]-hard));
                track_temp(3,:)=[track(2,:) 1];  
            else
                likelihood_hard_1_4_temp(3)=likelihood_hard_1_4(1)+sum(abs([1 1]-hard));
                track_temp(3,:)=[track(1,:) 1];
            end
            %for  S3(   S2->S3              and         S3->S3)
            if likelihood_hard_1_4(3)+sum(abs([0 1]-hard))>likelihood_hard_1_4(4)+sum(abs([1 0]-hard))
                likelihood_hard_1_4_temp(4)=likelihood_hard_1_4(4)+sum(abs([1 0]-hard));
                track_temp(4,:)=[track(4,:) 1]; 
            else
                likelihood_hard_1_4_temp(4)=likelihood_hard_1_4(3)+sum(abs([0 1]-hard));
                track_temp(4,:)=[track(3,:) 1];
            end
            
            %updata likelihood_hard and track
            likelihood_hard_1_4=likelihood_hard_1_4_temp;
            track=track_temp;
            track_temp(:,VA_decode_i+2)=0;
            %end updata likelihood_hard and track
    end
    %end viterbi decode (for special SNR)
    decode_info=track(1,2:info_length+1);
    error_num=sum(abs(decode_info-info));
    error_rate(SNR_i)=error_num/info_length;
end


error_rate
    
%disp
semilogy(Eb_N0,error_rate)
    
    
    
    
 























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -