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

📄 dvbt_table_gen.m

📁 基于小波变换的调制识别方法.里面包含如下内容:QAM、PSK、FSK、AM和OFDM信号源生成程序
💻 M
📖 第 1 页 / 共 2 页
字号:
% DVB_TABLE_GEN Generate interleaver and modulator lookup tables for DVB demo

% Copyright 1996-2001 The MathWorks, Inc.
%   $Revision: 1.3 $  $Date: 2001/04/05 04:33:06 $
clear all
clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  The interface of fuction (new added fuction.)
%%%
%%%   notes:
%%%   According to the ETSI DVB-T Standard,
%%%   Guard_interval can be 1/4,1/8,1/16,1/32;
%%%   Qam can be 2 for QPSK,4 for 16QAM and 6 for 64QAM.
%%%   rate can be 1/2,2/3,3/4,5/6,7/8.
%%%   Change the Guard_interval,Qam and rate here,all the varible parameter can be acquired automatically.
%%%   frame_mode indicates the frame numbers that a super frame contains.In can only be 1,2,3 and 4.
%%%
guard_interval=1/4;
guard = guard_interval;  
guard_lp=log2(1/guard_interval)-1;
Qam=6;%6-64qam  4-16qam  2-qpsk
rate=2/3;
frame_mode=1;
sample_time=7/64000000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Set the sample time (to avoid platform specific differences)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  Chang  1:  Ts   
bit_rate=1/(224*(1+guard_interval))*1512*Qam*rate*188/204*1000000;   %(  see the table 17,P34 )
Ts =1/(bit_rate/8);   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Section numbers refer to the ETSI DVB-T Standard,
% EN 300 744 V1.1.2 (1997-08)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  new added fuction.
%
% Compute lookup table for puncture.
% as table 2,P13.
%
  switch rate,
      case  1/2,
          puncture = [1 1]';
      case  2/3,
          puncture = [1 1 0 1]';
      case  3/4,
          puncture = [1 1 0 1 1 0]';
      case  5/6,
          puncture = [1 1 0 1 1 0 0 1 1 0]';
      case  7/8,
          puncture = [1 1 0 1 0 1 0 1 1 0 0 1 1 0]';
      otherwise
          error(['error rate=',num2str(rate)]);
  end        
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  Set the size of buffer to adapt different rate.
  switch rate,
         case {1/2,2/3,3/4},
            buffer1=3264;
            buffer2=1632/rate;
         case 5/6,
            buffer1=3264*5;
            buffer2=1632/rate*5;
         case 7/8,
            buffer1=1512*Qam*14/8;
            buffer2=1512*Qam;
         otherwise
            error(['error rate =',num2str(rate)]);
  end  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  Change
%
% Compute lookup table for inner bit-wise interleaver 
% as per section 4.3.4.1
%

% Initial table setup
dvb_bit_int_table = 1:Qam*126;
dvb_bit_int_table = reshape(dvb_bit_int_table, Qam, 126);

% QAM non-hierarchical demultiplexing
switch Qam,
       case 2,
              dvb_bit_int_table = dvb_bit_int_table([1 2],:);
              dvb_bit_int_table(1,:) = dvb_bit_int_table(1,mod([0:125] +  0,126) + 1);
              dvb_bit_int_table(2,:) = dvb_bit_int_table(2,mod([0:125] + 63,126) + 1);
          case 4,
              dvb_bit_int_table = dvb_bit_int_table([1 3 2 4],:);
              dvb_bit_int_table(1,:) = dvb_bit_int_table(1,mod([0:125] +  0,126) + 1);
              dvb_bit_int_table(2,:) = dvb_bit_int_table(2,mod([0:125] + 63,126) + 1);
              dvb_bit_int_table(3,:) = dvb_bit_int_table(3,mod([0:125] +105,126) + 1);
              dvb_bit_int_table(4,:) = dvb_bit_int_table(4,mod([0:125] + 42,126) + 1);
       case 6,  
              dvb_bit_int_table = dvb_bit_int_table([1 4 2 5 3 6],:);
              % Six individual interleavers
              dvb_bit_int_table(1,:) = dvb_bit_int_table(1,mod([0:125] +  0,126) + 1);
              dvb_bit_int_table(2,:) = dvb_bit_int_table(2,mod([0:125] + 63,126) + 1);
              dvb_bit_int_table(3,:) = dvb_bit_int_table(3,mod([0:125] +105,126) + 1);
              dvb_bit_int_table(4,:) = dvb_bit_int_table(4,mod([0:125] + 42,126) + 1);
              dvb_bit_int_table(5,:) = dvb_bit_int_table(5,mod([0:125] + 21,126) + 1);
              dvb_bit_int_table(6,:) = dvb_bit_int_table(6,mod([0:125] + 84,126) + 1);
       otherwise
           error(['error QAM=',num2str(Qam)]);
end           
% Flatten matrix into lookup table
dvb_bit_int_table = dvb_bit_int_table(:);

%
% Compute lookup table for inner symbol interleaver 
% as per section 4.3.4.2
%

% Following Figure 8a and accompanying equations
q = 0;
h = zeros(1,2048);
R = zeros(1,10);
for indx = 0:2047,
   if indx == 2,
      R(1) = 1;
   end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    Change 2: inner symbol interleaver
  % Rsum = R(1)*2^9+R(8)*2^8+R(6)*2^7+R(2)*2^6+...
   %   R(9)*2^5+R(3)*2^4+R(7)*2^3+R(10)*2^2+R(4)*2^1+R(5)*2^0;
   Rsum =  R(3)*2^9+R(6)*2^8+R(9)*2^7+R(4)*2^6+...
      R(8)*2^5+R(1)*2^4+R(2)*2^3+R(5)*2^2+R(7)*2^1+R(10)*2^0;
   h(q+1) = rem(indx,2)*2^10+Rsum;
   if h(q+1)<1512,
      q = q + 1;
   end
   newbit = xor(R(1),R(4));
   R = [R(2:10) newbit];
end
dvb_sym_int_table = h(1:1512)+1;

% Clear unnecessary variables from workspace
  clear R Rsum h indx newbit q

% Expand table to accomodate Qam-bit words
switch Qam,
    case 2,
           dvb_sym_int_table = [dvb_sym_int_table*2-1; 
	                            dvb_sym_int_table*2];
    case 4,
           dvb_sym_int_table = [dvb_sym_int_table*4-3; 
	                            dvb_sym_int_table*4-2;
					            dvb_sym_int_table*4-1;
					            dvb_sym_int_table*4];
					         
    case 6,    
           dvb_sym_int_table = [dvb_sym_int_table*6-5; 
	                            dvb_sym_int_table*6-4;
					            dvb_sym_int_table*6-3;
					            dvb_sym_int_table*6-2;
					            dvb_sym_int_table*6-1; 
					            dvb_sym_int_table*6];
    otherwise
         error(['error QAM=',num2str(Qam)]);
end           
% Flatten matrix into lookup table
dvb_sym_int_table = dvb_sym_int_table(:);

%
% Compute lookup table for 64-QAM non-hierarchical modulator  
% as per section 4.3.5
%

% Reading the values from Figure 9a
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   Change 3 :  64-QAM non-hierarchical modulator    
switch Qam,
    case 2,
        dvbt_qam = [1.0000+1.0000i
                   -1.0000+1.0000i
                    1.0000-1.0000i
                   -1.0000-1.0000i];
          % Normalization factor from Section 4.4 
               dvbt_qam = dvbt_qam/sqrt(2);    
    case 4,
        dvbt_qam = [3.0000+3.0000i
                   -3.0000+3.0000i
                    3.0000-3.0000i
                   -3.0000-3.0000i
                    1.0000+3.0000i
                   -1.0000+3.0000i
                    1.0000-3.0000i
                   -1.0000-3.0000i
                    3.0000+1.0000i
                   -3.0000+1.0000i
                    3.0000-1.0000i
                   -3.0000-1.0000i
                    1.0000+1.0000i
                   -1.0000+1.0000i
                    1.0000-1.0000i
                   -1.0000-1.0000i]; 
          % Normalization factor from Section 4.4
               dvbt_qam = dvbt_qam/sqrt(10);     
      case 6,        
dvbt_qam = [ 7.0000i + 7.0000
             7.0000i - 7.0000
            -7.0000i + 7.0000
            -7.0000i - 7.0000
             7.0000i + 1.0000
             7.0000i - 1.0000
            -7.0000i + 1.0000
            -7.0000i - 1.0000
             1.0000i + 7.0000
             1.0000i - 7.0000
            -1.0000i + 7.0000
            -1.0000i - 7.0000
             1.0000i + 1.0000
             1.0000i - 1.0000
            -1.0000i + 1.0000
            -1.0000i - 1.0000
             7.0000i + 5.0000
             7.0000i - 5.0000
            -7.0000i + 5.0000
            -7.0000i - 5.0000
             7.0000i + 3.0000
             7.0000i - 3.0000
            -7.0000i + 3.0000
            -7.0000i - 3.0000
             1.0000i + 5.0000
             1.0000i - 5.0000
            -1.0000i + 5.0000
            -1.0000i - 5.0000
             1.0000i + 3.0000
             1.0000i - 3.0000
            -1.0000i + 3.0000
            -1.0000i - 3.0000
             5.0000i + 7.0000
             5.0000i - 7.0000
            -5.0000i + 7.0000
            -5.0000i - 7.0000
             5.0000i + 1.0000
             5.0000i - 1.0000
            -5.0000i + 1.0000
            -5.0000i - 1.0000
             3.0000i + 7.0000
             3.0000i - 7.0000
            -3.0000i + 7.0000
            -3.0000i - 7.0000
             3.0000i + 1.0000
             3.0000i - 1.0000
            -3.0000i + 1.0000
            -3.0000i - 1.0000
             5.0000i + 5.0000
             5.0000i - 5.0000
            -5.0000i + 5.0000
            -5.0000i - 5.0000
             5.0000i + 3.0000
             5.0000i - 3.0000
            -5.0000i + 3.0000
            -5.0000i - 3.0000
             3.0000i + 5.0000
             3.0000i - 5.0000
            -3.0000i + 5.0000
            -3.0000i - 5.0000
             3.0000i + 3.0000
             3.0000i - 3.0000
            -3.0000i + 3.0000
            -3.0000i - 3.0000];

		
% Normalization factor from Section 4.4
          dvbt_qam = dvbt_qam/sqrt(42);
otherwise

⌨️ 快捷键说明

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