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

📄 3gpp交织器.m

📁 3Gpp 25.212 交织器 交织深度1024进行行内行间交织
💻 M
字号:
%3GPP 25.212信道复用与编码规范中的交织器(以长度为1024为例)
%****************************************************************
%   K	交织器的交织长度 
%   R	交织矩阵行数
%   C	交织矩阵列数
%   p	一个质数
%   v	由查表得到一个基本数
%   T   行间交织模式序列
%   U   行内交织模式序列
%   j   交织矩阵的行数
%   i   交织矩阵的列数
%****************************************************************
%输入比特流x长度1024
x=[0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 ...
   1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 ...
   1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 ...
   0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 ...
   1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 ...
   0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 ...
   0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 ...
   0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 ...
   0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 ...
   0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 ...
   0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 ...
   0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 ...
   0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 ...
   1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 ...
   1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 ...
   0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 ...
   1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 ...
   1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 ...
   1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 ...
   0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 ...
   1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 ...
   0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 ...
   1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 ...
   1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 0];
K=2048;%length(x);
%(1)确定交织矩阵的行数,R(标准中给定)
if K>=40 & K<=159
    R=5;
    T=[4, 3, 2, 1, 0]+1;%行间置换模式
elseif (K>=160 & K<=200)|(K>=481 & K<=530)
    R=10;
    T=[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]+1;
elseif (K>=2281 & K<=2480)|(K>=3161 & K<=3210)
    R=20;
    T=[19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 16, 13, 17, 15, 3, 1, 6, 11, 8, 10]+1;
else
    R=20;
    T=[19, 9, 14, 4, 0, 2, 5, 7, 12, 18, 10, 8, 13, 17, 3, 1, 16, 6, 15, 11]+1;
end

%(2)确定交织矩阵的列数,C	
%找到满足条件的最小质数,p
p_table=[7	11	13	17	19	23	29	31	37	41	43 ...
    47	53	59	61	67	71	73	79	83	89	97 ...
    101	103	107	109	113	127	131	137	139	149	151 ...
    157	163	167	173	179	181	191	193	197	199	211 ...
    223	227	229	233	239	241	251	257];
if K>=481 & K<=530
    p=53;
    C=p;
else
    %从标准给定的p_table表中找到最小质数,p
    %p满足条件(p+1)*R>=K
    ii=1;
    while (p_table(ii)+1)*R<K
        ii=ii+1;
    end
    p=p_table(ii);
    %确定交织矩阵列数,C 
    if K<=(p-1)*R
        C=p-1;
    elseif K>(p-1)*R & K<=R*p
        C=p;
    elseif K>R*p
        C=p+1;
    end
end
        
%(3)输入信息序列x按行写入R*C的交织矩阵
if K~=R*C
    x(1,(K+1):(R*C))=0; %若K<R*C,用0比特填充 
end
matrix_unpermutation=(reshape(x,C,R))';
%注意:这里的reshape是按照列排序的,还需要转置一下

%(4)将交织矩阵进行行内和行间置换
v_table=[
     3     2     2     3     2     5     2     3     2     6     3 ...
     5     2     2     2     2     7     5     3     2     3     5 ...
     2     5     2     6     3     3     2     3     2     2     6 ...
     5     2     5     2     2     2    19     5     2     3     2 ...
     3     2     6     3     7     7     6     3     ];
 % 1)查表得到本原根,v
 if K>=481 & K<=530
     v=2;
 else
     v=v_table(ii);
 end
 
 % 2)构造行内交织基本序列s(j)
s(1)=1;
for j=2:p-1
    s(j)=mod(v*s(j-1),p);
end
 % 3)确定最小质数序列 qi
q(1)=1;
q(1,2:R)=6;
for i=2:R
    while ((gcd(q(i),p-1)==1) & (q(i)>6) & (q(i)>q(i-1)))==0
        q(i)=q(i)+1;
    end
end
%(5)置换序列qi得到序列 ri
r(T)=q;

%(6)对第i行进行行内交织
for i=1:R
    if C==p
        for j=1:p-1
            U(i,j)=s(mod(j*r(i),p-1)+1);
        end
        U(i,p)=0;
    elseif C==p+1
        for j=1:p-1
            U(i,j)=s(mod(j*r(i),p-1)+1);
        end
        U(i,p)=0;
        U(i,p+1)=p;
        if K==R*C & i==R
            temp=U(R,p+1);
            U(R,p+1)=U(R,1);
            U(R,1)=temp;
        end
    elseif C==p-1
        for j=1:p-1
            U(i,j)=s(mod(j*r(i),p-1)+1)-1;
        end
    end
end
%(7) 按U进行行内交织
for i=1:R
    matrix_intra_row_permutated(i,:)=matrix_unpermutation(i,U(i,:)+1);
end
%(8) 按T进行行间交织   
for i=1:C
    matrix_interleaved(:,i)=matrix_intra_row_permutated(T,i);
end
%(9)按列从交织矩阵matrix_interleavered中读出经交织后的信息序列
k=1;
for i=1:C
    for j=1:R
        pattern(k)=matrix_interleaved(j,i);
        k=k+1;       
    end
end
%(10)剪切掉交织前被填充的虚拟位即k>K的位,得到最后输出y
y=pattern(1:K);
   

⌨️ 快捷键说明

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