📄 mdltablegen.m
字号:
%***************************************************************************
% 802.16-2004 OFDMA PHY - mGenDlTable function
%
% [DlCarrierMap] = mGenDlTable(ZoneConfig, AsyncPhyControl)
%
% Description: This functions generates the carrier scrambling
% table, that enables translation from logical to physical
% carrier numbers.
%
% Input:
% ZoneConfig: Data Structure that contains zone configuration
% params, including number of carriers, number of
% used carriers, maximum number of subchanels, etc.
% For details please see WiMAX Integration Framework
% Specification document
% AsyncPhyControl:Asynchronous PHY control data structure
% contains info such as DlPremableBase IdCell, etc.
%
% Output:
% DlCarrierMap: Map for data carriers within OFDMA symbol, that
% enables translation of the physical carrier numbers
% into the logical carrier numbers.
%
% Functions:
% N/A
%
% Data Files:
% N/A
%
%***************************************************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Property of Freescale
% Freescale Confidential Proprietary
% Freescale Copyright (C) 2005 All rights reserved
% ----------------------------------------------------------------------------
% $RCSfile: mDlTableGen.m.rca $
% $Revision: 1.4 $
% $Date: Fri Dec 15 04:48:22 2006 $
% Target: Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [DlCarrierMap] = mGenDlTable(ZoneConfig, AsyncPhyControl)
%PUSC DL Table calculation
if (ZoneConfig.ZoneType==2)
% assign renumbering sequence and groups, which are FFT size dependent
switch ZoneConfig.NFFT
case 2048
RenumberingSeq = ...
[ 6,108, 37, 81, 31,100, 42,116, 32,107,...
30, 93, 54, 78, 10, 75, 50,111, 58,106,...
23,105, 16,117, 39, 95, 7,115, 25,119,...
53, 71, 22, 98, 28, 79, 17, 63, 27, 72,...
29, 86, 5,101, 49,104, 9, 68, 1, 73,...
36, 74, 43, 62, 20, 84, 52, 64, 34, 60,...
66, 48, 97, 21, 91, 40,102, 56, 92, 47,...
90, 33,114, 18, 70, 15,110, 51,118, 46,...
83, 45, 76, 57, 99, 35, 67, 55, 85, 59,...
113, 11, 82, 38, 88, 19, 77, 3, 87, 12,...
89, 26, 65, 41,109, 44, 69, 8, 61, 13,...
96, 14,103, 2, 80, 24, 112, 4, 94, 0 ];
Group = [zeros(1,24) ones(1,16) 2*ones(1,24) 3*ones(1,16) 4*ones(1,24) 5*ones(1,16)];
PermSeqEven = [6,9,4,8,10,11,5,2,7,3,1,0];
PermSeqOdd = [7,4,0,2,1,5,3,6];
case 1024
RenumberingSeq = ...
[ 6, 48, 37, 21, 31, 40, 42, 56, 32, 47,...
30, 33, 54, 18, 10, 15, 50, 51, 58, 46,...
23, 45, 16, 57, 39, 35, 7, 55, 25, 59,...
53, 11, 22, 38, 28, 19, 17, 3, 27, 12,...
29, 26, 5, 41, 49, 44, 9, 8, 1, 13,...
36, 14, 43, 2, 20, 24, 52, 4, 34, 0 ];
Group = [zeros(1,12) ones(1,8) 2*ones(1,12) 3*ones(1,8) 4*ones(1,12) 5*ones(1,8)];
PermSeqEven = [3,2,0,4,5,1];
PermSeqOdd = [3,0,2,1];
case 512
RenumberingSeq = ...
[12, 13, 26, 9, 5, 15, 21, 6, 28, 4,...
2, 7, 10, 18, 29, 17, 16, 3, 20, 24,...
14, 8, 23, 1, 25, 27, 22, 19, 11, 0];
Group = [zeros(1,10) 2*ones(1,10) 4*ones(1,10)];
PermSeqEven = [4,2,3,1,0];
PermSeqOdd = [];
case 128
RenumberingSeq = [2, 3, 1, 5, 0, 4];
Group = [zeros(1,2) 2*ones(1,2) 4*ones(1,2)];
PermSeqEven = [0,1];
PermSeqOdd = [];
otherwise
disp('Error: FFT size not supported (see ZoneConfig)');
end
% subcarrier scrambling within group
NsubchEven = length(PermSeqEven);
NsubchOdd = length(PermSeqOdd);
% generates n(s,k), s = 0...Nsubch-1
for k = 0:23
nkEven(k+1,:) = mod((k+13.*(0:NsubchEven-1)),24);
nkOdd(k+1,:) = mod((k+13.*(0:NsubchOdd-1)),24);
end
% generates p(s), s = 0...Nsubch-1
for k=1:NsubchEven
pEven(:,k) = [PermSeqEven(k:end) PermSeqEven(1:k-1)]';
end
for k=1:NsubchOdd
pOdd(:,k) = [PermSeqOdd(k:end) PermSeqOdd(1:k-1)]';
end
% generates subcarrier mapping
for k=1:24
for s=1:NsubchEven
subcarrierEven(k,s) = ...
NsubchEven*nkEven(k,s) ...
+ mod((pEven(1+mod(nkEven(k,s),NsubchEven),s)+ AsyncPhyControl.DlPermBase),NsubchEven);
end
for s=1:NsubchOdd
subcarrierOdd(k,s) = ...
NsubchOdd*nkOdd(k,s) ...
+ mod((pOdd(1+mod(nkOdd(k,s),NsubchOdd),s)+ AsyncPhyControl.DlPermBase),NsubchOdd);
end
end
if (ZoneConfig.NFFT == 512) | (ZoneConfig.NFFT == 128)
%only even groups for FFT-128 and FFT-512
subcarrierEvenV = reshape(subcarrierEven,NsubchEven*24,1);
subcarrierOddV = [];
%subcarrier scrambling
subcarrierEvenScrambled = (0:NsubchEven*24-1)';
subcarrierEvenScrambled(subcarrierEvenV+1) = subcarrierEvenScrambled;
subcarrierOddScrambled = [];
else
%even and odd groups for FFT-1024 and FFT-2048
subcarrierEvenV = reshape(subcarrierEven,NsubchEven*24,1);
subcarrierOddV = reshape(subcarrierOdd,NsubchOdd*24,1);
%subcarrier scrambling
subcarrierEvenScrambled = (0:NsubchEven*24-1)';
subcarrierEvenScrambled(subcarrierEvenV+1) = subcarrierEvenScrambled;
subcarrierOddScrambled = (0:NsubchOdd*24-1)';
subcarrierOddScrambled(subcarrierOddV+1) = subcarrierOddScrambled;
end
%concatenate all groups
LogClusterOrder = [subcarrierEvenScrambled; subcarrierOddScrambled+NsubchEven*24];
LogClusterOrder = [ LogClusterOrder;...
LogClusterOrder+(NsubchEven+NsubchOdd)*24;...
LogClusterOrder+(NsubchEven+NsubchOdd)*48 ];
%format one cluster per column (logical oder)
LogClusterOrder = reshape(LogClusterOrder,12,ZoneConfig.NCluster);
%cluster permutation
LogCluster = RenumberingSeq(1+mod(((0:ZoneConfig.NCluster-1)+13*AsyncPhyControl.DlPermBase),ZoneConfig.NCluster));
%column vector in physical carrier order with the corresponding logical carrier index
DlCarrierMap = reshape(LogClusterOrder(:,LogCluster+1), 12*ZoneConfig.NCluster, 1);
elseif (ZoneConfig.ZoneType==1)
%FUSC DL Table calculation
Nsubchannel=ZoneConfig.MaxSubch;
Nsubcarrier=ZoneConfig.CarrierPerSubch;
switch ZoneConfig.NFFT
case 512
PermSeq=[2,0,1,6,4,3,5,7];
case 1024
PermSeq=[6,14,2,3,10,8,11,15,9,1,13,12,5,7,4,0];
otherwise
disp(sprintf('FFT size %d is not supported by mDLTableBen',ZoneConfig.NFFT));
end
% DlPermBase=0;
DlPermBase=AsyncPhyControl.DlPermBase;
subcarrier=zeros(Nsubcarrier,Nsubchannel);
for k = 0:Nsubcarrier-1
nk(k+1,:) = mod((k+13.*(0:Nsubchannel-1)),Nsubcarrier);
end
for s=1:Nsubchannel
p(:,s) = [PermSeq(s:end) PermSeq(1:s-1)]';
end
for k=1:Nsubcarrier
for s=1:Nsubchannel
subcarrier(k,s) = ...
Nsubchannel*nk(k,s) ...
+ mod((p(1+mod(nk(k,s),Nsubchannel),s)+ DlPermBase),Nsubchannel);
end
end
subcarrierV = reshape(subcarrier,[],1);
%subcarrier scrambling
subcarrierScrambled = (0:Nsubchannel*Nsubcarrier-1)';
subcarrierScrambled(subcarrierV+1) = subcarrierScrambled;
DlCarrierMap=subcarrierScrambled;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -