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

📄 mgenstructupdl.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Property of Freescale
%  Freescale Confidential Proprietary
%  Freescale Copyright (C) 2006 All rights reserved
%  ----------------------------------------------------------------------------
%  $RCSfile: mGenStructUPDL.m.rca $
%  $Revision: 1.3 $
%  $Date: Wed Nov  8 11:39:11 2006 $
%  Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% For WiMAX 802.16 OFDMA, generate Matlab control structures to target
% control structures for UP DL CC Manager
%
%  [UPDLCCMgr_byte] =
%  mGenStructUPDL(RandFlag,Boosting,BlkSize,PaddedBlkSize,CodeType,PunctureingMode,ModulationMode)
%
% input : Matlab control structures
% BufIn : input burst buffers
%
% output: Target control structures
%         (binary file format, big endian)
% BufOut: Concatenated and aligned input burst buffers 
%
% Matlab 7 R14 SP2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [UPDLCCMgr_byte DLCbAllocCtrl_byte] = mGenStructUPDL(BurstD,BeforePadBlkSize,PadedBlkSize,NumCodeBlks,BurstNumSlots,ZoneD)

CbStartOffset=0;
UPDLCCMgr=[];
DLCbAllocCtrl=[];
for b=1:size(BurstD,2)

    RandFlag=BurstD(b).IUC;
    %Randomization is not applied for FCH
    if RandFlag~=255
        RandFlag=1;%randomizer enabled
    else
        RandFlag=0;%randomizer disabled
    end

%     SlotVecOffset=BurstD(b).SymOff/ZoneD.Type;
%     SubChanOffset=BurstD(b).SubchOff;
    for bl=1:NumCodeBlks(b)
        %subframe descriptor
        temp = [ ... % structure contains 9 bytes
            struct('Name', 'ucRandFlag'               ,'Val', uint8(RandFlag)),...
            struct('Name', 'ucBoosting'               ,'Val', uint8(BurstD(b).Boosting)),...
            struct('Name', 'usiCodeBlockSize'         ,'Val', uint16(BeforePadBlkSize(b,bl))),...
            struct('Name', 'usiCodeBlockSizePadded'   ,'Val', uint16(PadedBlkSize(b,bl))),...
            struct('Name', 'eCodeType'                ,'Val', int8(BurstD(b).FECType)),...
            struct('Name', 'ePunctureingMode'         ,'Val', int8(BurstD(b).PunctMode)),...
            struct('Name', 'eModulationMode'          ,'Val', int8(BurstD(b).ModMode))];
        UPDLCCMgr = [UPDLCCMgr ,temp];

        if BurstD(b).IUC~=254
            SlotVecOffset=BurstD(b).SymOff/ZoneD.Type+floor(sum(BurstNumSlots(b,1:bl-1))/BurstD(b).NumSubch);
            SubChanOffset=BurstD(b).SubchOff+mod(sum(BurstNumSlots(b,1:bl-1)),BurstD(b).NumSubch);
        else
            SlotVecOffset=BurstD(b).SymOff/ZoneD.Type+floor(sum(BurstNumSlots(b,1:bl-1))/ZoneD.NumSubch);
            SubChanOffset=BurstD(b).SubchOff+mod(sum(BurstNumSlots(b,1:bl-1)),ZoneD.NumSubch);
        end
        
        if BurstD(b).IUC==254 || BurstD(b).IUC==255
            SubChanLowerBound=0;
            SubChanUpperBound=ZoneD.NumSubch;
        else
            SubChanLowerBound=BurstD(b).SubchOff;
            SubChanUpperBound=BurstD(b).SubchOff+BurstD(b).NumSubch;
        end
            
        %stDLCbAllocCtrl descriptor
        temp = [ ... % structure contains 16 bytes
            struct('Name', 'usiCbStartOffset'         ,'Val', uint16(CbStartOffset)),...
            struct('Name', 'usiNumSlots'              ,'Val', uint16(BurstNumSlots(b,bl))),...
            struct('Name', 'ucSubChanLowerBound'      ,'Val', uint8(SubChanLowerBound)),...
            struct('Name', 'ucSubChanUpperBound'      ,'Val', uint8(SubChanUpperBound)),...
            struct('Name', 'ucSlotVecOffset'          ,'Val', uint8(SlotVecOffset)),...
            struct('Name', 'ucSubChanOffset'          ,'Val', uint8(SubChanOffset)),...
            struct('Name', 'ucRepCodingInfo'          ,'Val', uint8(BurstD(b).R)),...
            struct('Name', 'ucMaxNumSubChan'          ,'Val', uint8(ZoneD.NumSubch)),...
            struct('Name', 'ucReserved'               ,'Val', uint8(zeros(6,1)))...
            ];
        DLCbAllocCtrl = [DLCbAllocCtrl ,temp];

        CbStartOffset=CbStartOffset+BeforePadBlkSize(b,bl);
        
    end
end

UPDLCCMgr_byte = ConvertStruct(UPDLCCMgr);
DLCbAllocCtrl_byte = ConvertStruct(DLCbAllocCtrl);
% UPDLCCMgr_byte = (UPDLCCMgr);
% DLCbAllocCtrl_byte = (DLCbAllocCtrl);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Out] = ConvertStruct(In)
% concatenate all structure elements in big-endian format

Out=[];
for k=1:length(In),
  switch class(In(k).Val)
    case 'uint8'
         val  = In(k).Val;
    case 'int8'
         base = 256;
         val  = uint8(mod(double(In(k).Val)+base,base));  %make unsigned
    case 'uint16'
         val  = In(k).Val;
         val  = uint8(bitand([bitshift(val,-8);val],255));
    case 'int16'
         base = 65536;
         val  = uint16(mod(double(In(k).Val)+base,base)); %make unsigned
         val  = uint8(bitand([bitshift(val,-8);val],255));
    case 'uint32'
         val  = In(k).Val;
         val  = uint8(bitand([bitshift(val,-24);bitshift(val,-16);...
                             bitshift(val,-8) ;val],255)); 
    case 'int32'
         base = 4294967296;
         val  = uint32(mod(double(In(k).Val)+base,base)); %make unsigned
         val  = uint8(bitand([bitshift(val,-24);bitshift(val,-16);...
                             bitshift(val,-8) ;val],255)); 
    otherwise
         error('Error: Class not supported.');
  end %switch

  Out = [Out;val];

end %for

⌨️ 快捷键说明

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