当前位置:网站首页>UCI and data multiplexing are transmitted on Pusch - placement of data and UCI positions (Part III)
UCI and data multiplexing are transmitted on Pusch - placement of data and UCI positions (Part III)
2022-07-03 09:39:00 【Communication pawn】
data and uci Placement of reuse positions
Frequency hopping will not be introduced this time , Follow the procedure of no frequency hopping .
Parameters
step1: stay harq-ack Of bit The number is less than or equal to 2 When , Do the following .
### This Agreement specifically states , If ack Of bit The number is less than or equal to 2 Always follow bit Number equals 2 To calculate the space for reservation .
for i = 1:numel(lprime)
sym = lprime(i);
while mACKcount(i) < GACKRvdTemp(i)
if sym > nPUSCHsymall
% Check for the symbol number greater than the number
% of PUSCH allocated symbols in each hop and avoid out
% of bounds indexing
break;
end
if mUCI(sym) > 0
% Total number of reserved elements remaining per hop
numACKRvd = GACKRvdTemp(i)-mACKcount(i);
if numACKRvd >= mUCI(sym)*nlqm
d = 1;
mREcount = mBarULSCH(sym);
else
d = floor((mUCI(sym)*nlqm)/numACKRvd);
mREcount = ceil(numACKRvd/nlqm);
end
phiBarRvd{sym} = phiBarULSCH{sym}((0:mREcount-1)*d+1);
mACKcount(i) = mACKcount(i) + mREcount*nlqm;
end
sym = sym+1;
end % while
end % for Nhop
% Number of reserved elements in each OFDM symbol
mPhiSCRVD = zeros(nPUSCHsymall,1);
for i = 1:nPUSCHsymall
mPhiSCRVD(i) = length(phiBarRvd{i});
end
step2: stay harq-ack Of bit Number greater than 2 When , Do the following .
% Step 2
% ACK (oACK > 2)
if ~GACKRvd && GACK
GACKTemp = [GACK1 GACK2];
lprime = [l1 l2];
mACKcount = [0 0];
mACKcountall = 0;
for i = 1:numel(lprime)
sym = lprime(i);
while mACKcount(i) < GACKTemp(i)
if sym > nPUSCHsymall
% Check for the symbol number greater than the number
% of PUSCH allocated symbols in each hop and avoid out
% of bounds indexing
break;
end
if mUCI(sym) > 0
% Total number of remaining HARQ-ACK bits to be
% accommodated per hop
numACK = GACKTemp(i)-mACKcount(i);
if numACK >= mUCI(sym)*nlqm
d = 1;
mREcount = mUCI(sym);
else
d = floor((mUCI(sym)*nlqm)/numACK);
mREcount = ceil(numACK/nlqm);
end
% Place coded HARQ-ACK bits in gBar at relevant
% positions
k = phiUCI{sym}((0:mREcount-1)*d+1);
gBar(sym,k+1,1:nlqm) = -1; % -1 for HARQ-ACK
mACKcountall = mACKcountall+(mREcount*nlqm);
mACKcount(i) = mACKcount(i)+(mREcount*nlqm);
phiUCItemp = phiUCI{sym}((0:mREcount-1)*d+1);
phiUCI{sym} = setdifference(phiUCI{sym},phiUCItemp);
phiBarULSCH{sym} = setdifference(phiBarULSCH{sym},phiUCItemp);
mUCI(sym) = length(phiUCI{sym});
mBarULSCH(sym) = length(phiBarULSCH{sym});
end
sym = sym+1;
end % while
end % for Nhop
end % if oACK > 2
step3:CSI stay PUSCH transmission , Placement .
Let's first introduce csi port1 Placement
stay csi port1 Although it is considered to be harq-ack Reserved space , When placing, remove it and leave it for harq-ack Space .
stay csi port2 When placing, I didn't consider giving it before harq-ack Reserved space ,csi port2 It's likely to be reserved for harq-ack The space occupied .
Of course, all the above are self transmission harq-ack Of bit The number is less than or equal to 2 When , Normal greater than 2 When , stay csi port1 and 2 The occupied space has been eliminated before placement , They cannot occupy .
% Step 3
% CSI part 1
if GCSI1
lprime = [lcsi1 lcsi2];
mCSIcount = [0 0];
mCSIcountall = 0;
GCSI1Temp = [GCSI11 GCSI12];
for i = 1:numel(lprime)
sym = lprime(i);
while mUCI(sym)-mPhiSCRVD(sym) <= 0
sym = sym+1;
if sym > nPUSCHsymall
break; % exit loop at end of symbols
end
end
while mCSIcount(i) < GCSI1Temp(i)
if sym > nPUSCHsymall
% Check for the symbol number greater than the number
% of PUSCH allocated symbols in each hop and avoid out
% of bounds indexing
break;
end
% Number of resource elements available for CSI part 1 in
% each symbol
mUCIDiffmPhiRvd = mUCI(sym)-mPhiSCRVD(sym);
% Total number of remaining CSI part 1 bits to be
% accommodated per hop
numCSI1 = GCSI1Temp(i)-mCSIcount(i);
if mUCIDiffmPhiRvd > 0
if numCSI1 >= mUCIDiffmPhiRvd*nlqm
d = 1;
mREcount = mUCIDiffmPhiRvd;
else
d = floor((mUCIDiffmPhiRvd*nlqm)/numCSI1);
mREcount = ceil(numCSI1/nlqm);
end
phitemp = setdifference(phiUCI{sym},phiBarRvd{sym});
% Place coded CSI part 1 bits in gBar at relevant
% positions
k = phitemp((0:mREcount-1)*d+1);
gBar(sym,k+1,1:nlqm) = -2; % -2 for CSI part 1
mCSIcountall = mCSIcountall+(mREcount*nlqm);
mCSIcount(i) = mCSIcount(i)+(mREcount*nlqm);
phiUCItemp = phitemp((0:mREcount-1)*d+1);
phiUCI{sym} = setdifference(phiUCI{sym},phiUCItemp);
phiBarULSCH{sym} = setdifference(phiBarULSCH{sym},phiUCItemp);
mUCI(sym) = length(phiUCI{sym});
mBarULSCH(sym) = length(phiBarULSCH{sym});
end % end if
sym = sym+1;
end % while
end % for Nhop
end % if Gcsi1
% CSI part 2
if GCSI2
lprime = [lcsi1 lcsi2];
mCSIcount = [0 0];
mCSIcountall = 0;
GCSI2Temp = [GCSI21 GCSI22];
for i = 1:numel(lprime)
sym = lprime(i);
while mUCI(sym) <= 0
sym = sym+1;
if sym > nPUSCHsymall
break; % exit loop at end of symbols
end
end
while mCSIcount(i)<GCSI2Temp(i)
if sym > nPUSCHsymall
% Check for the symbol number greater than the
% number of PUSCH allocated symbols in each hop and
% avoid out of bounds indexing
break;
end
if mUCI(sym) > 0
% Total number of CSI part 2 bits remaining to be
% accommodated per hop
numCSI2 = GCSI2Temp(i)-mCSIcount(i);
if numCSI2 >= mUCI(sym)*nlqm
d = 1;
mREcount = mUCI(sym);
else
d = floor((mUCI(sym)*nlqm)/numCSI2);
mREcount = ceil(numCSI2/nlqm);
end
% Place coded CSI part 2 bits in gBar at relevant
% positions
k = phiUCI{sym}((0:mREcount-1)*d+1);
gBar(sym,k+1,1:nlqm) = -3; % -3 for CSI part 2
mCSIcountall = mCSIcountall+(mREcount*nlqm);
mCSIcount(i) = mCSIcount(i)+(mREcount*nlqm);
phiUCItemp = phiUCI{sym}((0:mREcount-1)*d+1);
phiUCI{sym} = setdifference(phiUCI{sym},phiUCItemp);
phiBarULSCH{sym} = setdifference(phiBarULSCH{sym},phiUCItemp);
mUCI(sym) = length(phiUCI{sym});
mBarULSCH(sym) = length(phiBarULSCH{sym});
end % if
sym = sym+1;
end % while
end % for Nhop
end % if GCSI2
step4 :data stay PUSCH transmission , Placement .
There is no interval for data placement. This placement rule , Equal pilot ,harq-ack csi-port1 csi-port2 Just put it next to each other after placing it , This special case is harq-ack Of bit The number is less than or equal to 2 When ,data It can also occupy the space needed before .
% Step 4
% UL-SCH
mULSCHcount = 0;
if GULSCH
for sym = 0:nPUSCHsymall-1
if mBarULSCH(sym+1) > 0
% Place coded UL-SCH bits in gBar at relevant positions
k = phiBarULSCH{sym+1}(1:mBarULSCH(sym+1));
gBar(sym+1,k+1,1:nlqm) = -4; % -4 for UL-SCH
mULSCHcount = mULSCHcount+(mBarULSCH(sym+1)*nlqm);
end % if
end % for sym
end % if Gulsch
step5 : If harq-ack stay PUSCH On the transmission of bit The number is less than or equal to 2 Words , This one needs to be repositioned
Why does this need to be repositioned less than 2bit Of harq-ack, Because at the beginning, it was reserved according to 2bit Of harq-ack Space reserved , There is no real place for data , In addition, put it in the back csi port2 as well as data It is possible to ack The reserved position is placed csi part2 Or data , in other words , May be covered , In this area, it is placed in the reserved position , At the beginning, it is reserved according to 2bit Maximum reserved , This time, it is placed according to the truth harq-ack Needed bit( Less than or equal to 2bit) Count to place .
This placement is selected from the previously reserved space , What really needs to be transmitted bit The number is smaller than the reserved space , It will be placed at intervals in the reserved space . such as , Reserved 4 Space , This time just 2 Space , The first and third of the four choices will be placed .
% Step 5
% ACK (oACK <= 2)
if GACKRvd && GACK
lprime = [l1 l2];
mACKcount = [0 0];
mACKcountall = 0;
GACKTemp = [GACK1 GACK2];
for i = 1:numel(lprime)
sym = lprime(i);
while mACKcount(i) < GACKTemp(i)
if sym > nPUSCHsymall
% Check for the symbol number greater than the
% number of PUSCH allocated symbols in each hop and
% avoid out of bounds indexing
break;
end
if mPhiSCRVD(sym)>0
% Total number of remaining HARQ-ACK bits to be
% accommodated per hop
numACK = GACKTemp(i)-mACKcount(i);
if numACK >= mPhiSCRVD(sym)*nlqm
d = 1;
mREcount = mPhiSCRVD(sym);
else
d = floor((mPhiSCRVD(sym)*nlqm)/numACK);
mREcount = ceil(numACK/nlqm);
end
% Place coded HARQ-ACK bits in gBar at relevant
% positions
k = phiBarRvd{sym}((0:mREcount-1)*d+1);
gBar(sym,k+1,1:nlqm) = gBar(sym,k+1,1:nlqm)+5; % Add 5 to get the locations of ACK, overlapped with UL-SCH or CSI2
mACKcountall = mACKcountall+(mREcount*nlqm);
mACKcount(i) = mACKcount(i)+(mREcount*nlqm);
end % if
sym = sym+1;
end % while
end % for Nhop
end % if oack <= 2
step6: There is no substantive operation , Just output the result of the previous processing to another array
% Step 6
% Return the multiplexed output
cackInd = zeros(0,1);
ccsi1Ind = zeros(0,1);
ccsi2Ind = zeros(0,1);
culschInd = zeros(0,1);
culschAckInd = zeros(0,1);
ccsi2AckInd = zeros(0,1);
if GULSCH || GACK || GCSI1 || GCSI2
t = 0;
cwLen = sum(mULSCH(:))*nlqm;
cw = zeros(cwLen,1); % Initialize temporary codeword
for sym = 0:nPUSCHsymall-1
for j = 0:mULSCH(sym+1)-1
k = phiULSCH{
sym+1}(j+1);
cw(t+1:t+nlqm) = gBar(sym+1,k+1,:);
t = t+nlqm;
end
end
cackInd = sort([find(cw == -1); find(cw > 0)]);
ccsi1Ind = find(cw == -2);
ccsi2Ind = find(cw == -3);
culschInd = find(cw == -4);
culschAckInd = find(cw == 1);
ccsi2AckInd = find(cw == 2);
else
% Inputs ulsch, ack, csi1, csi2 are empty, return empty
cw = zeros(0,1);
end
边栏推荐
- [kotlin learning] control flow of higher-order functions -- lambda return statements and anonymous functions
- 1300. sum of varied array closed to target
- LeetCode每日一题(968. Binary Tree Cameras)
- [solution to the new version of Flink without bat startup file]
- Win10安装ELK
- ERROR: certificate common name “www.mysql.com” doesn’t match requested host name “137.254.60.11”.
- 专利查询网站
- Electronic product design
- Nodemcu-esp8266 development (vscode+platformio+arduino framework): Part 4 --blinker_ DHT_ WiFi (lighting technology app control + temperature and humidity data app display)
- Detailed steps of windows installation redis
猜你喜欢
Shell logic case
Arduino handles JSON data, arduinojson assistant
Trial of the combination of RDS and crawler
[CSDN] C1 training problem analysis_ Part III_ JS Foundation
[CSDN]C1训练题解析_第二部分_Web基础
Flask+supervisor installation realizes background process resident
Global KYC service provider advance AI in vivo detection products have passed ISO international safety certification, and the product capability has reached a new level
顺利毕业[3]-博客系统 更新中。。。
Difference of EOF
Intelligent home design and development
随机推荐
Usage of pandas to obtain MySQL data
Leetcode daily question (985. sum of even numbers after queries)
LeetCode每日一题(2232. Minimize Result by Adding Parentheses to Expression)
ERROR: certificate common name “*.” doesn’t match requested ho
LeetCode每日一题(2115. Find All Possible Recipes from Given Supplies)
Nr-prach: access scenario and access process
Flink CDC practice (including practical steps and screenshots)
What do software test engineers do? Pass the technology to test whether there are loopholes in the software program
从0开始使用pnpm构建一个Monorepo方式管理的demo
小王叔叔的博客目录【持续更新中】
How MySQL modifies null to not null
LeetCode每日一题(985. Sum of Even Numbers After Queries)
Development of electrical fire system
Error output redirection
1300. sum of varied array closed to target
数字身份验证服务商ADVANCE.AI顺利加入深跨协 推进跨境电商行业可持续性发展
1922. Count Good Numbers
307. Range Sum Query - Mutable
软件测试工程师是做什么的 通过技术测试软件程序中是否有漏洞
Uncle Wang's blog directory [constantly updating]