implemented task4 1-4, documentation needs to be written
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss]= simulateTransmission(accessAnalysisResults, cfgEHT, channel, maxChDelay, snr, maxNumErrors, simParameters)
|
||||
function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss]= simulateTransmission(accessAnalysisParameters, cfgEHT, channel, maxChDelay, snr, maxNumErrors, simParameters)
|
||||
numPacketErrors = 0;
|
||||
numPacketsSimulated = 0;
|
||||
cfrMagnitudes = [];
|
||||
rxPower = zeros(size(accessAnalysisResults.elevationAngles));
|
||||
pathLoss = zeros(size(accessAnalysisResults.elevationAngles));
|
||||
rxPower = zeros(size(accessAnalysisParameters.elevationAngles));
|
||||
pathLoss = zeros(size(accessAnalysisParameters.elevationAngles));
|
||||
|
||||
ofdmInfo = wlanEHTOFDMInfo('EHT-Data', cfgEHT);
|
||||
ind = wlanFieldIndices(cfgEHT);
|
||||
@@ -26,11 +26,11 @@ function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss
|
||||
lambda = physconst("lightspeed") / simParameters.CarrierFrequency;
|
||||
includePathLoss = isfield(simParameters, 'IncludeFreeSpacePathLoss') && simParameters.IncludeFreeSpacePathLoss;
|
||||
|
||||
while (powerOnlySimulation || numPacketErrors < maxNumErrors) && numPacketsSimulated < numel(accessAnalysisResults.elevationAngles)
|
||||
while (powerOnlySimulation || numPacketErrors < maxNumErrors) && numPacketsSimulated < numel(accessAnalysisParameters.elevationAngles)
|
||||
numPacketsSimulated = numPacketsSimulated + 1;
|
||||
|
||||
if includePathLoss
|
||||
packetDistance = accessAnalysisResults.distances(numPacketsSimulated);
|
||||
packetDistance = accessAnalysisParameters.distances(numPacketsSimulated);
|
||||
pathLoss(numPacketsSimulated) = 20 * log10(4 * pi * packetDistance / lambda);
|
||||
else
|
||||
pathLoss(numPacketsSimulated) = 0;
|
||||
@@ -45,15 +45,38 @@ function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss
|
||||
|
||||
tx = tx * sqrt(10^((txPower - 30) / 10)) / sqrt(stfPower);
|
||||
|
||||
packetElevationAngle = accessAnalysisParameters.elevationAngles(numPacketsSimulated);
|
||||
if isfield(accessAnalysisParameters, "dopplerShifts") && isfinite(accessAnalysisParameters.dopplerShifts(numPacketsSimulated))
|
||||
packetDopplerShift = accessAnalysisParameters.dopplerShifts(numPacketsSimulated);
|
||||
else
|
||||
packetDopplerShift = dopplerShiftCircularOrbit(packetElevationAngle, simParameters.SatelliteAltitude, simParameters.MobileAltitude, simParameters.CarrierFrequency);
|
||||
end
|
||||
|
||||
if ~isfinite(packetDopplerShift)
|
||||
packetDopplerShift = 0;
|
||||
end
|
||||
|
||||
channel.SatelliteDopplerShift = packetDopplerShift;
|
||||
|
||||
txPad = [tx; zeros(maxChDelay, cfgEHT.NumTransmitAntennas)];
|
||||
|
||||
if isfield(accessAnalysisParameters, "preCompensation")
|
||||
predictedDopplerShift = [];
|
||||
if isnumeric(accessAnalysisParameters.preCompensation)
|
||||
predictedDopplerShift = packetDopplerShift + accessAnalysisParameters.preCompensation;
|
||||
elseif string(accessAnalysisParameters.preCompensation) == "ideal"
|
||||
predictedDopplerShift = packetDopplerShift;
|
||||
end
|
||||
|
||||
if ~isempty(predictedDopplerShift) && isfinite(predictedDopplerShift)
|
||||
txPad = frequencyOffset(txPad, simParameters.SampleRate, -predictedDopplerShift);
|
||||
end
|
||||
end
|
||||
|
||||
if powerOnlySimulation
|
||||
continue;
|
||||
end
|
||||
|
||||
packetElevationAngle = accessAnalysisResults.elevationAngles(numPacketsSimulated);
|
||||
channel.SatelliteDopplerShift = dopplerShiftCircularOrbit(packetElevationAngle, simParameters.SatelliteAltitude, simParameters.MobileAltitude, simParameters.CarrierFrequency);
|
||||
|
||||
reset(channel);
|
||||
rx = awgn(channel(txPad) * db2mag(-pathLoss(numPacketsSimulated)), snrVal);
|
||||
|
||||
@@ -90,7 +113,9 @@ function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss
|
||||
rxData = rx(packetOffset + (ind.EHTData(1) : ind.EHTData(2)), :);
|
||||
demodSym = wlanEHTDemodulate(rxData, "EHT-Data", cfgEHT);
|
||||
|
||||
demodSym = wlanEHTTrackPilotError(demodSym, chanEstimate, cfgEHT, "EHT-Data");
|
||||
if ~isfield(accessAnalysisParameters, "enablePilotTracking") || accessAnalysisParameters.enablePilotTracking
|
||||
demodSym = wlanEHTTrackPilotError(demodSym, chanEstimate, cfgEHT, "EHT-Data");
|
||||
end
|
||||
|
||||
nVarEst = wlanEHTDataNoiseEstimate(demodSym(ofdmInfo.PilotIndices, :, :),pilotEstimate, cfgEHT);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user