HE/RX_function.m

95 lines
3.5 KiB
Mathematica
Raw Normal View History

2024-03-30 16:35:40 +08:00
function [rxPSDU,bitErrorRate,pktFormat,pktOffset,eqSymPlot,Jam_pos,feedback_data,evm,errorMessage] = RX_function(rx,userIdx,cfgUI,SEED)
cfgRx = wlanHERecoveryConfig;
cfgRx.ChannelBandwidth = cfgUI.ChannelBandwidth;
ind = wlanFieldIndices(cfgRx);
% --3.26
rxPSDU = [];
feedback_data = struct();
feedback_data.staFeedback = [];
feedback_data.PDP = [];
feedback_data.rmsDelay = 0;
feedback_data.DopplerShift = 0;
feedback_data.rssi = 0;
feedback_data.SNR = 0;
feedback_data.JamType = '';
feedback_data.JamData = [];
frameIdx = 1;
bitErrorRate = [];
eqSymPlot = [];
Jam_pos = [];
pktFormat = '';
pktOffset = 0;
evm = 0;
try
[Type,jam_data,Jam_pos] = SpectrumSense(rx,cfgUI); %
rxWaveLen = size(rx,1);
pktOffset = wlanPacketDetect(rx,cfgRx.ChannelBandwidth);%
% Adjust packet offset
if isempty(pktOffset) || (pktOffset + ind.LSIG(2) > rxWaveLen)
feedback_stat = 0;
else
feedback_stat = 1;
end
if feedback_stat==1
%
[rx,pktOffset,gain] = rxFrontEnd(rx,pktOffset,ind,cfgRx);
%
[cfgRx,~,ind] = pktFormatDetect(ind,pktOffset,rx,cfgRx);
%-------0324-----nonHTHE-----------
if ~isfield(ind,'HEData')
pktFormat = 'non-HT';
fprintf('%s packet detected\n\n',pktFormat);
[rxPSDU,bitErrorRate,eqSymPlot]=heSUspecial(rx,cfgRx,userIdx,frameIdx,rxPSDU,cfgUI,SEED,bitErrorRate,eqSymPlot);
else
pktFormat = cfgRx.PacketFormat;
fprintf('%s packet detected\n\n',pktFormat);
%
if strcmp(pktFormat,'HE-SU')
flag = isDataEmpty(rx,cfgUI); % 00NDP
if flag == 1 % 0NDP
% *******NDP*******
pktFormat = 'NDP';
%--------------------------------
[staFeedback,PDP,rmsDelay,DopplerShift,rssi_dbm,SNR] = RX_NDPCal(rx,cfgUI,ind,pktOffset,gain);
% feedback_data = struct();
feedback_data.staFeedback = staFeedback;
feedback_data.PDP = PDP;
feedback_data.rmsDelay = rmsDelay;
feedback_data.DopplerShift = DopplerShift;
feedback_data.rssi = rssi_dbm;
feedback_data.SNR = SNR;
feedback_data.JamType = Type;
feedback_data.JamData = jam_data;
save(['TXPackets\NDPfeedback_for_User' num2str(userIdx) '.mat'],'feedback_data');
elseif flag == 0 % SU
[rxPSDU,bitErrorRate,eqSymPlot] = heSURx(rx,cfgRx,userIdx,frameIdx,rxPSDU,cfgUI,SEED,bitErrorRate,eqSymPlot);
end
elseif strcmp(pktFormat,'HE-MU')
[rxPSDU,bitErrorRate,eqSymPlot,evm]=heMURx(rx,cfgRx,userIdx,frameIdx,rxPSDU,cfgUI,SEED,bitErrorRate,eqSymPlot);
end
end
end
rxPSDU = int16(rxPSDU);
bitErrorRate = double(bitErrorRate);
pktOffset = double(pktOffset);
eqSymPlot = double(eqSymPlot);
Jam_pos = double(Jam_pos);
feedback_data.staFeedback = double(feedback_data.staFeedback);
feedback_data.PDP = double(feedback_data.PDP);
feedback_data.DopplerShift = double(feedback_data.DopplerShift);
feedback_data.rssi = double(feedback_data.rssi);
feedback_data.SNR = double(feedback_data.SNR);
feedback_data.JamData = double(feedback_data.JamData);
evm = double(evm);
errorMessage = '';
catch ErrorInfo
errorMessage = ErrorInfo.message;
end
end