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

61 lines
2.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 [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