144 lines
6.2 KiB
Matlab
144 lines
6.2 KiB
Matlab
|
||
function [cfgHE,RU_index,cfgUI] = parameter_fromUI(cfgUI)
|
||
if cfgUI.numTx == 1
|
||
addpath('.\WaveAdp');
|
||
|
||
NumerologySel = [cfgUI.user1.FFTSize,eval(cfgUI.user1.CPLength),cfgUI.user1.pilotInterval];
|
||
load NumerologySet.mat NumerologySet
|
||
for jj =1 :length(NumerologySet)
|
||
if isequal(NumerologySel,NumerologySet(jj,:))
|
||
NumerologyNo = jj;
|
||
break;
|
||
end
|
||
end
|
||
PacketSize = cfgUI.user1.APEPlength;
|
||
[MCS, MCS_no] = MCS_sel(cfgUI.user1.ModulationMode,cfgUI.user1.CodeRate);
|
||
[~,WaveformPara] = WaveformNumerologyCal(PacketSize,NumerologySel,MCS_no);
|
||
RU_index = 192;
|
||
cfgHE = WaveformPara;
|
||
cfgHE.MCS = MCS;
|
||
cfgHE.ChannelCoding = cfgUI.user1.ChannelCode;
|
||
cfgHE.NumTransmitAntennas = 1;
|
||
cfgHE.NumerologyNo = NumerologyNo;
|
||
else
|
||
if strcmp(cfgUI.UserMode,'SU')
|
||
% HE-SU
|
||
RU_index = 192; % 对RU_index赋值,防止报错------------zjd 3.21修改
|
||
%*********************************lql03.21修改*********************************
|
||
cfgUI.allocation = RU_index;
|
||
%*********************************lql03.21修改*********************************
|
||
cfgHE = wlanHESUConfig;
|
||
cfgHE.ChannelBandwidth = cfgUI.ChannelBandwidth; % Channel bandwidth
|
||
cfgHE.NumSpaceTimeStreams = cfgUI.user1.s; % Number of space-time streams
|
||
cfgHE.NumTransmitAntennas = cfgUI.numTx; % Number of transmit antennas
|
||
cfgHE.ExtendedRange = false; % Do not use extended range format
|
||
cfgHE.Upper106ToneRU = false; % Do not use upper 106 tone RU
|
||
cfgHE.PreHESpatialMapping = false; % Spatial mapping of pre-HE fields
|
||
switch cfgUI.user1.CPLength
|
||
case '1/16'
|
||
cfgHE.GuardInterval = 0.8; % Guard interval duration
|
||
cfgHE.HELTFType = 1;% defualt
|
||
case '1/8'
|
||
cfgHE.GuardInterval = 1.6; % Guard interval duration
|
||
cfgHE.HELTFType = 2;
|
||
case '1/4'
|
||
cfgHE.GuardInterval = 3.2; % Guard interval duration
|
||
cfgHE.HELTFType = 4;
|
||
end
|
||
% cfgHE.HELTFType = 4; % HE-LTF compression mode
|
||
cfgHE.ChannelCoding = cfgUI.user1.ChannelCode; % Channel coding
|
||
cfgHE.MCS = MCS_sel(cfgUI.user1.ModulationMode,cfgUI.user1.CodeRate);
|
||
% cfgHE.MCS = 4; % Modulation and coding scheme
|
||
%---------------------------------zjd03.21修改----------------------------------- ???
|
||
% if cfgUI.numTx == cfgUI.numRx
|
||
% cfgHE.SpatialMapping = 'Direct';
|
||
% else
|
||
% cfgHE.SpatialMapping = 'Hadamard';
|
||
% end
|
||
cfgHE.NumSpaceTimeStreams = cfgUI.user1.s; % 配置空时流数
|
||
cfgHE.SpatialMapping = cfgUI.user1.SpatialMapping; % 配置映射方式
|
||
if strcmp(cfgUI.user1.MultiAntennaMode,'STBC') % STBC使能
|
||
cfgHE.STBC = 1;
|
||
cfgHE.NumSpaceTimeStreams = 2;
|
||
else
|
||
cfgHE.STBC = 0;
|
||
end
|
||
if strcmp(cfgHE.SpatialMapping,'Direct')
|
||
cfgHE.NumSpaceTimeStreams = cfgUI.numTx; % 'Direct'要求空时流数=发射天线数
|
||
end
|
||
%------------------------------------------------------------------------------
|
||
cfgHE.APEPLength = cfgUI.user1.APEPlength; % Payload length in bytes
|
||
|
||
elseif strcmp(cfgUI.UserMode,'MU')
|
||
% HE-MU
|
||
% 首先进行资源分配配置
|
||
|
||
RU_index = RU_alloc(cfgUI);
|
||
cfgUI.allocation = RU_index;% 为什么要回传?
|
||
cfgHE = wlanHEMUConfig(RU_index);
|
||
disp('Allocation info:')
|
||
disp(ruInfo(cfgHE))
|
||
% Configure per user parameters
|
||
for unum = 1 : cfgUI.numUsers
|
||
userf = eval(['cfgUI.user' num2str(unum) '.f']);
|
||
numsubRU = sum(userf);
|
||
switch numsubRU
|
||
case 1
|
||
switch RU_index
|
||
case {112,16} %0
|
||
eval(['user' num2str(unum) '=' num2str(find(userf ==1)) ]);
|
||
case 24 %-1
|
||
eval(['user' num2str(unum) '=' num2str(find(userf ==1)) '-1']);
|
||
end
|
||
case 2
|
||
switch RU_index
|
||
case 96 % 上下两个
|
||
cfgHE.RU{1}.SpatialMapping = 'Custom';
|
||
cfgHE.RU{2}.SpatialMapping = 'Custom';
|
||
if (sum(find(userf == 1)) == 3)
|
||
eval(['user' num2str(unum) '=' num2str(1)]);
|
||
elseif (sum(find(userf == 1)) == 7)
|
||
eval(['user' num2str(unum) '=' num2str(2) ]);
|
||
end
|
||
case 100 % 第一个106
|
||
eval(['user' num2str(unum) '=' num2str(unum) ]);
|
||
case 97 % 第二个106 +1
|
||
eval(['user' num2str(unum) '=' num2str(unum) '+1']);
|
||
case 24
|
||
eval(['user' num2str(unum) '=' num2str(1) ]);
|
||
case 16
|
||
eval(['user' num2str(unum) '=' num2str(3) ]);
|
||
end
|
||
case 4
|
||
cfgHE.RU{1}.SpatialMapping = 'Custom';
|
||
eval(['user' num2str(unum) '=' num2str(unum) ]);
|
||
end
|
||
end
|
||
% STA #1
|
||
cfgHE.User{1}.NumSpaceTimeStreams = 1;
|
||
cfgHE.User{1}.MCS = MCS_sel(cfgUI.user1.ModulationMode,cfgUI.user1.CodeRate);
|
||
cfgHE.User{1}.APEPLength = cfgUI.user1.APEPlength;
|
||
cfgHE.User{1}.STAID = 1;
|
||
cfgHE.User{1}.ChannelCoding = cfgUI.user1.ChannelCode;
|
||
if length(cfgHE.User)>1
|
||
% STA #2
|
||
cfgHE.User{2}.NumSpaceTimeStreams = 1;
|
||
cfgHE.User{2}.MCS = MCS_sel(cfgUI.user2.ModulationMode,cfgUI.user2.CodeRate);
|
||
cfgHE.User{2}.APEPLength = cfgUI.user2.APEPlength;
|
||
cfgHE.User{2}.STAID = 2;
|
||
cfgHE.User{2}.ChannelCoding = cfgUI.user2.ChannelCode;
|
||
end
|
||
% Configure common parameters for all users
|
||
cfgHE.NumTransmitAntennas = cfgUI.numTx;
|
||
switch cfgUI.user1.CPLength
|
||
case '1/16'
|
||
cfgHE.GuardInterval = 0.8; % Guard interval duration
|
||
case '1/8'
|
||
cfgHE.GuardInterval = 1.6; % Guard interval duration
|
||
case '1/4'
|
||
cfgHE.GuardInterval = 3.2; % Guard interval duration
|
||
end
|
||
end
|
||
end
|
||
end
|