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

📄 mupulrxchain.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
📖 第 1 页 / 共 2 页
字号:
% Uplink Rx (BS) chain of user processing of IEEE 802.16-2004
% (WiMAX, OFDMA only)
%
%     [Out] = mUPULRXchain(SlotVecs,ZoneD,BurstD,PilotAmpl,PilotVecs)
%
% This function chains up all the required Matlab functions and
% processes all slots of one burst. After Randomization the decoded data
% is available for further processing in the MAC.
%
% SlotVecs:  input matrix, data from FP (complex)
%            one column per slot vector, 48*ZoneD.NumSubch rows
% ZoneD    : zone descriptor
% BurstD   : uplink burst descriptor
% PilotAmpl: original pilot amplitude which is consistent with the distance
% PilotVecs: input matrix, pilots from FP (int16, complex)
%            one column per slot vector, 24*ZoneD.NumSubch rows
%            If only one values is provided, it gives the average absolute
%            pilot amplitude. No channel estimation if matrix is empty .
%
% Out      : output vector, payload data for one burst
%            (unsigned bytes, values 0 or 255)
%
% Matlab 7 Release 14 SP2
% The communication toolbox is required.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Property of Freescale
%  Freescale Confidential Proprietary
%  Freescale Copyright (C) 2005 All rights reserved
%  ----------------------------------------------------------------------------
%  $RCSfile: mUPULRXchain.m.rca $
%  $Revision: 1.18 $
%  $Date: Mon Jan 22 14:39:04 2007 $
%  Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%-- Matlab files used by this file
% mSlotDemap
% mSlotDeseg
% mDerep
% mDIL
% mDerandomizer
% mCodeBlkDeseg
% mVitDecoder_2x
% mVitDecoder_3x
% mDepuncturing
%-- End of list

% DemapScale set to 'n' means unquant Viterbi
% DemapScale set to 'y' means soft 8  Viterbi
% TC is not compulsory, by default TC=0
% VitMode is not compulsory. Viterbi Mode: '2x' or '3x' (2x by default)

function [Out] = mUPULRXchain(SlotVecs,ZoneD,BurstD,BlkSize,BurstNo,DemapScale,VitMode,AsyncPhyCtrl,TC)


if ~exist('TC')
    TC=0; %by default, no TV generation
    AsyncPhyCtrl = 'non available';
end

if isreal(SlotVecs) %call the LIB2 function
    [Out] = mUPULRXchainLIB2_v2(SlotVecs,BlkSize,BurstD,BurstNo,DemapScale,VitMode,AsyncPhyCtrl,ZoneD,TC);
else %call the original
    [Out] = mUPULRXchain_old_v2(SlotVecs,ZoneD,BurstD,PilotAmpl,PilotVecs);
end

if exist('VitMode')==0
    VitMode='2x'; %go to 2x by default
end

if ~exist('TC')
    TC=0; %by default, no TV generation
end
        


%TV generation
if TC

%     FN=0;%Frame number and Zone number is concidered as 0 for time being
%     ZN=0;%Frame number and Zone number is concidered as 0 for time being
    FN=AsyncPhyCtrl.FrameNr;
    ZN=ZoneD.ZoneNr;

        TCstr=sprintf('TC%03d',TC);
        if ~exist(['../vector/ref/',TCstr],'dir')
            mkdir(['../vector/ref/',TCstr]);
        end


    blks=size(SlotVecs,2);
    for b=1:blks,
        
        %Generation of IF1jRX  
        %at SBX/SP/UP/DL/SPManager/vector/ref
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/%s/IF1jRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');

        %at SBX/Manager/UL/DataExtraction/vector/in
        if ~exist(['../../../../../Manager/UL/DataExtraction/vector/in/',TCstr],'dir')
            mkdir(['../../../../../Manager/UL/DataExtraction/vector/in/',TCstr]);
        end        
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../../../../../Manager/UL/DataExtraction/vector/in/%s/IF1jRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');

        %at SBX/Manager/UL/ULCodeBlockSeg/vector/ref
        if ~exist(['../../../../../Manager/UL/ULCodeBlockSeg/vector/ref/',TCstr],'dir')
            mkdir(['../../../../../Manager/UL/ULCodeBlockSeg/vector/ref/',TCstr]);
        end
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../../../../../Manager/UL/ULCodeBlockSeg/vector/ref/%s/IF1jRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');   

        %Generation of IF1jRX and IF1iRX 
        %at SBX/SP/UP/DL/SPManager/vector/ref
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/%s/IF1iRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');
        %at SBX/Manager/UL/DataExtraction/vector/ref
        if ~exist(['../../../../../Manager/UL/DataExtraction/vector/ref/',TCstr],'dir')
            mkdir(['../../../../../Manager/UL/DataExtraction/vector/ref/',TCstr]);
        end        
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../../../../../Manager/UL/DataExtraction/vector/ref/%s/IF1iRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');
        %SBX/SP/UP/UL/SPKernel/Derep/vector/in
        if ~exist(['../../SPKernel/Derep/vector/in/',TCstr],'dir')
            mkdir(['../../SPKernel/Derep/vector/in/',TCstr]);
        end        
        mGenBin(int8(SlotVecs(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/Derep/vector/in/%s/IF1iRX_%02d_%02d_%02d_%02d.lod',TCstr,FN,ZN,BurstNo,b-1),...
            'int8','R');
    end
end



function [Out] = mUPULRXchainLIB2_v2(SlotVecs,BlkSize,BurstD,BurstNo,DemapScale,VitMode,AsyncPhyCtrl,ZoneD,TC)

% %slot data & pilot demapping
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [slotdemap_out] = mSlotDemap(SlotVecs.',ZoneD,BurstD);
% 
% %slot desegmentation (combine slots to code blocks)
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [slotdeseg_out,BlkSize] = mSlotDeseg(slotdemap_out,BurstD);

%slot derepetition
%%%%%%%%%%%%%%%%%%%
[derep_out,BlkSize] = mDerep(SlotVecs,BlkSize,BurstD.R,BurstD.ModMode);

%deinterleaving
%%%%%%%%%%%%%%%%
[dil_out,BlkSize] = mDIL(derep_out,BlkSize,BurstD.ModMode);

TCstr= [];
%FEC decoding
%%%%%%%%%%%%%%
[FEC_out,BlkSize] = FECDecoder(dil_out,BlkSize,BurstD,TCstr,BurstNo,DemapScale,VitMode,AsyncPhyCtrl,ZoneD,TC);

%de-randomize
%%%%%%%%%%%%%%
[derand_out,BlkSize] = mDerandomizer(FEC_out,BlkSize);

%code block de-segmentation
Out=mCodeBlkDeseg(derand_out,BlkSize);

%Generation of test vectors
if TC  
%     FN=0;%Frame number and Zone number is concidered as 0 for time being
%     ZN=0;%Frame number and Zone number is concidered as 0 for time being
    FN=AsyncPhyCtrl.FrameNr;
    ZN=ZoneD.ZoneNr;
    TCstr=sprintf('TC%03d',TC);
    %at SBX/SP/UP/UL/SPKernel/Derep
        if ~exist(['../../SPKernel/Derep/vector/ref/',TCstr],'dir')
            mkdir(['../../SPKernel/Derep/vector/ref/',TCstr]);
        end  
        if ~exist(['../../SPKernel/DIL/vector/in/',TCstr],'dir')
            mkdir(['../../SPKernel/DIL/vector/in/',TCstr]);
        end  
        if ~exist(['../../SPKernel/DIL/vector/ref/',TCstr],'dir')
            mkdir(['../../SPKernel/DIL/vector/ref/',TCstr]);
        end  
        if ~exist(['../../SPKernel/DePunct/vector/in/',TCstr],'dir')
            mkdir(['../../SPKernel/DePunct/vector/in/',TCstr]);
        end 
        if ~exist(['../../SPKernel/DeRand/vector/ref/',TCstr],'dir')
            mkdir(['../../SPKernel/DeRand/vector/ref/',TCstr]);
        end 
        
    for b=1:size(BlkSize,2)
    %Generation of IF1gRX %at SBX/SP/UP/UL/SPKernel/Derep
        mGenBin(int8(derep_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/Derep/vector/ref/TC%03d/IF1gRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
       %at SBX/SP/UP/DL/SPManager/vector/ref
        mGenBin(int8(derep_out(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/TC%03d/IF1gRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R'); 
        %at SBX/SP/UP/UL/SPKernel/DIL
        mGenBin(int8(derep_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/DIL/vector/in/TC%03d/IF1gRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        
    %Generation of IF1fRX
        mGenBin(int8(dil_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/DIL/vector/ref/TC%03d/IF1fRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(dil_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/DePunct/vector/in/TC%03d/IF1fRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(dil_out(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/TC%03d/IF1fRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R'); 
        
    %Generation of IF1cRX (before Codeblock desegmentation)
        mGenBin(uint8(derand_out(1:BlkSize(1,b),b)),...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -