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-----临时判断是nonHT还是HE----------- 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); % 判断数据长度是否为0,为0则是NDP if flag == 1 % 数据长度为0,说明是NDP % *******计算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