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

📄 main.m

📁 用于通讯仿真的viterbi算法完整实现方案.用途广泛.
💻 M
字号:
clear all; close all;
clear all; close all;
 fr_length=input('please input frame length  :default 10  \n   ');
 if isempty(fr_length) 
   fr_length = 10;
 end  
frames=input('please input number of frame :default 5 \n    ');      %%%%%%%%%%  帧数  

 if isempty(frames) 
   frames = 5;
 end  
 
 EbN0_in=input('and the Eb/N0s in dB : ( in form [x x] ):defaut 2\n  ');
 
 if isempty(EbN0_in)
     EbN0_in=2;
 end
EbN0=10.^(EbN0_in/10);
%%%%%%%%%%%%%%%%%%%%%  生成卷积编码译码所需的网格 %%%%%%%
dlt(1:256,1:2,1:2)=[0];
 for i=1:256
     mm(1,1:9)=[0];
    din=dec2bin(i-1);
      for j=1:length(din)
          k=10-j;
           b=din(j);
          mm(1,k)=b-48;
      end
   
    y1=mod(mm(1,3)+mm(1,4)+mm(1,5)+mm(1,9),2);
    y2=mod(1+mm(1,3)+mm(1,4)+mm(1,5)+mm(1,9),2); 
    dlt(i,1,1)=y1;
    dlt(i,2,1)=y2;
  end
  for i=1:256
      mm(1,1:9)=[0];
    din=dec2bin(i-1);
      for j=1:length(din)
          k=10-j;
          b=din(j);
          mm(1,k)=b-48;
      end
   
    y1=mod(mm(1,2)+mm(1,3)+mm(1,4)+mm(1,6)+mm(1,8)+mm(1,9),2);
    y2=mod(1+mm(1,2)+mm(1,3)+mm(1,4)+mm(1,6)+mm(1,8)+mm(1,9),2); 

    dlt(i,1,2)=y1;
    dlt(i,2,2)=y2;
  end
  %%%%%%%%%%%%%%%%%%%%%%%%%%%% 产生译码矩阵  %%%%%%%%%%%%
 % dlt1(1:256,1:2,1:2)=[1];
  %for k=1:2
 %  for i=1:256
  %    for j=1:2
 %         if dlt(i,j,k)==0
     %         dlt1(i,j,k)=-1;
              %     end
              %%    end
              % end
              %end
     

  %%%%%%%%%% 产生状态计算矩阵 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
slt(1:256,1:2)=[0];
for i=1:256
    k=2*(mod(i-1,128))+1;
    slt(i,1)=k;
    slt(i,2)=k+1;
    
end

%%%%%%%%%%%%%%%%%%  source  %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%  产生随机序列,并组帧  %%%%%%%%%%%%%%
data_src=source9(fr_length,frames);
 for i=1:frames
   in_bits(i,:)=data_src(i,1:fr_length);
  end
   for i=1:frames*fr_length
        raw_bits(i)=in_bits(i);
    end    
%%%%%%%%%%%%%%%%%%%%  编码  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data_enc=conl(data_src,dlt,slt);
data_bpsk=bpsk(data_enc);
% AWGN 

    fprintf('Eb/N0 = %d dB',EbN0_in);
    sigma = 1/sqrt(EbN0);
    channal_out=data_bpsk+sigma.*randn(size(data_bpsk));
%%%%%%%%%%%%%%%%%%  viterbi 解码  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

data_out=softdecoder9(channal_out,dlt,slt);
% BER

  for i=1:frames*fr_length
      out_bits(i)=data_out(i);
   end
   
    
   ber=length(find(xor(raw_bits,out_bits)==1))/(frames*fr_length);
    fprintf('\n');
   fprintf('ber= %d',ber);
    fprintf('\n');

%%%%%%%%%%%%%%%%%%%%%%% end  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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