MATLAB-LTE-速率匹配仿真代码


trBlkLen = 1384; % 原始加CRC前的信息BIT长度
D = trBlkLen + 24 +4;
Rsubblock_TC = ceil(D/32);%计算矩阵化的行数
sub_block_interleaver_len = Rsubblock_TC*32;%交织大小
Kpi = sub_block_interleaver_len;%Kpi,输出数据长度
codewordLen = 7200; % 根据时频空域资源,确定输出Bit长度,E值。
rv = 0;%决定速率匹配比特选择的起始位置
crcPoly = '24A';% CRC加扰多项式
Ptabale = [0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,...
           1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31];%Inter-column permutation pattern
colum_index = Ptabale + 1;

input = randi([0, 1], trBlkLen, 1);


trblockwithcrc = lteCRCEncode(input,crcPoly);%CRC加扰
codeblocks = lteCodeBlockSegment(trblockwithcrc);%分块
% turbocodedblocks = lteTurboEncode(codeblocks);%双归零编码
% aa = turbocodedblocks{1,1};%
turbocodedblocks = 1:D*3;aa=turbocodedblocks;
%---------------- 速率匹配 验证与Matlab库函数的一致性 ---------------

bb = reshape(aa,3,[]);
dummyBitsNum = sub_block_interleaver_len - D;
bb2 = [NaN*ones(3,dummyBitsNum),double(bb)];
dk0 = bb2(1,:);
dk1 = bb2(2,:);
dk2 = bb2(3,:);
Vk0 = reshape(dk0,32,[]).';%按行输入,排32列。
Vk1 = reshape(dk1,32,[]).';
Vk2 = reshape(dk2,32,[]).';
%--------------------- interleave dk0,dk1 ----------------------
Vk0_interleave = Vk0(:,colum_index) ;
Vk1_interleave = Vk1(:,colum_index) ;
%---------------------- dk0 dk2 按列读出 ------------------------
Vk0_interleaveOut = reshape(Vk0_interleave,1,[]);
Vk1_interleaveOut = reshape(Vk1_interleave,1,[]);
%--------------------- interleave dk2 --------------------------
pi_k2 = zeros(1,Kpi);
for k = 0:Kpi-1
%     floor(k/Rsubblock_TC) + 1
%     mod(k,Rsubblock_TC)
%     pi_k(k+1) = Ptabale(floor(k/Rsubblock_TC) + 1) + 32*mod(k,Rsubblock_TC) + 1;
    pi_k2(k+1) = mod(Ptabale(floor(k/Rsubblock_TC) + 1) + 32*mod(k,Rsubblock_TC) + 1,Kpi);
end
Vk2_interleave = dk2(pi_k2+1);
%--------------------- bit collection -------------------------
cc = reshape([Vk1_interleaveOut;Vk2_interleave],1,[]);
w  = [Vk0_interleaveOut,cc];
%---------------------- bit selection & transmition   -------------------------
E   = codewordLen;
Kw  = 3*Kpi;
Ncb = Kw;
k0  = Rsubblock_TC*2;
j = 0;k=0;e = zeros(1,E);
index = find(w>=1 & w<=4236);
ww = w(index);
while k<E
    Wtemp = w(mod(k0+j,Ncb)+1);
    if Wtemp>=1 & Wtemp<=4236
        k = k+1;
        e(k) = Wtemp;
    end
    j = j+1;
end
%--------------------------------------------------------------
codeword = lteRateMatchTurbo(turbocodedblocks,codewordLen,rv);%The bit selection stage assumes a QPSK transmission mapped onto a single layer.
% codeword2 = (2*codeword -1) ;
cmp = [e;codeword.'];
% rateRecovered = lteRateRecoverTurbo(codeword,trBlkLen,rv);
% rateRecovered{1,1}
% rateRecovered2 = (sign(rateRecovered{1,1})+1) /2

通过最终比较,发现LTE的matlab库函数速率匹配输出的索引codeword与手动计算的最终结果e存在固定的关系;

matlab的库输入是按照下列顺序排列时候,输出索引就正好差3倍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值