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

📄 mupulrxchain.m

📁 OFDMA 物理层开发的matlab 源码.飞思卡尔提供.对物理层开发的工程师有帮助!
💻 M
📖 第 1 页 / 共 2 页
字号:
            sprintf('../../SPKernel/DeRand/vector/ref/TC%03d/IF1cRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'uint8','R');
        mGenBin(uint8(derand_out(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/TC%03d/IF1cRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'uint8','R');        
             %at SBX\Manager\UL\CM\vector\ref
     mGenBin(uint8(derand_out(1:BlkSize(1,b),b)),...
              sprintf('../../../../../Manager/UL/CM/vector/ref/TC%03d/IF1cRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
              'uint8','R'); 
    end
    
    %Generation of IF1cRX (after Codeblock desegmentation)
        mGenBin(uint8(Out),...
            sprintf('../../SPKernel/DeRand/vector/ref/TC%03d/IF1cRX_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo),...
            'uint8','R');
        mGenBin(uint8(Out),...
            sprintf('../vector/ref/TC%03d/IF1cRX_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo),...
            'uint8','R'); 
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [vitdec_out,BlkSize] = FECDecoder(dil_out,BlkSize,BurstD,TCstr,BurstNo,DemapScale,VitMode,AsyncPhyCtrl,ZoneD,TC)
% This function calls all the modules that belong to the FEC.
% Dependent on the FEC type different modules are called.

%depuncturing
%%%%%%%%%%%%%%%
[depunct_out,BlkSize] = mDepuncturing(dil_out,BlkSize,BurstD.PunctMode);


%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);
    if ~exist(['../../SPKernel/DePunct/vector/ref/',TCstr],'dir')
        mkdir(['../../SPKernel/DePunct/vector/ref/',TCstr]);
    end
    if ~exist(['../../SPKernel/Viterbi/vector/in/',TCstr],'dir')
        mkdir(['../../SPKernel/Viterbi/vector/in/',TCstr]);
    end
    for b=1:size(BlkSize,2)
    %Generation of IF1fRX
        mGenBin(int8(depunct_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/DePunct/vector/ref/TC%03d/IF1eRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(depunct_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/Viterbi/vector/in/TC%03d/IF1eRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(depunct_out(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/TC%03d/IF1eRX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R'); 
    end
end

%viterbi decoding
%%%%%%%%%%%%%%%%%%

%switch to 2x or 3x
switch VitMode
    case '2x'
[vitdec_out_bits,BlkSize] = mVitDecoder_2x(depunct_out,BlkSize,...
 BurstD.FECType,BurstD.PunctMode,DemapScale);
    case '3x'
[vitdec_out_bits,BlkSize] = mVitDecoder_3x(depunct_out,BlkSize,...
 BurstD.FECType,BurstD.PunctMode,DemapScale);
    otherwise
        error('Viterbi Mode unknown : either "2x" or "3x"')
end
        



%data packing
vitdec_out = mBytePack(vitdec_out_bits);
BlkSize=BlkSize/8;

%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);
    if ~exist(['../../SPKernel/Viterbi/vector/ref/',TCstr],'dir')
        mkdir(['../../SPKernel/Viterbi/vector/ref/',TCstr]);
    end
    for b=1:size(BlkSize,2)
    %Generation of IF1fRX
        mGenBin(int8(vitdec_out(1:BlkSize(1,b),b)),...
            sprintf('../../SPKernel/Viterbi/vector/ref/TC%03d/IF1e2RX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(vitdec_out(1:BlkSize(1,b),b)),...
            sprintf('../vector/ref/TC%03d/IF1e2RX_%02d_%02d_%02d_%02d.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R'); 
        mGenBin(int8(vitdec_out_bits(1:BlkSize(1,b)*8,b)),...
            sprintf('../../SPKernel/Viterbi/vector/ref/TC%03d/IF1e2RX_%02d_%02d_%02d_%02d_bits.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R');
        mGenBin(int8(vitdec_out_bits(1:BlkSize(1,b)*8,b)),...
            sprintf('../vector/ref/TC%03d/IF1e2RX_%02d_%02d_%02d_%02d_bits.lod',TC,FN,ZN,BurstNo,b-1),...
            'int8','R'); 
    end
end

















function [Out] = mUPULRXchain_old_v2(SlotVecs,ZoneD,BurstD,PilotAmpl,PilotVecs)

% %path is relative to the UP/*/SPManager/matlab folder
% addpath('../../../CM/Utilities/matlab');
% addpath('../../../UL/SPKernel/DerepSlotDemap/matlab');
% addpath('../../../UL/SPKernel/ChannelEstEq/matlab');
% addpath('../../../UL/SPKernel/DemodMap/matlab');
% addpath('../../../UL/SPKernel/Derep/matlab');
% addpath('../../../UL/SPKernel/SlotDeseg/matlab');
% addpath('../../../UL/SPKernel/DIL/matlab');
% addpath('../../../UL/SPKernel/DePunct/matlab');
% addpath('../../../UL/SPKernel/Viterbi/matlab');
% addpath('../../../UL/SPKernel/DeRand/matlab');
% addpath('../../../UL/SPKernel/CodeBlkDeseg/matlab');


%if pilots are not required then set default
if isempty(PilotVecs)
    %no channel estimation, pilot power unchanged (e.g. UPUL loopback)
    PilotAbs=PilotAmpl;
else
    if prod(size(PilotVecs))==1
        %no channel estimation but pilot power changed (e.g. including TP)
        PilotAbs=PilotVecs;
        PilotVecs=[];
    else
        %derive pilot power from pilots
        %do nothing here
    end
end


%slot data & pilot demapping
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[slotdemap_out, pilotdemap_out] = mSlotDemap(SlotVecs,ZoneD,BurstD,PilotVecs);


%slot data & pilot desegmentation (combine slots to code blocks)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[slotdeseg_out,BlkSize,pilotdeseg_out] = mSlotDeseg(slotdemap_out,BurstD,pilotdemap_out);


%channel estimation and equalization (only if pilots vectors are provided)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ~isempty(PilotVecs)
    %average absolute pilot amplitude (for normalization)
    PilotAbs = mean(mean(abs(double(pilotdeseg_out))));
    %reconfigure distance manually for the time being
    BurstD.Distance = BurstD.Distance*PilotAbs/PilotAmpl;
    %intra-tile estimation and equalization
    estimator_out = ChannelEstimator(BurstD, pilotdeseg_out, PilotAbs, BlkSize/2);
    equalizer_out = ChannelEqualizer(BurstD, slotdeseg_out, estimator_out, BlkSize);
else
    %reconfigure distance manually for the time being
    BurstD.Distance = BurstD.Distance*PilotAbs/PilotAmpl;
    %omit estimation and equalization
    equalizer_out=slotdeseg_out;
end


%demodulation mapping (float)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[demodmap_out,BlkSize] = mDemodMapper(equalizer_out,BlkSize,...
    BurstD.ModMode,BurstD.Distance);


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


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


%depuncturing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[depunct_out,BlkSize] = mDepuncturing(dil_out,BlkSize,BurstD.PunctMode);


%viterbi decoding
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[vitdec_out_bits,BlkSize] = mVitDecoder(depunct_out,BlkSize,...
    BurstD.FECType,BurstD.PunctMode);
%data packing
vitdec_out = mBytePack(vitdec_out_bits);
BlkSize=BlkSize/8;


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


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

⌨️ 快捷键说明

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