📄 mslotprocess_lib2.m
字号:
function [Data SlotMeasurement]= mSlotProcess_LIB2(SymbolSlot,SlotVecIndex,NAntenna,...
NSubCh,NFFTUsed,SlotUIUC,SlotModType,TileLocationLUT,...
PNCodeLUT,SubChannelLUT,CEenable,DemapScale,TC,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: mSlotProcess_LIB2.m.rca $
% $Revision: 1.4 $
% $Date: Tue Jan 23 05:32:44 2007 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
format long;
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);
%Full length of data and pilots for TV generation
FullData=zeros(NSubCh*FPULNDATACARRIER,NAntenna);
FullPilot=zeros(NSubCh*FPULNDATACARRIER/2,NAntenna);
IF2dRXCtrl=zeros(NSubCh*4,NAntenna);
IF2cRXCtrl=zeros(NSubCh*FPULNDATACARRIER,NAntenna);
FullDataMRC=zeros(NSubCh*FPULNDATACARRIER,1);
IF2aRXCtrl=zeros(NSubCh*4,1);
FullDataRotation=zeros(NSubCh*FPULNDATACARRIER,1);
DataAntEq=zeros(NAntenna,NSubCh,FPULNDATACARRIER);
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);
% Process for UL ACK UIUC
if (SlotSubChUIUC == 16)
Data1Ant(ant,SubCh,:) = [DataAntSubCh(1:2) DataAntSubCh(5:6) DataAntSubCh(9:10) ...
DataAntSubCh(13:16) DataAntSubCh(21:24) DataAntSubCh(29:32) ...
DataAntSubCh(37:38) DataAntSubCh(41:42) DataAntSubCh(45:46)];
Data2Ant(ant,SubCh,:) = [DataAntSubCh(3:4) DataAntSubCh(7:8) DataAntSubCh(11:12) ...
DataAntSubCh(17:20) DataAntSubCh(25:28) DataAntSubCh(33:36) ...
DataAntSubCh(39:40) DataAntSubCh(43:44) DataAntSubCh(47:48)];
Data1Ant2d(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2)) = Data1Ant(ant,SubCh,:);
Data2Ant2d(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2)) = Data2Ant(ant,SubCh,:);
Pilot11Ant(1:FPULNPILOTCARRIER/4) = [PilotSubCh(1,1:2) PilotSubCh(1,5:6) PilotSubCh(1,9:10)];
Pilot13Ant(1:FPULNPILOTCARRIER/4) = [PilotSubCh(2,1:2) PilotSubCh(2,5:6) PilotSubCh(2,9:10)];
Pilot21Ant(1:FPULNPILOTCARRIER/4) = [PilotSubCh(1,3:4) PilotSubCh(1,7:8) PilotSubCh(1,11:12)];
Pilot23Ant(1:FPULNPILOTCARRIER/4) = [PilotSubCh(2,3:4) PilotSubCh(2,7:8) PilotSubCh(2,11:12)];
ChanEst1(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2)) = ...
mCEIntraTile(FPULNTILE/2,Pilot11Ant,Pilot13Ant);
ChanEst2(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2)) = ...
mCEIntraTile(FPULNTILE/2,Pilot21Ant,Pilot23Ant);
RSSI1Ant(ant) = 0.5;
CINR1Ant(ant) = 0.5;
FreqOff1Ant(ant) = 0.5;
TimeOff1Ant(ant) = 0.5;
RSSI2Ant(ant) = 0.5;
CINR2Ant(ant) = 0.5;
FreqOff2Ant(ant) = 0.5;
TimeOff2Ant(ant) = 0.5;
RSSIAnt(ant) = 0.5;
CINRAnt(ant) = 0.5;
FreqOffAnt(ant) = 0.5;
TimeOffAnt(ant) = 0.5;
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);
ChanEst(SubCh,((ant-1)*FPULNDATACARRIER+1):ant*FPULNDATACARRIER) = ...
mCEIntraTile(FPULNTILE,Pilot1Ant,Pilot3Ant);
CEtemp=mCEIntraTile(FPULNTILE,Pilot1Ant,Pilot3Ant);
ChanEst(SubCh,((ant-1)*FPULNDATACARRIER+1):ant*FPULNDATACARRIER) = CEtemp;
%To be uesd in TV generation
FullData(((SubChPhy-1)*FPULNDATACARRIER+1):SubChPhy*FPULNDATACARRIER,ant)=DataAntSubCh.';
FullPilot(((SubChPhy-1)*FPULNDATACARRIER/2+1):SubChPhy*FPULNDATACARRIER/2,ant)=PilotAnt.';
IF2dRXCtrl(((SubChPhy-1)*4+1):SubChPhy*4,ant)=[RSSIAnt(ant);CINRAnt(ant);FreqOffAnt(ant);TimeOffAnt(ant)];
IF2cRXCtrl(((SubChPhy-1)*FPULNDATACARRIER+1):SubChPhy*FPULNDATACARRIER,ant)=CEtemp;
end % (SlotSubChUIUC == 16)
end % ant=1:NAntenna
% Process for UL ACK UIUC
if (SlotSubChUIUC == 16)
Data1Ant2dEq(SubCh,:) = mEqZF(Data1Ant2d(SubCh,:),ChanEst1(SubCh,:));
Data2Ant2dEq(SubCh,:) = mEqZF(Data2Ant2d(SubCh,:),ChanEst2(SubCh,:));
for ant=1:NAntenna
Data1AntEq(ant,SubCh,:) = Data1Ant2dEq(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2));
Data2AntEq(ant,SubCh,:) = Data2Ant2dEq(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2));
DataAntEq(ant,SubCh,:) = [Data1Ant2dEq(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2)) ...
Data2Ant2dEq(SubCh,((ant-1)*(FPULNDATACARRIER/2)+1):ant*(FPULNDATACARRIER/2))];
end % ant=1:NAntenna
else
DataAnt2dEq(SubCh,:) = mEqZF(DataAnt2d(SubCh,:),ChanEst(SubCh,:));
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)
Data1AntSubChEq(:,:) = Data1AntEq(:,SubCh,:);
Data2AntSubChEq(:,:) = Data2AntEq(:,SubCh,:);
[Data1SubCh,RSSI(SubCh),CINR(SubCh),FreqOff(SubCh),TimeOff(SubCh)] = ...
mMRC(NAntenna,(FPULNDATACARRIER/2),Data1AntSubChEq,RSSI1Ant,CINR1Ant,FreqOff1Ant,TimeOff1Ant);
[Data2SubCh,RSSI(SubCh),CINR(SubCh),FreqOff(SubCh),TimeOff(SubCh)] = ...
mMRC(NAntenna,(FPULNDATACARRIER/2),Data2AntSubChEq,RSSI2Ant,CINR2Ant,FreqOff2Ant,TimeOff2Ant);
RSSI(SubCh) = 0.5;
CINR(SubCh) = 0.5;
FreqOff(SubCh) = 0.5;
TimeOff(SubCh) = 0.5;
DataDR(SubCh,:) = [Data1SubCh Data2SubCh];
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
%To be uesd in TV generation
FullDataMRC(((SubChPhy-1)*FPULNDATACARRIER+1):SubChPhy*FPULNDATACARRIER)=DataDR(SubCh,:).';
IF2aRXCtrl(((SubChPhy-1)*4+1):SubChPhy*4,ant)=[RSSI(SubCh);CINR(SubCh);FreqOff(SubCh);TimeOff(SubCh)];
%To be uesd in TV generation
FullDataRotation(((SubChPhy-1)*FPULNDATACARRIER+1):SubChPhy*FPULNDATACARRIER)=DataDR(SubCh,:).';
% Data Rotation
if (exist('DemodMapGap','var') == 1)
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -