📄 polit_gen.m
字号:
function [flag_p1,flag_p2,daopin1,daopin2]=polit_gen()
% 本程序的应用背景:
% 单个小区,只有一个用户,程序中所有资源块为一个用户适用
% *****************导频的产生*************
% N1表示物理层小区ID
% N2表示每个物理小区内的ID
% n_s 表示每个广播帧的时隙号
% l表示每个时隙中OFDM号
% 根据要求设置参数为:每个广播帧有20个时隙,第0号时隙有7个OFDM符号,第1-19号时隙分别有6个时隙
% 为了降低实现的复杂度,同时又能够仿真出规范要求的帧结构,这里只选择第0号时隙和第1号时隙,其余时隙同时隙1
N_cell = 0;
% 假设小区的ID号为0
% 产生 x2 m序列的初始值c_init
for n_s = 0
N_cp = 0;
for l = 0:6
c_init((n_s+1)*l+1) = 2.^10*(7*(n_s+1)+l+1)*(2*N_cell+1)+2*N_cell+N_cp;
end
end
for n_s = 1
N_cp = 1;
for l = 0:5
c_init(6*(n_s-1)+l+8) = 2.^10*(7*(n_s+1)+l+1)*(2*N_cell+1)+2*N_cell+N_cp;
end
end
% 第0号时隙7个OFDM符号,第1-19号时隙各有6个OFDM符号,每个符号一个初始值,共计121个,这里只有13个
c2_init = reshape(c_init,13,1);
c2 = de2bi(c2_init,31,'left-msb');
% 将10进制表示的x2 初始值转换成2进制表示
% 产生伪随机序列c
% 每一时隙资源块数最多为110
N_rb_max = 110;
Nc = 1600;
M_pn = 4*N_rb_max;
% M_pn表示输出伪随机序列的长度
% 对于M_pn值的设定有点疑问...
x1 = [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ];
for n = 1:1600+M_pn
x1(n+31) = mod(x1(n+3)+x1(n),2);
end
% 生成x1 第一个 m 序列
x2 = c2;
for i= 1:2
for j = 1:1600+M_pn
x2(i,j+31) = mod(x2(i,j+3)+x2(i,j+2)+x2(i,j+1)+x2(i,j),2);
end
end
% 生成x2 第二个 m 序列
% 产生伪随机所需要的x1, x2 序列都已经产生了
% 利用x1,x2 两个m 序列产生伪随机序列的值
for n = 1:M_pn+1
for i = 1:13
c(i,n) = mod(x1(n+Nc)+x2(i,n+Nc),2)
end
end
% 生成导频信号
% 每一时隙资源块数最多为110
for i = 1:13
for m = 1:2*N_rb_max
r(i,m) = (1-2*c(i,2*m-1))/sqrt(2)+sqrt(-1)*(1-2*c(i,2*m))/sqrt(2)
end
end
% r即为产生的导频,每一个OFDM符号有220个导频bit
%***************导频映射为 rescource element************
% 当带宽为3Mhz时,每个时隙中RB的数量为15,每个RB有12个载波.
% 应该差生12*15=180个导频图案
N_rb = 15;
v_shift = 0;
% v_shift本应该等于 mod(N_cell,6),这里假设N_cell = 0
m1 = m+N_rb_max-N_rb;
for n_s = 1:2
if n_s == 1
N_symb = 7;
for l = 1:N_symb
for p = 1:2
% N_symbl表示每个时隙的OFDM符号个数
if p == 0+1 && l==0+1
% p 表示天线的端口号,l表示OFDM的号数
v = 0;
elseif p ==0+1 && l == N_symb-3+1
v = 3;
elseif p ==1+1 && l == 0+1
v = 3;
else p == 1+1 && l == N_symb-3+1
v = 0;
end
for m = 1:2*N_rb
k = 6*m+mod(v+v_shift,6);
m1 = m+N_rb_max-N_rb;
if l == 2 || l == 3 || l == 4 || l == 6 || l == 7
a11(k,l) = 0;
a11_flag(k,l) = 0;
a21(k,l) = 0;
a21_flag(k,l) = 0;
else
if p ==1
a11(k,l) = r(l,m1);
a11_flag(k,l) = 1;
else a21(k,l) = r(l,m1);
a21_flag(k,l) = 1;
end
end
end
end
end
else n_s == 2
N_symb = 6;
for l = 1:N_symb
for p = 1:2
% N_symbl表示每个时隙的OFDM符号个数
if p == 0+1 && l==0+1
% p 表示天线的端口号,l表示OFDM的号数
v = 0;
elseif p ==0+1 && l == N_symb-3+1
v = 3;
elseif p ==1+1 && l == 0+1
v = 3;
else p == 1+1 && l == N_symb-3+1
v = 0;
end
for m = 1:2*N_rb
k = 6*m+mod(v+v_shift,6);
m1 = m+N_rb_max-N_rb;
if l == 2 || l == 3 || l == 5 || l == 6
a12(k,l) = 0;
a12_flag(k,l) = 0;
a22(k,l) = 0;
a22_flag(k,l) = 0;
else
if p ==1
a12(k,l) = r(l,m1);
a12_flag(k,l) = 1;
else a22(k,l) = r(l,m1);
a22_flag(k,l) = 1;
end
end
end
end
end
end
end
a1 = cat (2,a11,a12);
a2 = cat (2,a21,a22);
a1_flag = cat (2,a11_flag,a12_flag);
a2_flag = cat (2,a21_flag,a22_flag);
% 其中a11为0号天线端口,0号时隙的导频图案,a11为183行,7列的矩阵
% 其中a12为1号天线端口,0号时隙的导频图案,a12为183行,7列的矩阵
% 其中a21为0号天线端口,1号时隙的导频图案,a21为183行,6列的矩阵
% 其中a22为1号天线端口,1号时隙的导频图案,a22为183行,6列的矩阵
% 由于一个时隙中有15个RB,每个RB中有12个子载波,所以共有180个子载波.
polit_p1(1:180,:) = a1(4:183,:);
polit_p2(1:180,:) = a2(4:183,:);
flag_p1(1:180,:) = a1_flag(4:183,:);
flag_p2(1:180,:) = a2_flag(4:183,:);
% polit_p1,polit_p2分别为天线1,2端口的导频序列
daopin1=polit_p1;
daopin2=polit_p2;
% flag_p1,flag_p2分别表示天线1,2端口导频标志矩阵,在解导频时会用到
% 导频产生并映射到 resource element 部分结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -