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

📄 slotprocess_lib2.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 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 + -