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

📄 test_dlloopback.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
📖 第 1 页 / 共 2 页
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  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 + -