📄 dvbt_table_gen.m
字号:
error(['error QAM=',num2str(Qam)]);
end
%
% Format pilot position: scattered pilot;continual pilot;Tps pilot;
%
% continual pilot
p_cp = [0 48 54 87 141 156 192 201 255 279 282 333 432 450 483 525 531 618 636 ...
714 759 765 780 804 873 888 918 939 942 969 984 1050 1101 1107 1110 1137 ...
1140 1146 1206 1269 1323 1377 1491 1683 1704]+1;
% scattered pilot
p_sp = 0;
for p = 1:141
p_sp = [p_sp 12*p];
end
p_sp = p_sp + 1;
p=0;
for p = 1:2
p_sp = [p_sp;p_sp+3*p];
end
% Tps pilot
p_tps = [34 50 209 346 413 569 595 688 790 901 1073 1219 1262 1286 1469 1594 1687]+1;
% p_tps_data = zeros(1,113);
% p_tps_data = [0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
% ------------------------------- ----------- ---- ---- ------ ----------- ---- ---- ---------------------------
% 同步字 保护间隔1/8 备用
% p_tps_data = p_tps_data';
syn_odd=[0 0 1 1 0 1 0 1 1 1 1 0 1 1 1 0]; % 同步字
syn_even=[1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1];
length_indicator=[0 1 0 1 1 1];
switch frame_mode,
case 1,
frame_number=[0 0]; % frame number 1 in the super frame.
case 2,
frame_number=[0 1];
case 3,
frame_number=[1 0];
case 4,
frame_number=[1 1];
otherwise
error(['error frame mode',num2str(frame_mode)]);
end
switch Qam,
case 2,
constellation=[0 0];
case 4,
constellation=[0 1];
case 6,
constellation=[1 0];
otherwise
error(['error QAM=',num2str(Qam)]);
end
layer=[0 0 0]; % non hierarchical
switch rate,
case 1/2,
code_rate_hp=[0 0 0];
code_rate_lp=[0 0 0];
case 2/3,
code_rate_hp=[0 0 1];
code_rate_lp=[0 0 0];
case 3/4,
code_rate_hp=[0 1 0];
code_rate_lp=[0 0 0];
case 5/6,
code_rate_hp=[0 1 1];
code_rate_lp=[0 0 0];
case 7/8,
code_rate_hp=[1 0 0];
code_rate_lp=[0 0 0];
otherwise
error(['error rate=',num2str(rate)]);
end
switch guard_interval,
case 1/4,
interval=[1 1];
case 1/8,
interval=[1 0];
case 1/16,
interval=[0 1];
case 1/32,
interval=[0 0];
otherwise
error(['error Guard_interval=',num2str(Guard_interval)]);
end
tran_mode=[0 0]; % only for 2k mode.
set_zeros=zeros(1,14);
p_tps_data_odd=[syn_odd length_indicator frame_number constellation layer code_rate_hp code_rate_lp interval tran_mode set_zeros];
p_tps_data_even=[syn_even length_indicator frame_number constellation layer code_rate_hp code_rate_lp interval tran_mode set_zeros];
%
% generate the Gain Matrix of Pilot
%
m_cp = zeros(1,1705);
m_sp1 = zeros(1,1705);
m_sp2 = zeros(1,1705);
m_sp3 = zeros(1,1705);
m_sp4 = zeros(1,1705);
m_tps = zeros(1,1705);
p = 0;
l = length(p_cp);
for p = 1:l
m_cp(p_cp(p)) = 1;% Gain Matrix of cp
end
p = 0;
l = length(p_tps);
for p = 1:l
m_tps(p_tps(p)) = 1;% Gain Matrix of tps
end
p = 0;
l = length(p_sp);
for p = 1:l
m_sp1(p_sp(1,p)) = 1;% Gain Matrix of sp
m_sp2(p_sp(2,p)) = 1;% Gain Matrix of sp
m_sp3(p_sp(3,p)) = 1;% Gain Matrix of sp
m_sp4(p_sp(4,p)) = 1;% Gain Matrix of sp
end
m_cp = m_cp';
m_tps = m_tps';
m_sp1 = m_sp1';
m_sp2 = m_sp2';
m_sp3 = m_sp3';
m_sp4 = m_sp4';
%
% Insert Zero Matrix to Data
%
m_data_temp = ones(1705,1) - m_cp - m_tps;
m_data1 = m_data_temp - m_sp1;
m_data1 = (m_data1 + abs(m_data1))./2;
m_data2 = m_data_temp - m_sp2;
m_data2 = (m_data2 + abs(m_data2))./2;
m_data3 = m_data_temp - m_sp3;
m_data3 = (m_data3 + abs(m_data3))./2;
m_data4 = m_data_temp - m_sp4;
m_data4 = (m_data4 + abs(m_data4))./2;
clear p l p_tps p_sp m_data_temp
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% new added fuction
%
% Generation of PRBS sequence:w(1:1705)
%
w(1:1705)=0;
x(1:11)=1;
w(1)=x(11);
for i= 2:1705
temp=x;
x(2)=temp(1);
x(3)=temp(2);
x(4)=temp(3);
x(5)=temp(4);
x(6)=temp(5);
x(7)=temp(6);
x(8)=temp(7);
x(9)=temp(8);
x(10)=temp(9);
x(11)=temp(10);
x(1)=bitxor(temp(9),temp(11));
w(i)=x(11);
end
%
% Generation of pilot and tps value
%
m_pilot=zeros(4,1705);
m_pilot(1,:) = m_cp'+m_sp1';
m_pilot(2,:) = m_cp'+m_sp2';
m_pilot(3,:) = m_cp'+m_sp3';
m_pilot(4,:) = m_cp'+m_sp4';
pilot=zeros(4,1705);
for i=1:4
for k=1:1705
if(m_pilot(i,k)~=0)
pilot(i,k)=4/3*2*(1/2-w(k));
end
end
end
%
%%% In a super frame,the first and the third frame tps.
%
tps_odd=zeros(68,1705);
p_tps_data_odd=[p_tps_data_odd,zeros(1,60)];
genpoly=[1 1 1 0 1 1 1 0 1 1 0 0 0 0 1];
temp_odd=encode(p_tps_data_odd',127,113,'bch',genpoly);
tps_encode_odd(1:53)=temp_odd(15:67);
tps_encode_odd(54:67)=temp_odd(1:14);
for i=1:1705
if(m_tps(i)==1)
tps_odd(1,i)=2*(1/2-w(i));
end
end
for i=2:68
if(tps_encode_odd(i-1)==0)
tps_odd(i,:)=tps_odd(i-1,:);
else
tps_odd(i,:)=(-1)*tps_odd(i-1,:);
end
end
%
%%% In a super frame,the second and the fourth frame tps.
%
tps_even=zeros(68,1705);
p_tps_data_even=[p_tps_data_even,zeros(1,60)];
genpoly=[1 1 1 0 1 1 1 0 1 1 0 0 0 0 1];
temp_even=encode(p_tps_data_even',127,113,'bch',genpoly);
tps_encode_even(1:53)=temp_even(15:67);
tps_encode_even(54:67)=temp_even(1:14);
for i=1:1705
if(m_tps(i)==1)
tps_even(1,i)=2*(1/2-w(i));
end
end
for i=2:68
if(tps_encode_even(i-1)==0)
tps_even(i,:)=tps_even(i-1,:);
else
tps_even(i,:)=(-1)*tps_even(i-1,:);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Guard Interval
%
%
% Channel Parameter
%
ch_p=[0.057662 0.176809 0.407163 0.303585 0.258782 0.061831 0.150340 0.051534 0.185074 0.400967...
0.295723 0.350825 0.262909 0.225894 0.170996 0.149723 0.240140 0.116587 0.221155 0.259730];
ch_t=[1.003019 5.422091 0.518650 2.751772 0.602895 1.016585 0.143556 0.153832 3.324866 1.935570...
0.429948 3.228872 0.848831 0.073883 0.203952 0.194207 0.924450 1.381320 0.640512 1.368671];
ch_a=[4.855121 3.419109 5.864470 2.215894 3.758058 5.430202 3.952093 1.093586 5.775198 0.154459...
5.928383 3.053023 0.628578 2.128544 1.099463 3.462951 3.664773 2.833799 3.334290 0.393889];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%收端均衡
cls_p=0.5;
Num_p_cp=45;
m_sp=[m_sp1';m_sp2';m_sp3';m_sp4'];
p_sp_value1=m_sp1'*4/3;
p_sp_value2=m_sp2'*4/3;
p_sp_value3=m_sp3'*4/3;
p_sp_value4=m_sp4'*4/3;
data_addr_temp=[1:1705;1:1705;1:1705;1:1705];
for i=1:4
data_addr_temp(i,:)=data_addr_temp(i,:).*(~m_sp(i,:)).*(~m_cp').*(~m_tps');
end
data_addr=zeros(4,1512);
for i=1:4
data_addr(i,:)=find(data_addr_temp(i,:)>0);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -