61 lines
2.5 KiB
Matlab
61 lines
2.5 KiB
Matlab
|
||
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 |