📄 mgenstructupdl.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 + -