HE/RX_function.m
2024-03-30 16:35:40 +08:00

95 lines
3.5 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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