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

📄 mslotprocess_lib2.m

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