📄 dvbt_table_gen.m
字号:
% 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 + -