📄 mupulrxchain.m
字号:
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 + -