HE/RX_NDPCal.m

61 lines
2.5 KiB
Mathematica
Raw Normal View History

2024-03-30 16:35:40 +08:00
function [staFeedback,PDP,rmsDelay,DopplerShift,rssi_dbm,SNR] = RX_NDPCal(rx,cfgHE,ind,pktOffset,gain)
addpath(genpath('.\sounding'));
% ****NDP
% rxNDP = txNDP(:,1:2);
%
numTx = cfgHE.numTx;
cfgNDP = wlanHESUConfig('APEPLength',0,'GuardInterval',0.8); % No data in an NDP
cfgNDP.NumTransmitAntennas = numTx;%??
cfgNDP.NumSpaceTimeStreams = numTx;%??
txNDP = wlanWaveformGenerator([],cfgNDP);
len_NDP = length(txNDP);
% PN
K = 255;
soundingSeqMod_1 = zadoffChuSeq(29,K);
soundingSeqMod_2 = zadoffChuSeq(47,K);
% Concatenate multiple sequences to sound the channel periodically.
numSeq = 10; % Number of transmitted sequences in a WSS period
soundingSeqMod = [soundingSeqMod_1, soundingSeqMod_2];
txSignal = repmat(soundingSeqMod,numSeq,1);
len_sd = length(txSignal);
% for userIdx = 1:numUsers
% NDP
% Get the full-band beamforming feedback for a user
staFeedback = heUserBeamformingFeedback(rx,cfgNDP);
sounding_seq = rx(len_NDP+1:len_NDP+len_sd);
[PDP,rmsDelay,DopplerShift] = rxChannelSounding(sounding_seq,cfgHE,numSeq,K);
% end
% RSSI
rxLSTF = rx(pktOffset+(ind.LSTF(1):ind.LSTF(2)),:)./(gain);
rssi_legancy = mean(abs(rxLSTF).^2);
rssi_legancy_dbm = 10*log10(rssi_legancy/1e-3);
rxHETF = rx(pktOffset+(ind.HESTF(1):ind.HELTF(2)),:)./(gain);
rssi = mean(abs(rxHETF).^2);
rssi_dbm = 10*log10(rssi/1e-3);
fprintf(' rssi_legancy: %f dBm\n rssi: %f dBm\n', rssi_legancy_dbm, rssi_dbm);
% SNR
LLTF = rx(ind.LLTF(1):ind.LLTF(2));
LLTF_length = length(LLTF);
LLTF1 = LLTF(1+LLTF_length/5:LLTF_length*3/5);
LLTF2 = LLTF(1+LLTF_length*3/5:end);
N = 64;
LLTF1_fft = ((abs(fftshift(fft(LLTF1)))).^2)/N;
LLTF2_fft = ((abs(fftshift(fft(LLTF2)))).^2)/N;
for i = 0:LLTF_length/160-1
power_signal = sum(LLTF1_fft(i*N+(7:32))) + sum(LLTF1_fft(i*N+(34:59))) + ...
sum(LLTF2_fft(i*N+(7:32))) + sum(LLTF2_fft(i*N+(34:59)));
power_noise = sum(LLTF1_fft(i*N+(1:6))) + sum(LLTF1_fft(i*N+(33))) + sum(LLTF1_fft(i*N+(end-4:end))) + ...
sum(LLTF2_fft(i*N+(1:6))) + sum(LLTF2_fft(i*N+(33))) + sum(LLTF2_fft(i*N+(end-4:end)));
end
SNR = 10*log10(power_signal/(power_noise*64/12));
fprintf(' SNR: %f dB\n', SNR);
rmpath(genpath('.\sounding'));
end