📄 slotprocess_lib2.m
字号:
function [Data SlotMeasurement]= mSlotProcess_LIB2(SymbolSlot,SlotVecIndex,NAntenna,...
NSubCh,NFFTUsed,SlotUIUC,SlotModType,TileLocationLUT,...
PNCodeLUT,SubChannelLUT,CEenable,DemapScale,DemodMapGap)
% Slot Process of IEEE 802.16-2005 (WiMAX, OFDMA only)
% Input:
% SymbolSlot -- Symbol from Ant0-N: Real0,Imag0,Real1,Imag1,..
% Output:
% Data -- Output data
% Remark:
%
% Matlab 7 Release 14 SP2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Property of Freescale
% Freescale Confidential Proprietary
% Freescale Copyright (C) 2005 All rights reserved
% ----------------------------------------------------------------------------
% $RCSfile: SlotProcess_LIB2.m.rca $
% $Revision: 1.2 $
% $Date: Fri Jan 12 18:24:31 2007 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
format long;
%adjust data format
Q=15;
Q2=31;
FPULNTILE = 6;
FPULNDATACARRIER = 48;
FPULNPILOTCARRIER = 24;
if (exist('DemodMapGap','var') == 0)
FPULDEMODMAPGAP = max(max(SlotModType));
else
FPULDEMODMAPGAP = DemodMapGap;
end
Data = zeros(NSubCh,FPULNDATACARRIER*FPULDEMODMAPGAP);
RSSI = zeros(1,NSubCh);
CINR = zeros(1,NSubCh);
FreqOff = zeros(1,NSubCh);
TimeOff = zeros(1,NSubCh);
for SubChPhy = 1:NSubCh
SubCh = SubChannelLUT(SubChPhy) + 1;
SlotSubChUIUC = SlotUIUC((SlotVecIndex+1),SubCh);
SlotSubChModType = SlotModType((SlotVecIndex+1),SubCh);
% Check for ranging (UIUC=12,13) or unused SubChannel (UIUC=0xff,0xfe)
if ((SlotSubChUIUC ~= 12)&&(SlotSubChUIUC ~= 13)&&(SlotSubChUIUC ~= 254)&&(SlotSubChUIUC ~= 255))
for ant=1:NAntenna
SubChTileLocationLUT = TileLocationLUT((SlotVecIndex+1),SubCh,:);
SymbolSlotAnt(:,:) = SymbolSlot(ant,:,:);
% [DataAntSubCh,PilotSubCh]= mSlotExtraction(NFFTUsed,...
% SlotVecIndex,SymbolSlotAnt,SubChTileLocationLUT,PNCodeLUT);
%-- USE OF SLOT EXTRACTION HERE --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[DataAntSubCh,PilotSubCh]= SlotExtraction(NFFTUsed,...
SlotVecIndex,SymbolSlotAnt,SubChTileLocationLUT,PNCodeLUT);
%-- USE OF SLOT EXTRACTION MEX FILE VALIDATED
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Process for UL ACK UIUC
if (SlotSubChUIUC == 16)
%tbd
else % (SlotSubChUIUC == 16)
DataAnt(ant,SubCh,:) = DataAntSubCh;
DataAnt2d(SubCh,((ant-1)*FPULNDATACARRIER+1):ant*FPULNDATACARRIER) = DataAntSubCh;
Pilot1Ant(1:FPULNPILOTCARRIER/2) = PilotSubCh(1,1:FPULNPILOTCARRIER/2);
Pilot3Ant(1:FPULNPILOTCARRIER/2) = PilotSubCh(2,1:FPULNPILOTCARRIER/2);
PilotAnt = [Pilot1Ant Pilot3Ant];
[RSSIAnt(ant) CINRAnt(ant) FreqOffAnt(ant) TimeOffAnt(ant)] = mSlotMeasurement(PilotAnt);
%sometimes imag part of pilots=0 and then mex thinks it is
%real data.
if isreal(Pilot1Ant)
imag_factor = 0.01;
Pilot1Ant = Pilot1Ant + imag_factor*i*ones(size(Pilot1Ant,1),size(Pilot1Ant,2));
end
if isreal(Pilot3Ant)
imag_factor = 0.01;
Pilot3Ant = Pilot3Ant + imag_factor*i*ones(size(Pilot3Ant,1),size(Pilot3Ant,2));
end
[ChanEst(SubCh,((ant-1)*FPULNDATACARRIER+1):ant*FPULNDATACARRIER)] = ...
CEIntraTile(FPULNTILE,Pilot1Ant,Pilot3Ant);%./2^15; %be careful, adjust data
end % (SlotSubChUIUC == 16)
end % ant=1:NAntenna
% Process for UL ACK UIUC
if (SlotSubChUIUC == 16)
%tbd
else
if isreal(ChanEst(SubCh,:))
imag_factor = 0.01;
ChanEst(SubCh,:) = ChanEst(SubCh,:) + imag_factor*i*ones(size(ChanEst(SubCh,:),1),size(ChanEst(SubCh,:),2));
end
if isreal(DataAnt2d(SubCh,:))
imag_factor = 0.01;
DataAnt2d(SubCh,:) = DataAnt2d(SubCh,:) + imag_factor*i*ones(size(DataAnt2d(SubCh,:),1),size(DataAnt2d(SubCh,:),2));
end
DataAnt2dEq(SubCh,:) = EqZF(DataAnt2d(SubCh,:),ChanEst(SubCh,:));%./2^Q;%be careful, adjust data
for ant=1:NAntenna
if (CEenable =='y')
DataAntEq(ant,SubCh,:) = DataAnt2dEq(SubCh,((ant-1)*FPULNDATACARRIER+1):ant*FPULNDATACARRIER);
else
DataAntEq(ant,SubCh,:) = DataAnt(ant,SubCh,:);
end
end
end
if (NAntenna > 1)
% Process for UL ACK UIUC
if (SlotSubChUIUC == 16)
%tbd
else
DataAntSubChEq(:,:) = DataAntEq(:,SubCh,:);
[DataSubCh,RSSI(SubCh),CINR(SubCh),FreqOff(SubCh),TimeOff(SubCh)] = ...
mMRC(NAntenna,FPULNDATACARRIER,DataAntSubChEq,RSSIAnt,CINRAnt,FreqOffAnt,TimeOffAnt);
DataDR(SubCh,:) = DataSubCh;
end
else
DataDR(SubCh,:) = DataAntEq(1,SubCh,:);
RSSI(SubCh) = RSSIAnt(1);
CINR(SubCh) = CINRAnt(1);
FreqOff(SubCh) = FreqOffAnt(1);
TimeOff(SubCh) = TimeOffAnt(1);
end
rotation=0; % hack : switch off data rotation
if rotation
if ((SlotSubChUIUC ~= 0) & (SlotSubChUIUC ~= 16))
DataOrg = DataDR(SubCh,:);
for SubChData = 1:FPULNDATACARRIER
DataDR(SubCh,SubChData) = DataOrg(mod(((SubChData-1)+(SubChPhy-1)*13),FPULNDATACARRIER)+1);
end
end
end
% Demodulation mapper
DataDM = DataDR(SubCh,:).';
if isreal(DataDM)
imag_factor = 0.01;
DataDM = DataDM + imag_factor*i*ones(size(DataDM,1),size(DataDM,2));
end
[DataOut BlkSize] = DemodMapper(DataDM,length(DataDM),SlotSubChModType,DemapScale);
Data(SubCh,1:BlkSize) = DataOut.';
end
end
SlotMeasurement = [RSSI;CINR;FreqOff;TimeOff];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -