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

📄 decode.m

📁 1
💻 M
字号:
clear;

%第一部分: 文件的输入
fid = fopen('DATA_IN.txt', 'r');
a=fread(fid,'*char');
b= sscanf(a, '%d');
c=reshape(b,2,[])';
d=c(:,2);
input_data= d;
 fch_type = input('需要解析 FCH吗?(1代表是,0代表不是)');
 burst1_type= input('需要解析burst1吗?(1代表是,0代表不是)');
   if burst1_type==1
      ofdm_num_burst1=input('burst1的OFDM符号数是多少?');    %OFDM符号数
      demod_burst1=input('burst1的调制编码方式是多少?(BPSK1_2=0    QPSK1_2=1  QPSK3_4=2  16QAM1_2=3   16QAM3_4=4   64QAM2_3=5  64QAM3_4=6) '); ;       
   end 
 burst2_type = input('需要解析burst2吗?(1代表是,0代表不是)');
  if burst2_type==1
       BSID=input('burst2的BSID低四位是多少?(例如[1 0 0 0])' );
       DIUC=input('burst2的DIUC是多少?(例如[0 0 0 0])' );
       Frame_Number=input('burst2的Frame_Number是多少?(例如[0 0 0 0])' );
       ofdm_num_burst2=input('burst2的OFDM符号数是多少?');    %OFDM符号数
       demod_burst2=input('burst2的调制编码方式是多少?(PSK1_2=0    QPSK1_2=1  QPSK3_4=2  16QAM1_2=3   16QAM3_4=4   64QAM2_3=5  64QAM3_4=6) '); ;      
 end 

%-------------------------------------------------------------------------
%第二部分: 各种调制方式的交织模块参数
% BPSK交织
Ncbps= 192;
Ncpc= 1;
k = 0 : Ncbps - 1;
mk = (Ncbps/12) * mod(k,12) + floor(k/12);

s = ceil(Ncpc/2);
jk = s * floor(mk/s) + mod(s, mk + Ncbps - floor(12 * mk/Ncbps));

[s,int_idx_BPSK]=sort(jk);

% QPSK交织
Ncbps = 384;
Ncpc = 2;
k = 0 : Ncbps - 1;
mk = (Ncbps/12) * mod(k,12) + floor(k/12);

s = ceil(Ncpc/2);
jk = s * floor(mk/s) + mod(s, mk + Ncbps - floor(12 * mk/Ncbps));

[s,int_idx_QPSK]=sort(jk);

% 16QAM交织
Ncbps = 768;
Ncpc = 4;
k = 0 : Ncbps - 1;
mk = (Ncbps/12) * mod(k,12) + floor(k/12);

s = ceil(Ncpc/2);
jk = s * floor(mk/s) + mod(s, mk + Ncbps - floor(12 * mk/Ncbps));

[s,int_idx_16QAM]=sort(jk);

% 64QAM交织
Ncbps = 1152;
Ncpc = 6;
k = 0 : Ncbps - 1;
mk = (Ncbps/12) * mod(k,12) + floor(k/12);

s = ceil(Ncpc/2);
jk = s * floor(mk/s) + mod(s, mk + Ncbps - floor(12 * mk/Ncbps));

[s,int_idx_64QAM]=sort(jk);


%-------------------------------------------------------------------------
%第三部分: RS编解码模块参数

%RS编解码
genPoly = gf(1,8);
for idx = 0 : 15
    genPoly = conv(genPoly, [1 gf(2,8)^idx]);
end

primPoly = [1 0 0 0 1 1 1 0 1];

%-------------------------------------------------------------------------
%第四部分: FCH解码部分
%FCH  Decode
    
if (fch_type ~= 0)
FCH_DATA=input_data(1:201);
     remove_input=FCH_DATA;
     ofdm_num_FCH=1;
     remove_pilot_dummy_index=[1:12,14:37,39:62,64:87,89:100,102:113,115:138,140:163,165:188,190:201];%去掉导频,0波
     
     %deint_input=input_data      %当不用去导频时候,使用这个作为解交织的输入,但要把上面的4行注释掉
     
     num_of_bits_per_interger=1;   %转2进制
     int_idx=int_idx_BPSK;      %解交织的图样   
     
     puncture=reshape([1;1],2,1);  %解卷积的打孔图样
     sample_time_deconv=1/192 ; %解卷积的输入采样时间
     sample_time_deRS=1/88;      %解RS的输入采样时间
     sample_time_deRS_out=1/88;      %解RS的输入采样时间
     
     rs_selector1=[1:11];
     rs_selector1_len=11;            
     rs_selector2=[229:239];
     rs_selector2_len=239;
     
     pn_initial=[1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 ];  
     
     sim_time=0;
     sim('remove_pilot_and_dummy');
     sim('deconv');
     deconv=deconv(9:end);
     sim('decode_new');
     FCH_output=final_decode_result;
   fid = fopen('FCH_output.txt','w');
     fprintf(fid,'%d',FCH_output);
     fclose(fid);
 else FCH_output=[];    
    fid = fopen('FCH_output.txt','w');%将以前的数据清空
     fprintf(fid,'%d',FCH_output);
     fclose(fid);
end
         
%-------------------------------------------------------------------------   
%第五部分: Burst1#解码部分

%Burst1# Decode

if (burst1_type ~= 0)

Burst1_data=input_data(202:201+ofdm_num_burst1*201);
remove_input=Burst1_data;
remove_pilot_dummy_index=[1:12,14:37,39:62,64:87,89:100,102:113,115:138,140:163,165:188,190:201];%去掉导频,0波

%deint_input=input_data(193:192+ofdm_num_burst1*192)  %当不用去导频时候,使用这个作为解交织的输入,但要把上面的3行注释掉
     


switch  demod_burst1
    case 0,   %BPSK 1_2
       num_of_bits_per_interger=1;   %转2进制
       int_idx=int_idx_BPSK;         %解交织的图样   
       deconv_input_sample_time_burst =1/192;      %解卷积的输入采样时间
       puncture=reshape([1;1],2,1);           %解卷积的打孔图样
       deRS_input_sample_time_burst =1/96  ;          %解RS的输入采样时间
       deRS_output_sample_time_burst =1/96 
       rs_selector1=[1:12];        %解RS的选择器1#
       rs_selector1_len=12;
       rs_selector2=[228:239];     %解RS的选择器2#
       rs_selector2_len=239;
         
    case 1,    %QPSK 1_2
       num_of_bits_per_interger=2;   %转2进制
       int_idx=int_idx_QPSK;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/256 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst =1/192;  %解RS的输 出 采样时间,比上面的输入采样时间少!!
       rs_selector1=[1:32];
       rs_selector1_len=32;
       rs_selector2=[216:239];
       rs_selector2_len=239;
       puncture=reshape([1 0;1 1 ], 4, 1);  
    
    case 2,    %QPSK 3_4
       num_of_bits_per_interger=2;   %转2进制
       int_idx=int_idx_QPSK;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/320 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/288;
       rs_selector1=[1:40];
       rs_selector1_len=40;
       rs_selector2=[204:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);

    case 3,   %16QAM 1_2
       num_of_bits_per_interger=4;
       int_idx=int_idx_16QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/512 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/384;
       rs_selector1=[1:64];
       rs_selector1_len=64;
       rs_selector2=[192:239];
       rs_selector2_len=239;
       puncture=reshape([1 0;1 1 ], 4, 1);  
       
        
   case 4,   %16QAM 3_4
      num_of_bits_per_interger=4;
      int_idx=int_idx_16QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/640 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/576;
       rs_selector1=[1:80];
       rs_selector1_len=80;
       rs_selector2=[168:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);
       
   case 5, %64QAM 2_3
      num_of_bits_per_interger=6;
      int_idx=int_idx_64QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/864 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/768;
       rs_selector1=[1:108];
       rs_selector1_len=108;
       rs_selector2=[144:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 ;1 1 0], 6, 1);     
       
    case 6,  %64QAM 3_4
      num_of_bits_per_interger=6;
      int_idx=int_idx_64QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/960 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/864;
       rs_selector1=[1:120];
       rs_selector1_len=120;
       rs_selector2=[132:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);
       
       
end

sim_time=ofdm_num_burst1-1;     %三个模块的仿真时间(一样的,每秒处理一个符号)
sample_time_deconv  =deconv_input_sample_time_burst ;
sample_time_deRS  =deRS_input_sample_time_burst ;
sample_time_deRS_out= deRS_output_sample_time_burst;
pn_initial=[1 1 1 0 1 1 0 1 0 0 0 1 0 1 1 ];  

sim('remove_pilot_and_dummy');
remove_result=deint_input;

sim('deconv');
deconv_result=deconv;

deconv=deconv(9:end);
sim('decode_new');
burst1_output=final_decode_result(1:end-8);
     fid = fopen('burst1_output.txt','w');
     fprintf(fid,'%d',burst1_output);
     fclose(fid);
else burst1_output=[]; 
    fid = fopen('burst1_output.txt','w');
     fprintf(fid,'%d',burst1_output);
     fclose(fid);
end;


%-------------------------------------------------------------------------
%第六部分: Burst2#解码部分

%Burst2# Decode
if (burst2_type ~= 0)
    
 % BSID=[1 0 0 0];
  PAD1=[1 1];
 % DIUC=[0 0 0 0];
  PAD2=[1];
 % Frame_Number=[0 0 0 0];
  pn_initial=[BSID PAD1 DIUC PAD2 Frame_Number];  



  
burst1_end=201+ofdm_num_burst1*201;
Burst2_data=input_data(burst1_end+1 : burst1_end+ofdm_num_burst2*201);
remove_input=Burst2_data;
remove_pilot_dummy_index=[1:12,14:37,39:62,64:87,89:100,102:113,115:138,140:163,165:188,190:201];%去掉导频,0波

%burst1_end=192+ofdm_num_burst1*192;
%deint_input=input_data(burst1_end+1 : burst1_end+ofdm_num_burst2*192)  %当不用去导频时候,使用这个作为解交织的输入,但要把上面的4行注释掉

switch  demod_burst2
    case 0,
       num_of_bits_per_interger=1;   %转2进制
       int_idx=int_idx_BPSK;         %解交织的图样   
       deconv_input_sample_time_burst =1/192;      %解卷积的输入采样时间
       puncture=reshape([1;1],2,1);           %解卷积的打孔图样
       deRS_input_sample_time_burst =1/96  ;          %解RS的输入采样时间
       rs_selector1=[1:12];        %解RS的选择器1#
       rs_selector1_len=12;
       rs_selector2=[228:239];     %解RS的选择器2#
       rs_selector2_len=239;
         
       case 1,    %qpsk 1_2
       num_of_bits_per_interger=2;   %转2进制
       int_idx=int_idx_QPSK;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst=1/256 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/192;  %解RS的输 出 采样时间,比上面的输入采样时间少!!
       rs_selector1=[1:32];
       rs_selector1_len=32;
       rs_selector2=[216:239];
       rs_selector2_len=239;
       puncture=reshape([1 0;1 1 ], 4, 1);  
    
    case 2,    %qpsk 3_4
       num_of_bits_per_interger=2;   %转2进制
       int_idx=int_idx_QPSK;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/320 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst =1/288;
       rs_selector1=[1:40];
       rs_selector1_len=40;
       rs_selector2=[204:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);
 case 3,   %16QAM 1_2
       num_of_bits_per_interger=4;
       int_idx=int_idx_16QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/512 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/384;
       rs_selector1=[1:64];
       rs_selector1_len=64;
       rs_selector2=[192:239];
       rs_selector2_len=239;
       puncture=reshape([1 0;1 1 ], 4, 1);  
       
        
   case 4,   %16QAM 3_4
      num_of_bits_per_interger=4;
      int_idx=int_idx_16QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/640 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/576;
       rs_selector1=[1:80];
       rs_selector1_len=80;
       rs_selector2=[168:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);
       
   case 5, %64QAM 2_3
      num_of_bits_per_interger=6;
      int_idx=int_idx_64QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/864 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/768;
       rs_selector1=[1:108];
       rs_selector1_len=108;
       rs_selector2=[144:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 ;1 1 0], 6, 1);     
       
    case 6,  %64QAM 3_4
      num_of_bits_per_interger=6;
      int_idx=int_idx_64QAM;
       deconv_input_sample_time_burst=1/192 ; %解卷积的输入采样时间
       deRS_input_sample_time_burst =1/960 ;  %解RS的输入采样时间
       deRS_output_sample_time_burst=1/864;
       rs_selector1=[1:120];
       rs_selector1_len=120;
       rs_selector2=[132:239];
       rs_selector2_len=239;
       puncture=reshape([1 0 1 0 1;1 1 0 1 0], 10, 1);    
   
end

sim_time=ofdm_num_burst2-1;     %三个模块的仿真时间(一样的,每秒处理一个符号)
sample_time_deconv  =deconv_input_sample_time_burst ;
sample_time_deRS  =deRS_input_sample_time_burst ;
sample_time_deRS_out= deRS_output_sample_time_burst;

sim('remove_pilot_and_dummy');
remove_result2=deint_input;

sim('deconv');
deconv_result2=deconv;

deconv=deconv(9:end);
sim('decode_new');
burst2_output=final_decode_result(1:end-8);

fid = fopen('burst2_output.txt','w');
     fprintf(fid,'%d',burst2_output);
     fclose(fid);
else burst2_output=[];   
     fid = fopen('burst2_output.txt','w');
     fprintf(fid,'%d',burst2_output);
     fclose(fid);
end;
 all_output=[FCH_output;burst1_output;burst2_output];
     fid = fopen('all_output.txt','w');
     fprintf(fid,'%d',all_output);
     fclose(fid);   


⌨️ 快捷键说明

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