95 lines
3.5 KiB
Mathematica
95 lines
3.5 KiB
Mathematica
![]() |
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
|