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

📄 polit_gen.m

📁 是一个根据最新LTE标准写的一个链路实现程序和信道估计程序
💻 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 + -