📄 test_dlloopback.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Property of Freescale
% Freescale Confidential Proprietary
% Freescale Copyright (C) 2005 All rights reserved
% ------------------------------------------------------------------------
% $RCSfile: test_DLloopback.m.rca $
% $Date: Thu Feb 1 15:35:35 2007 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
randSeed = 0 ;
rand('state',randSeed)
randn('state',randSeed) %used in awgn
%select test case
%TC=input('Which test case number do you want to run? ');
TC=510;
if (~isnumeric(TC) | (TC<0))
disp('Error: Not a valid test case number!')
return;
end
TCstr=sprintf('../vector/in/TC%03d/DLparam',TC);
if exist([TCstr,'.m'],'file');
run(TCstr);
else
disp(sprintf('Error: Test case parameter file %s.m is not available.',TCstr));
return;
end
%Ether payload is extracted from MAC side or param file
%MacTV=input('Do want to import data from MAC test vectors [y/n]? ','s');
MacTV='y';
BurstStart=zeros(size(BurstD,2),1);
%Extracting payload from MAC
if MacTV =='y'
disp(sprintf('Importing data from TC%03d/03d_IF1Data.lod ...',TC));
TCstr=sprintf('../vector/in/TC%03d/TC%03d_IF1Data.lod',TC,TC);
if exist(TCstr,'file');
addpath('../../../../SP/UP/CM/Utilities/matlab');
In=mGetBin(TCstr,'uint8','R');
rmpath('../../../../SP/UP/CM/Utilities/matlab');
%generate stimuli
BufLength=0;
BurstBufIn=[];
for b=1:ZoneD.NumBursts
BurstBufIn = [BurstBufIn , struct('Data',In(BufLength+1:BufLength+BurstD(b).Size,1))];
%BurstBufIn = [BurstBufIn , struct('Data',In(1:BurstD(b).Size,1))];
BurstStart(b)=BufLength;
%BufLength=BufLength+(ceil(BurstD(b).Size/8)*8);
BufLength=BufLength+BurstD(b).Size;
end
else
disp(sprintf('Error: Test case data file %s is not available.',TCstr));
return;
end
else
%Generation of MAC-PHY payload inteface (IF1TXDLData)
BufLength=0;
BurstBuffer=[];
%Each Burst is aligned to 8bytes address
for b=1:ZoneD.NumBursts
BurstBuffer=[BurstBuffer; uint8(ones(BurstD(b).Size,1))*BurstD(b).Data];
BurstStart(b)=BufLength;
BufLength=BufLength+(ceil(BurstD(b).Size/8)*8);
BurstBuffer=[BurstBuffer;zeros(ceil(BurstD(b).Size/8)*8-BurstD(b).Size,1)];
end
addpath('../../../../SP/UP/CM/Utilities/matlab');
mGenBin(BurstBuffer,...
sprintf('../vector/in/TC%03d/IF1TXDLData.lod',TC),'uint8','R');
rmpath('../../../../SP/UP/CM/Utilities/matlab');
%generate stimuli
BurstBufIn=[];
for b=1:ZoneD.NumBursts,
BurstBufIn = [BurstBufIn , struct('Data',uint8(ones(BurstD(b).Size,1))*BurstD(b).Data)];
end
end
%Check whether the test vector generation perform or not
%GenTV=input('Do want to generate test vectors [y/n]? ','s');
GenTV='y';
disp(sprintf('Running test case number %03d ...',TC));
if GenTV~='y'
TC=0; %switch off test case generation
end
%Generate MAC-PHY control inteface (IF1TXDLCtrl and IF1TXDLSysD)
if TC
%at SBX\Manager\DL\CM\vector\ref
if ~exist(sprintf('../../DLCodeBlockSeg/vector/in/TC%03d',TC),'dir')
mkdir(sprintf('../../DLCodeBlockSeg/vector/in/TC%03d',TC));
end
addpath('../../../CM/Utilities/matlab');
addpath('../../../../SP/UP/CM/Utilities/matlab');
RandFlag=[0 1 2].';
ModulationMode=0;
ULDL=0;%Indicates UL (0:DL)
[IF1TXDLSysD IF1TXDLCtrl]=mGenStructMacPhy(TPparam,SubframeD,AsyncPhyCtrl,ZoneD,BurstD,BurstStart,ULDL);
mGenBin(IF1TXDLSysD,sprintf('../../DLCodeBlockSeg/vector/in/TC%03d/IF1TXDLSysD.lod',TC),'uint8','R');
mGenBin(IF1TXDLCtrl,sprintf('../../DLCodeBlockSeg/vector/in/TC%03d/IF1TXDLCtrl.lod',TC),'uint8','R');
rmpath('../../../../SP/UP/CM/Utilities/matlab');
rmpath('../../../CM/Utilities/matlab');
end
clear TCstr GenTV
% NOTE: The following variable must have been set before the rest of this
% script can be executed.
% - SubframeD
% - ZoneConfig
% - AsyncPhyCtrl
% - ZoneD
% - BurstD
% - TPparam
% - SNR
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Downlink Tx User Domain Processing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%switch to corresponding directory to make the relative paths work
cd ../../../../SP/UP/DL/SPManager/matlab
%path is relative to the folder given above ( SP/UP/DL/SPManager/matlab )
addpath('../../../CM/Utilities/matlab');
%allocate output/zone buffer (slot vectors)
OutUPDL = zeros(ZoneD.NumSubch*48,ZoneD.NumSym/ZoneD.Type,'int16');
%create DL-MAP figure (empty)
[DLMapStruct]=CreateZoneMap(ZoneD,'DL-PUSC zone (NFFT=512)');
%Output of the UP DL CC manager (one column per symbol code block)
OutUPDLCC=[];
%downlink UP Tx processing for full DL zone
XSLArguments={'IF1cTX','','','','',''};
[XSLArguments]=[XSLArguments;{'FN','ZN','BN','CBN','usiLen','usiLenPadded'}];
test={'IF1dTX','','','','','',''};
[test]=[test;{'FN','ZN','BN','CBN','usiLen','eEncoderType','ePunctRate'}];
for b=1:ZoneD.NumBursts,
%place burst into DL-MAP
BurstH(b)=AddDLburst(DLMapStruct,ZoneD,BurstD(b),b,BurstD(b).Name);
if BurstD(b).FECType == 0 % CC mode
%code block segmentation (Framework function)
%SBX\Manager\DL\DLCodeBlockSeg\matlab
addpath('../../../../../Manager/DL/DLCodeBlockSeg/matlab');
[CodeBlockIn,BlkSize,DataSize,NumSlots] = mCodeBlkSeg(BurstBufIn(b).Data,ZoneD,BurstD(b));
rmpath('../../../../../Manager/DL/DLCodeBlockSeg/matlab');
elseif BurstD(b).FECType == 1 % CTC mode
addpath('../../../../../Manager/DL/DLCodeBlockSeg/matlab');
[CodeBlockIn,BlkSize,DataSize,NumSlots] = mCodeBlkSeg_CTC(BurstBufIn(b).Data,ZoneD,BurstD(b));
rmpath('../../../../../Manager/DL/DLCodeBlockSeg/matlab');
else
error('BurstD(b).FECType should be either 0 or 1.')
end
EachBurstBeforePadBlkSize(b,1:size(DataSize,2))=DataSize;%Need to generate mGenStructUPDL
EachBurstPadedBlkSize(b,1:size(BlkSize,2))=BlkSize;%Need to generate mGenStructUPDL
EachBurstNumCodeBlks(b,1)=size(DataSize,2);%Need to generate mGenStructUPDL
EachBurstNumSlots(b,1:size(NumSlots,2))=NumSlots;%Need to generate mGenStructUPDL
%test vector generation (IF1TX, IF1aTX, IF1cTX)
if TC
TCstr=sprintf('TC%03d',TC);
FN=0;%Frame number and Zone number is concidered as 0 for time being %11 for TC510DL
ZN=0;%Frame number and Zone number is concidered as 0 for time being
AN=0;%Antenna number is concidered as 0 for time being
%test vector generation (IF1Tx : Input of DL code block segmentation)
%at SBX/SP/UP/DL/SPManager/vector/ref
if ~exist(['../vector/ref/',TCstr],'dir')
mkdir(['../vector/ref/',TCstr]);
end
% mGenBin(BurstBufIn(b).Data,...
% sprintf('../vector/ref/%s/IF1TX_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1),...
% 'uint8','R');
% %at SBX\Manager\DL\CM\vector\ref
% if ~exist(['../../../../../Manager/DL/CM/vector/ref/',TCstr],'dir')
% mkdir(['../../../../../Manager/DL/CM/vector/ref/',TCstr]);
% end
% mGenBin(BurstBufIn(b).Data,...
% sprintf('../../../../../Manager/DL/CM/vector/ref/%s/IF1TX_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1),...
% 'uint8','R');
% %at SBX\Manager\DL\DLCodeBlockSeg/vector/in
% if ~exist(['../../../../../Manager/DL/DLCodeBlockSeg/vector/in/',TCstr],'dir')
% mkdir(['../../../../../Manager/DL/DLCodeBlockSeg/vector/in/',TCstr]);
% end
% mGenBin(BurstBufIn(b).Data,...
% sprintf('../../../../../Manager/DL/DLCodeBlockSeg/vector/in/%s/IF1TX_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1),...
% 'uint8','R');
% %%%
% if ~exist(['../../SPManager/vector/in/',TCstr],'dir')
% mkdir(['../../SPManager/vector/in/',TCstr]);
% end
mGenBin(BurstBufIn(b).Data,... %tag
sprintf('../../SPManager/vector/in/%s/IF1TX_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1),...
'uint8','R');
% %at SBX/SP/UP/DL/SPKernel/CodeBlkSeg/vector/in
% if ~exist(['../../SPKernel/CodeBlkSeg/vector/in/',TCstr],'dir')
% mkdir(['../../SPKernel/CodeBlkSeg/vector/in/',TCstr]);
% end
% for i=1:size(temp,2)
% mGenBin(BurstBufIn(b).Data,...
% sprintf('../../SPKernel/CodeBlkSeg/vector/in/%s/IF1TX_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1),...
% 'uint8','R');
% end
%test vector generation (IF1aTx : Output of DL code block segmentation)
% Add SBX/Manager/DL/DLCodeBlockSeg/vector/in
blks=length(NumSlots);
for bl=1:blks,
%at SBX/SP/UP/DL/SPManager/vector/ref
% mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
% sprintf('../vector/ref/%s/IF1aTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
% 'uint8','R');
% %at SBX\Manager\DL\DLCodeBlockSeg/vector/ref
% if ~exist(['../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/',TCstr],'dir')
% mkdir(['../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/',TCstr]);
% end
% mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
% sprintf('../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/%s/IF1aTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
% 'uint8','R');
% %at SBX/SP/UP/DL/SPKernel/Rand/vector/in
% if ~exist(['../../SPKernel/Rand/vector/in/',TCstr],'dir')
% mkdir(['../../SPKernel/Rand/vector/in/',TCstr]);
% end
% mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
% sprintf('../../SPKernel/Rand/vector/in/%s/IF1aTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
% 'uint8','R');
%at SBX/SP/UP/DL/SPManager/vector/in
if ~exist(['../../SPManager/vector/in/',TCstr],'dir')
mkdir(['../../SPManager/vector/in/',TCstr]);
end
%mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
mGenBin(CodeBlockIn(1:DataSize(bl),bl),...
sprintf('../../SPManager/vector/in/%s/IF1cTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
'uint8','R');
%mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
mGenBin(CodeBlockIn(1:DataSize(bl),bl),...
sprintf('../../../../../Manager/DL/CM/vector/ref/%s/IF1cTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
'uint8','R');
% %
% % %IF1cTx is a copy of IF1aTx
% % %at SBX/SP/UP/DL/SPManager/vector/ref
% % mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
% % sprintf('../vector/ref/%s/IF1cTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
% % 'uint8','R');
% % %at SBX/SP/UP/DL/SPKernel/Rand/vector/in
% % mGenBin(CodeBlockIn(1:BlkSize(bl),bl),...
% % sprintf('../../SPKernel/Rand/vector/in/%s/IF1cTX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,b-1,bl-1),...
% % 'uint8','R');
%Extract the input arguments for UP DL TX CC manager
%at SBX/SP/UP/DL/SPManager/vector/in
% [XSLArguments]=[XSLArguments;{FN,ZN,b-1,bl-1,DataSize(bl),BlkSize(bl
% )}];
end
end
%call fixpoint downlink UP Tx chain (In API document this is called Code
%block basis, but here the all the code blocks in particular burst is given
%in once.
if BurstD(b).FECType == 0 % CC mode
[BlkSize OutUPDLCC test] = SBX_UPDLSPM_CC(CodeBlockIn,BurstD(b).IUC,BurstD(b).Boosting,DataSize,BlkSize,...
BurstD(b).FECType,BurstD(b).PunctMode,BurstD(b).ModMode,ZoneD.Resolution,TC,b-1,test);
elseif BurstD(b).FECType == 1 % CTC mode
[BlkSize OutUPDLCC test] = SBX_UPDLSPM_CTC(CodeBlockIn,BurstD(b).IUC,BurstD(b).Boosting,DataSize,BlkSize,...
BurstD(b).FECType,BurstD(b).PunctMode,BurstD(b).ModMode,ZoneD.Resolution,TC,b-1,test);
else
error('BurstD(b).Type should be either 0 or 1.')
end
%slot segmentation
%%%%%%%%%%%%%%%%%%%%%%%%%%
addpath('../../../DL/SPKernel/SlotSeg/matlab');
[temp,SlotSize] = mSlotSeg(OutUPDLCC,BlkSize,NumSlots);
%repetition + slot mapping
%%%%%%%%%%%%%%%%%%%%%%%%%%
addpath('../../../DL/SPKernel/RepSlotMap/matlab');
OutUPDL = mRepSlotMap(temp,OutUPDL,ZoneD,BurstD(b));
end
%Generation of UPDLCCMgr and DLCbAllocCtrl
if TC
if ~exist(['../vector/in/',TCstr],'dir')
mkdir(['../vector/in/',TCstr]);
end
if ~exist(['../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/',TCstr],'dir')
mkdir(['../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/',TCstr]);
end
if ~exist(['../../../../../Manager/DL/DataWriteback/vector/in/',TCstr],'dir')
mkdir(['../../../../../Manager/DL/DataWriteback/vector/in/',TCstr]);
end
[UPDLCCMgr_byte DLCbAllocCtrl_byte] = mGenStructUPDL(BurstD,EachBurstBeforePadBlkSize,EachBurstPadedBlkSize,EachBurstNumCodeBlks,EachBurstNumSlots,ZoneD);
mGenBin(UPDLCCMgr_byte,sprintf('../vector/in/%s/IF1aTX_UPDLCCMgrCtrl_%02d_%02d.lod',TCstr,FN,ZN),'uint8','R');
mGenBin(UPDLCCMgr_byte,sprintf('../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/%s/IF1aTX_UPDLCCMgrCtrl_%02d_%02d.lod',TCstr,FN,ZN),'uint8','R');
mGenBin(DLCbAllocCtrl_byte,sprintf('../vector/in/%s/IF1aTX_DLCbAllocCtrl_%02d_%02d.lod',TCstr,FN,ZN),'uint8','R');
mGenBin(DLCbAllocCtrl_byte,sprintf('../../../../../Manager/DL/DLCodeBlockSeg/vector/ref/%s/IF1aTX_DLCbAllocCtrl_%02d_%02d.lod',TCstr,FN,ZN),'uint8','R');
mGenBin(DLCbAllocCtrl_byte,sprintf('../../../../../Manager/DL/DataWriteback/vector/in/%s/IF1aTX_DLCbAllocCtrl_%02d_%02d.lod',TCstr,FN,ZN),'uint8','R');
end
%downlink mapping of slot vector to OFDMA symbols (Mapping into logical
%Subcarrers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
addpath('../../../../../SP/FP/DL/SPKernel/SlotMapper/matlab/');
MappedSymbols=[];
%PUSC
if (ZoneConfig.ZoneType==2)
for sym=1:size(OutUPDL,2)
MappedSymbols = [MappedSymbols mMapDL(OutUPDL(:,sym))];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -