lab5 task1 done, task2 nearly finished
This commit is contained in:
Executable
+1221
File diff suppressed because it is too large
Load Diff
Executable
+151
@@ -0,0 +1,151 @@
|
||||
classdef HelperNTNPositionEstimate
|
||||
%HelperNTNPositionEstimate Class defining the supporting functions used
|
||||
%in the receiver position estimation in NTN example
|
||||
%
|
||||
% Note: This is an undocumented class and its API and/or
|
||||
% functionality may change in subsequent releases.
|
||||
|
||||
% Copyright 2024-2025 The MathWorks, Inc.
|
||||
|
||||
methods (Static)
|
||||
function out = instantposition(s, v, r, rDot)
|
||||
% OUT = instantposition(S,V,R,RDOT) returns the possible
|
||||
% position OUT using satellite position S, satellite velocity
|
||||
% V, range R, and range-rate RDOT. S and V are in Earth
|
||||
% Centered Earth Fixed (ECEF) coordinate system. R is in m and
|
||||
% RDOT is in m/s. OUT is a 3-by-2 matrix with each column
|
||||
% corresponding to a possible position in LLA (Latitude,
|
||||
% Longitude, Altitude).
|
||||
|
||||
tolerance = 1e-4;
|
||||
max_iter_refine = 1000;
|
||||
% Earth Parameters
|
||||
r_E = 6378137; % Equatorial radius (meters)
|
||||
r_p = 6356752; % Polar radius (meters)
|
||||
|
||||
% Initialize two r_c values with random values
|
||||
r_c_1 = (r_E - r_p) * rand();
|
||||
r_c_2 = r_c_1; % Starting both from the same value (can be different if needed)
|
||||
|
||||
% Refinement loop for two solutions
|
||||
for iter = 1:max_iter_refine
|
||||
prev_r_c_1 = r_c_1;
|
||||
prev_r_c_2 = r_c_2;
|
||||
|
||||
% Compute geometric parameters
|
||||
r_s2 = dot(s,s); % Squared norm of position vector
|
||||
|
||||
% Linear system for refinement
|
||||
A = [s(1) s(2); v(1) v(2)];
|
||||
b_1 = 0.5*(r_s2 + r_c_1^2 - r^2);
|
||||
b_2 = 0.5*(r_s2 + r_c_2^2 - r^2);
|
||||
c = dot(s,v) - r*rDot;
|
||||
|
||||
% Solve the parameters for r_c_1 and r_c_2
|
||||
mat_1 = [b_1, s(3); c, v(3)];
|
||||
mat_2 = [b_2, s(3); c, v(3)];
|
||||
|
||||
params_1 = A \ mat_1;
|
||||
params_2 = A \ mat_2;
|
||||
|
||||
% Extract parameters for the first solution
|
||||
alpha_1 = params_1(1);
|
||||
beta_1 = params_1(3);
|
||||
gamma_1 = params_1(2);
|
||||
delta_1 = params_1(4);
|
||||
|
||||
% Extract parameters for the second solution
|
||||
alpha_2 = params_2(1);
|
||||
beta_2 = params_2(3);
|
||||
gamma_2 = params_2(2);
|
||||
delta_2 = params_2(4);
|
||||
|
||||
% Calculate discriminant for both solutions
|
||||
numerator_1 = alpha_1 * beta_1 + gamma_1 * delta_1;
|
||||
discriminant_1 = numerator_1^2 - (1 + delta_1^2 + beta_1^2) * (alpha_1^2 + gamma_1^2 - r_c_1^2);
|
||||
|
||||
numerator_2 = alpha_2 * beta_2 + gamma_2 * delta_2;
|
||||
discriminant_2 = numerator_2^2 - (1 + delta_2^2 + beta_2^2) * (alpha_2^2 + gamma_2^2 - r_c_2^2);
|
||||
|
||||
% Handle negative discriminant by regenerating r_c
|
||||
if discriminant_1 < 0
|
||||
r_c_1 = r_p + (r_E - r_p) * rand();
|
||||
continue;
|
||||
end
|
||||
if discriminant_2 < 0
|
||||
r_c_2 = r_p + (r_E - r_p) * rand();
|
||||
continue;
|
||||
end
|
||||
|
||||
% Compute z-coordinates for both solutions
|
||||
z_hat_1 = (numerator_1 + sqrt(discriminant_1)) / (1 + delta_1^2 + beta_1^2);
|
||||
z_hat_2 = (numerator_2 - sqrt(discriminant_2)) / (1 + delta_2^2 + beta_2^2);
|
||||
|
||||
% Compute x and y coordinates for both solutions
|
||||
x_hat_1 = alpha_1 - beta_1 * z_hat_1;
|
||||
y_hat_1 = gamma_1 - delta_1 * z_hat_1;
|
||||
|
||||
x_hat_2 = alpha_2 - beta_2 * z_hat_2;
|
||||
y_hat_2 = gamma_2 - delta_2 * z_hat_2;
|
||||
|
||||
% Convert to LLA
|
||||
lla_1 = ecef2llaLocal([x_hat_1; y_hat_1; z_hat_1]);
|
||||
lla_2 = ecef2llaLocal([x_hat_2; y_hat_2; z_hat_2]);
|
||||
|
||||
% Recalculate r_c for refined solutions
|
||||
dr_1 = sind(lla_1(1))^2 + cosd(lla_1(1))^2 * (r_p / r_E)^2;
|
||||
r_c_1 = sqrt(r_p^2 / dr_1);
|
||||
|
||||
dr_2 = sind(lla_2(1))^2 + cosd(lla_2(1))^2 * (r_p / r_E)^2;
|
||||
r_c_2 = sqrt(r_p^2 / dr_2);
|
||||
|
||||
% Check convergence for both solutions
|
||||
if abs(r_c_1 - prev_r_c_1) < tolerance && abs(r_c_2 - prev_r_c_2) < tolerance
|
||||
break;
|
||||
end
|
||||
end
|
||||
out = [];
|
||||
if discriminant_1 > 0
|
||||
out = lla_1(:);
|
||||
end
|
||||
if discriminant_2 > 0
|
||||
out = [out(:) lla_2(:)];
|
||||
end
|
||||
end
|
||||
|
||||
function error = positionerror(originalPos,estimatedPos)
|
||||
% ERR = positionerror(ORIGINALPOS,ESTIMATEDPOS) computes the
|
||||
% position errors ERR for given original position ORIGINALPOS
|
||||
% and estimated positions ESTIMATEDPOS. Original position and
|
||||
% estimated positions are in LLA. ESTIMATEDPOS is 3-by-N matrix
|
||||
% with N being the number of positions.
|
||||
|
||||
% Convert the positions to ECEF
|
||||
posECEF = lla2ecefLocal([originalPos estimatedPos]);
|
||||
error = vecnorm(posECEF(:,1)-posECEF(:,2:end));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function lla = ecef2llaLocal(ecef)
|
||||
% Output Latitude (degrees), Longitude (degrees), and Altitude (meters)
|
||||
|
||||
tmp = matlabshared.orbit.internal.Transforms.itrf2geographic(ecef);
|
||||
% Convert to degrees and get the LLA coordinates
|
||||
lla = [rad2deg(tmp(1,1:end)); ...
|
||||
rad2deg(tmp(2,1:end)); ...
|
||||
tmp(3,1:end)];
|
||||
|
||||
end
|
||||
|
||||
function ecef = lla2ecefLocal(lla)
|
||||
% Output ECEF: X (meters), Y (meters), and Z (meters)
|
||||
|
||||
% Convert to radians
|
||||
lla = [deg2rad(lla(1,1:end)); ...
|
||||
deg2rad(lla(2,1:end)); ...
|
||||
lla(3,1:end)];
|
||||
% Get ECEF coordinates
|
||||
ecef = matlabshared.orbit.internal.Transforms.geographic2itrf(lla);
|
||||
|
||||
end
|
||||
@@ -0,0 +1,73 @@
|
||||
function [cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = create_baseline_configuration(profile, ...
|
||||
bandwidth_mhz, ...
|
||||
include_free_space_pathloss, ...
|
||||
delay_model, ...
|
||||
carrier_frequency, ...
|
||||
mobile_speed, ...
|
||||
mobile_altitude, ...
|
||||
satellite_altitude, ...
|
||||
random_stream, ...
|
||||
seed, ...
|
||||
tx_antenna_count, ...
|
||||
rx_antenna_count, ...
|
||||
apep)
|
||||
|
||||
switch bandwidth_mhz
|
||||
case 20
|
||||
chanBW = 'CBW20';
|
||||
case 40
|
||||
chanBW = 'CBW40';
|
||||
case 80
|
||||
chanBW = 'CBW80';
|
||||
case 160
|
||||
chanBW = 'CBW160';
|
||||
case 320
|
||||
chanBW = 'CBW320';
|
||||
otherwise
|
||||
error("Not supported bandwidth!");
|
||||
end
|
||||
|
||||
cfgEHT = wlanEHTMUConfig(chanBW);
|
||||
cfgEHT.User{1}.APEPLength = apep;
|
||||
cfgEHT.NumTransmitAntennas = tx_antenna_count;
|
||||
cfgEHT.User{1}.NumSpaceTimeStreams = 1;
|
||||
cfgEHT.User{1}.MCS = 0; % default to sweep later
|
||||
fs = wlanSampleRate(chanBW);
|
||||
|
||||
simParameters.IncludeFreeSpacePathLoss = include_free_space_pathloss;
|
||||
simParameters.DelayModel = delay_model;
|
||||
simParameters.CarrierFrequency = carrier_frequency;
|
||||
simParameters.ElevationAngle = 0; % default to sweep later
|
||||
simParameters.MobileSpeed = mobile_speed;
|
||||
simParameters.MobileAltitude = mobile_altitude;
|
||||
simParameters.SatelliteAltitude = satellite_altitude;
|
||||
simParameters.SampleRate = fs;
|
||||
simParameters.RandomStream = random_stream;
|
||||
simParameters.Seed = seed;
|
||||
simParameters.NumTransmitAntennas = tx_antenna_count;
|
||||
simParameters.NumReceiveAntennas = rx_antenna_count;
|
||||
|
||||
simParameters.NTNChannelType = "TDL";
|
||||
simParameters.DelayProfile = "NTN-TDL-" + profile;
|
||||
simParameters.DelaySpread = 30e-9;
|
||||
|
||||
c = physconst("lightspeed");
|
||||
satelliteDopplerShift = dopplerShiftCircularOrbit( ...
|
||||
simParameters.ElevationAngle,simParameters.SatelliteAltitude, ...
|
||||
simParameters.MobileAltitude,simParameters.CarrierFrequency);
|
||||
|
||||
channel = nrTDLChannel;
|
||||
channel.DelayProfile = simParameters.DelayProfile;
|
||||
channel.DelaySpread = simParameters.DelaySpread;
|
||||
channel.SatelliteDopplerShift = satelliteDopplerShift;
|
||||
channel.MaximumDopplerShift = simParameters.MobileSpeed*simParameters.CarrierFrequency/c;
|
||||
channel.NumTransmitAntennas = simParameters.NumTransmitAntennas;
|
||||
channel.NumReceiveAntennas = simParameters.NumReceiveAntennas;
|
||||
|
||||
channel.SampleRate = simParameters.SampleRate;
|
||||
channel.RandomStream = simParameters.RandomStream;
|
||||
channel.Seed = simParameters.Seed;
|
||||
|
||||
chInfo = info(channel);
|
||||
maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate)) + chInfo.ChannelFilterDelay;
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
function satSim = create_satellite_sim(satConfig, stationConfig)
|
||||
satSim.sc = satelliteScenario;
|
||||
satSim.sc.StartTime = satConfig.startTime;
|
||||
satSim.sc.StopTime = satConfig.stopTime;
|
||||
satSim.sc.SampleTime = satConfig.sampleTime;
|
||||
|
||||
earthRadius = physconst("EarthRadius");
|
||||
semiMajorAxis = earthRadius + satConfig.satAltitude;
|
||||
|
||||
satSim.sat = satellite(satSim.sc, semiMajorAxis, satConfig.eccentricity, satConfig.inclination, satConfig.raan, satConfig.argOfPeriapsis, satConfig.trueAnomaly, Name=satConfig.name, OrbitPropagator=satConfig.orbitPropagator);
|
||||
satSim.ue = groundStation(satSim.sc, stationConfig.Lat, stationConfig.Lon, Altitude=stationConfig.Altitude, Name=stationConfig.Name);
|
||||
end
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 100 KiB |
@@ -0,0 +1,226 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="456.494mm" height="294.569mm"
|
||||
viewBox="0 0 1294 835"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<title>Qt SVG Document</title>
|
||||
<desc>MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2</desc>
|
||||
<defs>
|
||||
</defs>
|
||||
<g fill="none" stroke="black" stroke-width="1" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="bevel" >
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(0.509775,0,0,0.51224,-167.745,-59.0724)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M328,115 L2866,115 L2866,1745 L328,1745 L328,115"/>
|
||||
</g>
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(5.09775e-05,0,0,5.1224e-05,-167.745,-59.0724)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M4.08e+06,1.42e+06 L4.08e+06,1.688e+07 L2.84e+07,1.688e+07 L2.84e+07,1.42e+06 L4.08e+06,1.42e+06"/>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="0.14902" stroke="#212121" stroke-opacity="0.14902" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.51224,-167.745,-59.0724)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1516.22 2840,1516.22 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1344.44 2840,1344.44 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1172.67 2840,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1000.89 2840,1000.89 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,829.111 2840,829.111 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,657.333 2840,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,485.556 2840,485.556 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,313.778 2840,313.778 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.51224,-167.745,-59.0724)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,1688 1016,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,1688 1624,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,1688 2232,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,166.32 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,27.4988,817.371)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,337.442,817.371)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,647.385,817.371)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,957.328,817.371)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,1267.27,817.371)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>10:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,640.503,831.201)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Time [s]</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,1212.73,830.177)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>Jun 17, 2026 </text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0,-0.51224,0.509775,0,9.65641,497.22)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Elevation angle to satellite [degree]</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.51224,-167.745,-59.0724)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 432.32,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1516.22 432.32,1516.22 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1516.22 2840,1516.22 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1344.44 432.32,1344.44 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1344.44 2840,1344.44 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1172.67 432.32,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1172.67 2840,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1000.89 432.32,1000.89 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1000.89 2840,1000.89 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,829.111 432.32,829.111 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,829.111 2840,829.111 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,657.333 432.32,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,657.333 2840,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,485.556 432.32,485.556 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,485.556 2840,485.556 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,313.778 432.32,313.778 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,313.778 2840,313.778 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 432.32,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,15.774,808.15)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-100</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,21.3815,720.159)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-80</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,21.3815,632.167)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-60</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,21.3815,544.176)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-40</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,21.3815,456.184)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-20</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,30.5574,368.193)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>0</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,24.9499,280.201)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>20</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,24.9499,192.21)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>40</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,24.9499,104.218)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>60</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,24.9499,16.2269)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>80</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.51224,537.019,9.69584)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>Elevation angle over time plot of satellite pass</text>
|
||||
</g>
|
||||
|
||||
<g fill="none" stroke="#1171be" stroke-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.51224,-167.745,-59.0724)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,796.272 418.134,776.317 428.266,753.943 438.4,728.357 448.533,698.405 458.667,662.359 468.8,617.576 478.934,559.984 489.066,483.588 499.2,381.503 509.333,256.663 519.467,186.653 529.6,283.949 539.734,405.116 549.866,500.559 560,571.83 570.133,625.907 580.267,668.305 590.4,702.701 600.534,731.48 610.667,756.209 620.8,777.941 630.933,797.402 641.067,815.107 651.2,831.428 661.333,846.641 671.467,860.954 681.6,874.526 691.733,887.482 701.867,899.92 712,911.918 722.133,923.541 732.267,934.839 742.4,945.856 752.533,956.627 762.667,967.182 772.8,977.547 782.933,987.742 793.067,997.787 803.2,1007.7 813.333,1017.49 823.466,1027.16 833.6,1036.74 843.733,1046.23 853.867,1055.64 864,1064.97 874.134,1074.24 884.266,1083.44 894.4,1092.58 904.533,1101.67 914.667,1110.71 924.8,1119.71 934.934,1128.66 945.066,1137.57 955.2,1146.45 965.333,1155.29 975.467,1164.1 985.6,1172.88 995.734,1181.63 1005.87,1190.35 1016,1199.05 1026.13,1207.72 1036.27,1216.37 1046.4,1225 1056.53,1233.61 1066.67,1242.2 1076.8,1250.78 1086.93,1259.33 1097.07,1267.87 1107.2,1276.39 1117.33,1284.9 1127.47,1293.39 1137.6,1301.87 1147.73,1310.34 1157.87,1318.79 1168,1327.23 1178.13,1335.66 1188.27,1344.07 1198.4,1352.47 1208.53,1360.86 1218.67,1369.24 1228.8,1377.61 1238.93,1385.96 1249.07,1394.3 1259.2,1402.63 1269.33,1410.95 1279.47,1419.25 1289.6,1427.54 1299.73,1435.82 1309.87,1444.07 1320,1452.31 1330.13,1460.53 1340.27,1468.73 1350.4,1476.9 1360.53,1485.04 1370.67,1493.15 1380.8,1501.21 1390.93,1509.22 1401.07,1517.17 1411.2,1525.02 1421.33,1532.76 1431.47,1540.35 1441.6,1547.72 1451.73,1554.76 1461.87,1561.32 1472,1567.12 1482.13,1571.72 1492.27,1574.53 1502.4,1574.97 1512.53,1572.95 1522.67,1568.9 1532.8,1563.47 1542.93,1557.15 1553.07,1550.26 1563.2,1543.01 1573.33,1535.51 1583.47,1527.84 1593.6,1520.04 1603.73,1512.15 1613.87,1504.19 1624,1496.18 1634.13,1488.12 1644.27,1480.03 1654.4,1471.91 1664.53,1463.76 1674.67,1455.6 1684.8,1447.41 1694.93,1439.21 1705.07,1431 1715.2,1422.77 1725.33,1414.54 1735.47,1406.29 1745.6,1398.03 1755.73,1389.76 1765.87,1381.49 1776,1373.2 1786.13,1364.91 1796.27,1356.61 1806.4,1348.3 1816.53,1339.98 1826.67,1331.65 1836.8,1323.31 1846.93,1314.97 1857.07,1306.61 1867.2,1298.25 1877.33,1289.87 1887.47,1281.49 1897.6,1273.1 1907.73,1264.69 1917.87,1256.27 1928,1247.84 1938.13,1239.4 1948.27,1230.95 1958.4,1222.48 1968.53,1213.99 1978.67,1205.49 1988.8,1196.98 1998.93,1188.44 2009.07,1179.89 2019.2,1171.31 2029.33,1162.72 2039.47,1154.1 2049.6,1145.46 2059.73,1136.79 2069.87,1128.09 2080,1119.36 2090.13,1110.6 2100.27,1101.81 2110.4,1092.98 2120.53,1084.1 2130.67,1075.19 2140.8,1066.22 2150.93,1057.21 2161.07,1048.14 2171.2,1039.01 2181.33,1029.81 2191.47,1020.54 2201.6,1011.19 2211.73,1001.76 2221.87,992.23 2232,982.597 2242.13,972.848 2252.27,962.973 2262.4,952.957 2272.53,942.786 2282.67,932.441 2292.8,921.904 2302.93,911.152 2313.07,900.162 2323.2,888.908 2333.33,877.359 2343.47,865.485 2353.6,853.255 2363.73,840.64 2373.87,827.616 2384,814.172 2394.13,800.323 2404.27,786.125 2414.4,771.7 2424.53,757.279 2434.67,743.234 2444.8,730.126 2454.93,718.705 2465.07,709.853 2475.2,704.428 2485.33,703.036 2495.47,705.831 2505.6,712.456 2515.73,722.178 2525.87,734.11 2536,747.414 2546.13,761.422 2556.27,775.654 2566.4,789.801 2576.53,803.68 2586.67,817.196 2596.8,830.311 2606.93,843.02 2617.07,855.336 2627.2,867.286 2637.33,878.897 2647.47,890.199 2657.6,901.222 2667.73,911.991 2677.87,922.532 2688,932.868 2698.13,943.018 2708.27,953 2718.4,962.83 2728.53,972.522 2738.67,982.089 2748.8,991.542 2758.93,1000.89 2769.07,1010.15 2779.2,1019.31 2789.33,1028.4 2799.47,1037.41 2809.6,1046.35 2819.73,1055.23 2829.87,1064.05 2840,1072.81 " />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,31 @@
|
||||
satConfig.startTime = datetime(2026,6,17,08,00,00);
|
||||
satConfig.stopTime = satConfig.startTime + hours(2);
|
||||
satConfig.sampleTime = 30;
|
||||
satConfig.satAltitude = 600e3;
|
||||
satConfig.eccentricity = 0;
|
||||
satConfig.inclination = 90;
|
||||
satConfig.raan = 42;
|
||||
satConfig.argOfPeriapsis = 32;
|
||||
satConfig.trueAnomaly = 0;
|
||||
satConfig.name = "Timos Surveillance LEO Satellite";
|
||||
satConfig.orbitPropagator = "two-body-keplerian";
|
||||
|
||||
groundStation.Lat = 52.515744683039436;
|
||||
groundStation.Lon = 13.325825073341306;
|
||||
groundStation.Name = "HFT building at Einsteinufer 25";
|
||||
% https://www.randymajors.org/elevation-on-google-maps?x=13.3258251&y=52.5157447&cx=13.3258251&cy=52.5157447&zoom=15&labels=show
|
||||
groundStation.Altitude = 37;
|
||||
|
||||
calc_task1 = true;
|
||||
calc_task2 = true;
|
||||
|
||||
if calc_task1
|
||||
task1;
|
||||
end
|
||||
|
||||
if calc_task2
|
||||
if ~calc_task1
|
||||
task1;
|
||||
end
|
||||
task2;
|
||||
end
|
||||
@@ -0,0 +1,29 @@
|
||||
<h2 style="text-align: center;">
|
||||
Lab 5 - Wireless Networking Technologies
|
||||
</h2>
|
||||
<h4 style="text-align: center; margin-top: -10pt">
|
||||
Analyzing a LEO Satellite Pass
|
||||
</h4>
|
||||
<p style="text-align: center; margin-top: -15pt;">
|
||||
by Timo Niemann
|
||||
</p>
|
||||
|
||||
### Task1
|
||||
|
||||
#### 1.1
|
||||
|
||||
See code `lab_5.m` and `create_satellite_sim.m`, where the first file defines all parameters for the simulation and the create_satellite_sim function creates and returns the satellite and ground station.
|
||||
|
||||
#### 1.2
|
||||
|
||||
To calculate the distance to the satellite, the MATLAB access analysis example was used as a basis and modified. The distance is calculated with the `aer` function, which returns azimuth, elevation, and slant range between the ground station and the satellite. To avoid invalid channel simulations, the signal-based estimation step is skipped when the Doppler shift `fshift` is non-finite.
|
||||
|
||||

|
||||
|
||||
The first satellite flyby occurs at around 08:05:30. During the pass, the distance first decreases as the satellite approaches the ground station and then increases again after the closest approach. Around 08:53:30 to 08:54:00, the distance reaches a maximum because the satellite is on the far side of its orbit relative to the ground station. The second pass occurs at around 09:42. Its minimum distance is larger than during the first pass because Earth's rotation changes the relative position of the ground station below the satellite orbit.
|
||||
|
||||
#### 1.3
|
||||
|
||||

|
||||
|
||||
As in the distance plot, the elevation angle reaches its highest value during the first pass. The second pass has a lower maximum elevation because Earth's rotation shifts the ground station relative to the satellite ground track.
|
||||
@@ -0,0 +1,29 @@
|
||||
function parfor_waitbar(f, totalJobs, detail, reset)
|
||||
persistent done
|
||||
|
||||
if reset
|
||||
done = 0;
|
||||
if ishandle(f)
|
||||
if isempty(detail)
|
||||
waitbar(0, f, "Starting");
|
||||
else
|
||||
waitbar(0, f, detail);
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if isempty(done)
|
||||
done = 0;
|
||||
end
|
||||
|
||||
done = done + 1;
|
||||
|
||||
if ishandle(f)
|
||||
progressText = sprintf("Done %d/%d", done, totalJobs);
|
||||
if ~isempty(detail)
|
||||
progressText = sprintf("%s | %s", progressText, char(detail));
|
||||
end
|
||||
waitbar(min(done / totalJobs, 1), f, progressText);
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,75 @@
|
||||
function res = perform_access_analysis(satSim, queryTime)
|
||||
sat = satSim.sat;
|
||||
ue = satSim.ue;
|
||||
|
||||
ac = access(sat,ue);
|
||||
[status,timeout] = accessStatus(ac);
|
||||
statusIdx = find(status,1);
|
||||
if isempty(statusIdx)
|
||||
disp("Position estimation cannot be performed " + ...
|
||||
"as there is no access between satellite and UE.")
|
||||
return
|
||||
end
|
||||
delete(ac)
|
||||
|
||||
[~,el,r] = aer(ue,sat,queryTime);
|
||||
|
||||
res.distanceToSatellite = r;
|
||||
res.elevationAngleToSatellite = el;
|
||||
|
||||
carrierFrequency = 2e9;
|
||||
[fshift,~,dopplerInfo] = dopplershift( ...
|
||||
sat,ue,queryTime,Frequency=carrierFrequency);
|
||||
res.rangeRate = -1*dopplerInfo.RelativeVelocity;
|
||||
|
||||
[satPos,satVel] = states(sat,queryTime,CoordinateFrame="ecef");
|
||||
|
||||
res.satPos = satPos;
|
||||
res.satVel = satVel;
|
||||
|
||||
if ~isfinite(fshift)
|
||||
return;
|
||||
end
|
||||
|
||||
rng(0)
|
||||
lightspeed = physconst("lightspeed");
|
||||
|
||||
frameDurInSeconds = 10e-3;
|
||||
delayInSeconds = r/lightspeed;
|
||||
nFrames = ceil(delayInSeconds/frameDurInSeconds) + 1;
|
||||
carrier = nrCarrierConfig;
|
||||
pdsch = nrPDSCHConfig;
|
||||
pdsch.DMRS.DMRSAdditionalPosition = 2;
|
||||
[txWaveform,waveformInfo] = ...
|
||||
HelperNRNTNThroughput.generatePDSCHWaveform( ...
|
||||
carrier,pdsch,struct,eye(pdsch.NumLayers),"double",carrier.SlotsPerFrame*nFrames);
|
||||
refGridAllSlots = waveformInfo.ResourceGrid;
|
||||
|
||||
delayInSamples = delayInSeconds.*waveformInfo.SampleRate;
|
||||
integDelaySamples = floor(delayInSamples);
|
||||
fracDelaySamples = (delayInSamples - integDelaySamples);
|
||||
staticDelay = dsp.Delay(Length=integDelaySamples);
|
||||
variableFractionalDelay = dsp.VariableFractionalDelay( ...
|
||||
InterpolationMethod="Farrow", ...
|
||||
FarrowSmallDelayAction="Use off-centered kernel", ...
|
||||
MaximumDelay=1);
|
||||
|
||||
delayedTx = staticDelay(txWaveform);
|
||||
delayedTx = variableFractionalDelay(delayedTx,fracDelaySamples);
|
||||
|
||||
channel = p681LMSChannel;
|
||||
channel.SampleRate = waveformInfo.SampleRate;
|
||||
channel.CarrierFrequency = carrierFrequency;
|
||||
channel.SatelliteDopplerShift = fshift;
|
||||
channel.MobileSpeed = 0;
|
||||
channel.ElevationAngle = el;
|
||||
channel.RandomStream = "mt19937ar with seed";
|
||||
rxWaveform = channel(delayedTx);
|
||||
|
||||
freqSearch = 0.999*fshift:sign(fshift):1.001*fshift;
|
||||
[delayEstSamples,fshiftEst] = HelperNRNTNThroughput.jointTimeFreq( ...
|
||||
carrier,rxWaveform,refGridAllSlots,freqSearch);
|
||||
|
||||
res.rangeEst = delayEstSamples*lightspeed/waveformInfo.SampleRate;
|
||||
res.rangeRateEst = -1*fshiftEst*lightspeed/carrierFrequency;
|
||||
end
|
||||
@@ -0,0 +1,262 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="456.494mm" height="293.864mm"
|
||||
viewBox="0 0 1294 833"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<title>Qt SVG Document</title>
|
||||
<desc>MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2</desc>
|
||||
<defs>
|
||||
</defs>
|
||||
<g fill="none" stroke="black" stroke-width="1" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="bevel" >
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M328,115 L2866,115 L2866,1742 L328,1742 L328,115"/>
|
||||
</g>
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(5.09775e-05,0,0,5.118e-05,-167.745,-59.0204)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M4.08e+06,1.42e+06 L4.08e+06,1.688e+07 L2.84e+07,1.688e+07 L2.84e+07,1.42e+06 L4.08e+06,1.42e+06"/>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="0.14902" stroke="#212121" stroke-opacity="0.14902" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1533.4 2840,1533.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1378.8 2840,1378.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1224.2 2840,1224.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1069.6 2840,1069.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,915 2840,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,760.4 2840,760.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,605.8 2840,605.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,451.2 2840,451.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,296.6 2840,296.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,1688 1016,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,1688 1624,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,1688 2232,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,166.32 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,27.4988,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,337.442,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,647.385,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,957.328,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,1267.27,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>10:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,647.895,830.488)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Time</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,1212.73,829.465)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>Jun 17, 2026 </text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0,-0.5118,0.509775,0,9.6564,441.52)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Power [dBm]</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 432.32,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1533.4 432.32,1533.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1533.4 2840,1533.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1378.8 432.32,1378.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1378.8 2840,1378.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1224.2 432.32,1224.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1224.2 2840,1224.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1069.6 432.32,1069.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1069.6 2840,1069.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,915 432.32,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,915 2840,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,760.4 432.32,760.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,760.4 2840,760.4 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,605.8 432.32,605.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,605.8 2840,605.8 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,451.2 432.32,451.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,451.2 2840,451.2 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,296.6 432.32,296.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,296.6 2840,296.6 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 432.32,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,807.457)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-170</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,728.333)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-160</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,649.209)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-150</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,570.084)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-140</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,490.96)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-130</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,411.836)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-120</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,16.2837,332.711)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-110</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,15.7739,253.587)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-100</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,21.3815,174.463)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-90</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,21.3815,95.3386)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-80</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,21.3815,16.2143)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>-70</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,539.058,9.6888)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>Receive power over time plot of satellite pass</text>
|
||||
</g>
|
||||
|
||||
<g fill="none" stroke="#1171be" stroke-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1344.41 418.134,1332.51 428.266,1319.53 438.4,1305.29 448.533,1289.58 458.667,1272.17 468.8,1252.83 478.934,1231.49 489.066,1208.59 499.2,1185.91 509.333,1168.07 519.467,1162.18 529.6,1171.48 539.734,1191.05 549.866,1214.06 560,1236.68 570.133,1257.55 580.267,1276.41 590.4,1293.4 600.534,1308.73 610.667,1322.65 620.8,1335.35 630.933,1347.01 641.067,1357.76 651.2,1367.72 661.333,1377 671.467,1385.66 681.6,1393.79 691.733,1401.43 701.867,1408.64 712,1415.46 722.133,1421.92 732.267,1428.06 742.4,1433.9 752.533,1439.47 762.667,1444.78 772.8,1449.86 782.933,1454.73 793.067,1459.39 803.2,1463.86 813.333,1468.16 823.466,1472.29 833.6,1476.26 843.733,1480.09 853.867,1483.77 864,1487.32 874.134,1490.75 884.266,1494.06 894.4,1497.25 904.533,1500.34 914.667,1503.32 924.8,1506.2 934.934,1508.99 945.066,1511.69 955.2,1514.3 965.333,1516.82 975.467,1519.26 985.6,1521.63 995.734,1523.92 1005.87,1526.13 1016,1528.28 1026.13,1530.35 1036.27,1532.36 1046.4,1534.31 1056.53,1536.19 1066.67,1538.01 1076.8,1539.77 1086.93,1541.48 1097.07,1543.12 1107.2,1544.72 1117.33,1546.26 1127.47,1547.74 1137.6,1549.18 1147.73,1550.56 1157.87,1551.9 1168,1553.19 1178.13,1554.43 1188.27,1555.62 1198.4,1556.77 1208.53,1557.87 1218.67,1558.93 1228.8,1559.95 1238.93,1560.92 1249.07,1561.85 1259.2,1562.74 1269.33,1563.59 1279.47,1564.4 1289.6,1565.16 1299.73,1565.89 1309.87,1566.58 1320,1567.23 1330.13,1567.84 1340.27,1568.42 1350.4,1568.96 1360.53,1569.46 1370.67,1569.92 1380.8,1570.35 1390.93,1570.74 1401.07,1571.09 1411.2,1571.41 1421.33,1571.69 1431.47,1571.93 1441.6,1572.15 1451.73,1572.32 1461.87,1572.46 1472,1572.56 1482.13,1572.63 1492.27,1572.67 1502.4,1572.67 1512.53,1572.63 1522.67,1572.56 1532.8,1572.46 1542.93,1572.32 1553.07,1572.14 1563.2,1571.93 1573.33,1571.68 1583.47,1571.4 1593.6,1571.08 1603.73,1570.73 1613.87,1570.34 1624,1569.92 1634.13,1569.45 1644.27,1568.96 1654.4,1568.42 1664.53,1567.85 1674.67,1567.24 1684.8,1566.6 1694.93,1565.91 1705.07,1565.19 1715.2,1564.43 1725.33,1563.63 1735.47,1562.79 1745.6,1561.91 1755.73,1560.99 1765.87,1560.03 1776,1559.03 1786.13,1557.98 1796.27,1556.9 1806.4,1555.77 1816.53,1554.59 1826.67,1553.37 1836.8,1552.11 1846.93,1550.8 1857.07,1549.44 1867.2,1548.03 1877.33,1546.58 1887.47,1545.07 1897.6,1543.51 1907.73,1541.9 1917.87,1540.24 1928,1538.53 1938.13,1536.75 1948.27,1534.92 1958.4,1533.03 1968.53,1531.08 1978.67,1529.07 1988.8,1527 1998.93,1524.85 2009.07,1522.65 2019.2,1520.37 2029.33,1518.02 2039.47,1515.59 2049.6,1513.09 2059.73,1510.51 2069.87,1507.85 2080,1505.1 2090.13,1502.26 2100.27,1499.34 2110.4,1496.31 2120.53,1493.19 2130.67,1489.96 2140.8,1486.63 2150.93,1483.18 2161.07,1479.61 2171.2,1475.93 2181.33,1472.11 2191.47,1468.15 2201.6,1464.06 2211.73,1459.81 2221.87,1455.41 2232,1450.84 2242.13,1446.09 2252.27,1441.16 2262.4,1436.04 2272.53,1430.71 2282.67,1425.17 2292.8,1419.39 2302.93,1413.38 2313.07,1407.11 2323.2,1400.58 2333.33,1393.78 2343.47,1386.69 2353.6,1379.33 2363.73,1371.67 2373.87,1363.75 2384,1355.59 2394.13,1347.23 2404.27,1338.75 2414.4,1330.27 2424.53,1321.97 2434.67,1314.08 2444.8,1306.92 2454.93,1300.86 2465.07,1296.3 2475.2,1293.6 2485.33,1292.99 2495.47,1294.54 2505.6,1298.1 2515.73,1303.36 2525.87,1309.94 2536,1317.44 2546.13,1325.52 2556.27,1333.89 2566.4,1342.35 2576.53,1350.74 2586.67,1358.99 2596.8,1367.01 2606.93,1374.77 2617.07,1382.26 2627.2,1389.46 2637.33,1396.38 2647.47,1403.02 2657.6,1409.39 2667.73,1415.5 2677.87,1421.37 2688,1427 2698.13,1432.41 2708.27,1437.61 2718.4,1442.61 2728.53,1447.41 2738.67,1452.04 2748.8,1456.5 2758.93,1460.8 2769.07,1464.94 2779.2,1468.94 2789.33,1472.79 2799.47,1476.52 2809.6,1480.12 2819.73,1483.6 2829.87,1486.96 2840,1490.21 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="0.701961" stroke="#212121" stroke-opacity="0.701961" stroke-dasharray="10,6" stroke-dashoffset="0" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,373.9 2840,373.9 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,1156.14,128.503)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>receive sensitivity -85 dBm</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="0.701961" stroke="#212121" stroke-opacity="0.701961" stroke-dasharray="10,6" stroke-dashoffset="0" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509775,0,0,0.5118,-167.745,-59.0204)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,219.3 2840,219.3 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509775,0,0,0.5118,1158.69,49.3789)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>reliable reception -75 dBm</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="454.731mm" height="293.864mm"
|
||||
viewBox="0 0 1289 833"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<title>Qt SVG Document</title>
|
||||
<desc>MATLAB, The MathWorks, Inc. Version 26.1.0.3251617 R2026a Update 2</desc>
|
||||
<defs>
|
||||
</defs>
|
||||
<g fill="none" stroke="black" stroke-width="1" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="bevel" >
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(0.509109,0,0,0.5118,-171.088,-59.0205)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M335,115 L2867,115 L2867,1742 L335,1742 L335,115"/>
|
||||
</g>
|
||||
|
||||
<g fill="#ffffff" fill-opacity="1" stroke="none" transform="matrix(5.09109e-05,0,0,5.118e-05,-171.088,-59.0205)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<path vector-effect="none" fill-rule="evenodd" d="M4.08e+06,1.42e+06 L4.08e+06,1.688e+07 L2.84e+07,1.688e+07 L2.84e+07,1.42e+06 L4.08e+06,1.42e+06"/>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="0.14902" stroke="#212121" stroke-opacity="0.14902" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509109,0,0,0.5118,-171.088,-59.0205)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1430.33 2840,1430.33 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1172.67 2840,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,915 2840,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,657.333 2840,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,399.667 2840,399.667 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509109,0,0,0.5118,-171.088,-59.0205)"
|
||||
font-family=".AppleSystemUIFont" font-size="13" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,1688 1016,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,1688 1624,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,1688 2232,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,1663.68 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 408,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1016,142 1016,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="1624,142 1624,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2232,142 2232,166.32 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,142 2840,166.32 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,23.9011,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,333.439,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>08:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,642.977,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,952.516,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>09:30</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,1262.05,816.67)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>10:00</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,643.487,830.488)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Time</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,1207.58,829.465)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>Jun 17, 2026 </text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0,-0.5118,0.509109,0,9.64574,441.52)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>Power [dBm]</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" transform="matrix(0.509109,0,0,0.5118,-171.088,-59.0205)"
|
||||
font-family="Helvetica" font-size="22" font-weight="400" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 408,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2840,1688 2840,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1688 432.32,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1688 2840,1688 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1430.33 432.32,1430.33 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1430.33 2840,1430.33 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,1172.67 432.32,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,1172.67 2840,1172.67 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,915 432.32,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,915 2840,915 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,657.333 432.32,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,657.333 2840,657.333 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,399.667 432.32,399.667 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,399.667 2840,399.667 " />
|
||||
<polyline fill="none" vector-effect="none" points="408,142 432.32,142 " />
|
||||
<polyline fill="none" vector-effect="none" points="2815.68,142 2840,142 " />
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,21.3556,807.457)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>80</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,21.3556,675.583)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>85</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,21.3556,543.709)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>90</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,21.3556,411.836)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>95</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,15.7554,279.962)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>100</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,15.7554,148.088)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>105</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,16.2645,16.2142)"
|
||||
font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="0.390625" font-family="Helvetica" font-size="20" font-weight="400" font-style="normal"
|
||||
>110</text>
|
||||
</g>
|
||||
|
||||
<g fill="#212121" fill-opacity="1" stroke="#212121" stroke-opacity="1" stroke-width="1" stroke-linecap="square" stroke-linejoin="bevel" transform="matrix(0.509109,0,0,0.5118,518.246,9.6888)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<text fill="#212121" fill-opacity="1" stroke="none" xml:space="preserve" x="0" y="-0.0625" font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>Required transmit power for -75 dBm receive power</text>
|
||||
</g>
|
||||
|
||||
<g fill="none" stroke="#1171be" stroke-opacity="1" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" transform="matrix(0.509109,0,0,0.5118,-171.088,-59.0205)"
|
||||
font-family="Helvetica" font-size="22" font-weight="700" font-style="normal"
|
||||
>
|
||||
<polyline fill="none" vector-effect="none" points="408,1029.64 418.134,1069.29 428.266,1112.55 438.4,1160.02 448.533,1212.39 458.667,1270.45 468.8,1334.91 478.934,1406.02 489.066,1482.38 499.2,1557.97 509.333,1617.42 519.467,1637.08 529.6,1606.08 539.734,1540.83 549.866,1464.12 560,1388.72 570.133,1319.17 580.267,1256.3 590.4,1199.68 600.534,1148.56 610.667,1102.17 620.8,1059.83 630.933,1020.98 641.067,985.146 651.2,951.932 661.333,921.016 671.467,892.127 681.6,865.038 691.733,839.559 701.867,815.525 712,792.798 722.133,771.257 732.267,750.798 742.4,731.33 752.533,712.772 762.667,695.057 772.8,678.119 782.933,661.906 793.067,646.366 803.2,631.457 813.333,617.138 823.466,603.374 833.6,590.131 843.733,577.381 853.867,565.097 864,553.254 874.134,541.829 884.266,530.803 894.4,520.156 904.533,509.871 914.667,499.931 924.8,490.322 934.934,481.03 945.066,472.043 955.2,463.348 965.333,454.934 975.467,446.791 985.6,438.91 995.734,431.281 1005.87,423.896 1016,416.747 1026.13,409.827 1036.27,403.128 1046.4,396.645 1056.53,390.371 1066.67,384.3 1076.8,378.427 1086.93,372.746 1097.07,367.254 1107.2,361.945 1117.33,356.815 1127.47,351.86 1137.6,347.076 1147.73,342.46 1157.87,338.007 1168,333.715 1178.13,329.581 1188.27,325.602 1198.4,321.775 1208.53,318.098 1218.67,314.567 1228.8,311.181 1238.93,307.938 1249.07,304.835 1259.2,301.87 1269.33,299.042 1279.47,296.349 1289.6,293.788 1299.73,291.36 1309.87,289.062 1320,286.892 1330.13,284.85 1340.27,282.935 1350.4,281.144 1360.53,279.478 1370.67,277.935 1380.8,276.514 1390.93,275.215 1401.07,274.036 1411.2,272.978 1421.33,272.038 1431.47,271.218 1441.6,270.517 1451.73,269.933 1461.87,269.467 1472,269.118 1482.13,268.886 1492.27,268.772 1502.4,268.774 1512.53,268.893 1522.67,269.128 1532.8,269.48 1542.93,269.95 1553.07,270.536 1563.2,271.24 1573.33,272.061 1583.47,273.001 1593.6,274.059 1603.73,275.236 1613.87,276.532 1624,277.948 1634.13,279.485 1644.27,281.144 1654.4,282.925 1664.53,284.83 1674.67,286.858 1684.8,289.012 1694.93,291.292 1705.07,293.7 1715.2,296.236 1725.33,298.903 1735.47,301.701 1745.6,304.632 1755.73,307.698 1765.87,310.901 1776,314.242 1786.13,317.723 1796.27,321.347 1806.4,325.115 1816.53,329.03 1826.67,333.095 1836.8,337.311 1846.93,341.681 1857.07,346.209 1867.2,350.897 1877.33,355.749 1887.47,360.767 1897.6,365.956 1907.73,371.319 1917.87,376.86 1928,382.583 1938.13,388.493 1948.27,394.594 1958.4,400.891 1968.53,407.39 1978.67,414.095 1988.8,421.013 1998.93,428.15 2009.07,435.512 2019.2,443.107 2029.33,450.941 2039.47,459.022 2049.6,467.36 2059.73,475.962 2069.87,484.838 2080,493.998 2090.13,503.452 2100.27,513.213 2110.4,523.292 2120.53,533.703 2130.67,544.458 2140.8,555.574 2150.93,567.065 2161.07,578.95 2171.2,591.246 2181.33,603.974 2191.47,617.154 2201.6,630.808 2211.73,644.961 2221.87,659.64 2232,674.873 2242.13,690.688 2252.27,707.118 2262.4,724.197 2272.53,741.96 2282.67,760.446 2292.8,779.694 2302.93,799.741 2313.07,820.629 2323.2,842.395 2333.33,865.072 2343.47,888.686 2353.6,913.25 2363.73,938.754 2373.87,965.158 2384,992.374 2394.13,1020.24 2404.27,1048.5 2414.4,1076.76 2424.53,1104.43 2434.67,1130.72 2444.8,1154.59 2454.93,1174.79 2465.07,1190 2475.2,1199.01 2485.33,1201.02 2495.47,1195.85 2505.6,1183.99 2515.73,1166.45 2525.87,1144.52 2536,1119.52 2546.13,1092.61 2556.27,1064.71 2566.4,1036.51 2576.53,1008.52 2586.67,981.045 2596.8,954.309 2606.93,928.433 2617.07,903.479 2627.2,879.474 2637.33,856.413 2647.47,834.279 2657.6,813.04 2667.73,792.663 2677.87,773.106 2688,754.332 2698.13,736.301 2708.27,718.973 2718.4,702.313 2728.53,686.285 2738.67,670.857 2748.8,655.997 2758.93,641.676 2769.07,627.867 2779.2,614.546 2789.33,601.687 2799.47,589.27 2809.6,577.275 2819.73,565.681 2829.87,554.471 2840,543.628 " />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,106 @@
|
||||
function [numPacketErrors, numPacketsSimulated, cfrMagnitudes, rxPower, pathLoss]= simulateTransmission(accessAnalysisResults, cfgEHT, channel, maxChDelay, snr, maxNumErrors, simParameters)
|
||||
numPacketErrors = 0;
|
||||
numPacketsSimulated = 0;
|
||||
cfrMagnitudes = [];
|
||||
rxPower = zeros(size(accessAnalysisResults.elevationAngles));
|
||||
pathLoss = zeros(size(accessAnalysisResults.elevationAngles));
|
||||
|
||||
ofdmInfo = wlanEHTOFDMInfo('EHT-Data', cfgEHT);
|
||||
ind = wlanFieldIndices(cfgEHT);
|
||||
|
||||
stream = RandStream('combRecursive', Seed=simParameters.Seed);
|
||||
stream.Substream = 1;
|
||||
RandStream.setGlobalStream(stream);
|
||||
|
||||
powerOnlySimulation = isempty(snr);
|
||||
if ~powerOnlySimulation
|
||||
snrVal = convertSNR(snr, "snrsc", "snr", FFTLength=ofdmInfo.FFTLength, NumActiveSubcarriers=ofdmInfo.NumTones);
|
||||
end
|
||||
|
||||
if isfield(simParameters, 'TransmitPower')
|
||||
txPower = simParameters.TransmitPower;
|
||||
else
|
||||
txPower = 20;
|
||||
end
|
||||
|
||||
lambda = physconst("lightspeed") / simParameters.CarrierFrequency;
|
||||
includePathLoss = isfield(simParameters, 'IncludeFreeSpacePathLoss') && simParameters.IncludeFreeSpacePathLoss;
|
||||
|
||||
while (powerOnlySimulation || numPacketErrors < maxNumErrors) && numPacketsSimulated < numel(accessAnalysisResults.elevationAngles)
|
||||
numPacketsSimulated = numPacketsSimulated + 1;
|
||||
|
||||
if includePathLoss
|
||||
packetDistance = accessAnalysisResults.distances(numPacketsSimulated);
|
||||
pathLoss(numPacketsSimulated) = 20 * log10(4 * pi * packetDistance / lambda);
|
||||
else
|
||||
pathLoss(numPacketsSimulated) = 0;
|
||||
end
|
||||
rxPower(numPacketsSimulated) = txPower - pathLoss(numPacketsSimulated);
|
||||
|
||||
txPSDU = randi([0 1], psduLength(cfgEHT) * 8, 1);
|
||||
tx = wlanWaveformGenerator(txPSDU, cfgEHT);
|
||||
|
||||
stf = tx(ind.LSTF(1):ind.LSTF(2), :);
|
||||
stfPower = mean(abs(stf(:)).^2);
|
||||
|
||||
tx = tx * sqrt(10^((txPower - 30) / 10)) / sqrt(stfPower);
|
||||
|
||||
txPad = [tx; zeros(maxChDelay, cfgEHT.NumTransmitAntennas)];
|
||||
|
||||
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);
|
||||
|
||||
coarsePacketOffset = wlanPacketDetect(rx, cfgEHT.ChannelBandwidth);
|
||||
if isempty(coarsePacketOffset)
|
||||
numPacketErrors = numPacketErrors + 1;
|
||||
continue;
|
||||
end
|
||||
|
||||
lstf = rx(coarsePacketOffset + (ind.LSTF(1) : ind.LSTF(2)), :);
|
||||
coarseFrequencyOffset = wlanCoarseCFOEstimate(lstf, cfgEHT.ChannelBandwidth);
|
||||
rx = frequencyOffset(rx, simParameters.SampleRate, -coarseFrequencyOffset);
|
||||
|
||||
nonhtfields = rx(coarsePacketOffset + (ind.LSTF(1) : ind.LSIG(2)), :);
|
||||
finePacketOffset = wlanSymbolTimingEstimate(nonhtfields, cfgEHT.ChannelBandwidth);
|
||||
|
||||
packetOffset = coarsePacketOffset + finePacketOffset;
|
||||
|
||||
if packetOffset > maxChDelay
|
||||
numPacketErrors = numPacketErrors + 1;
|
||||
continue;
|
||||
end
|
||||
|
||||
rxLLTF = rx(packetOffset + (ind.LLTF(1) : ind.LLTF(2)), :);
|
||||
fineFrequencyOffset = wlanFineCFOEstimate(rxLLTF, cfgEHT.ChannelBandwidth);
|
||||
rx = frequencyOffset(rx, simParameters.SampleRate, -fineFrequencyOffset);
|
||||
|
||||
rxHELTF = rx(packetOffset + (ind.EHTLTF(1) : ind.EHTLTF(2)), :);
|
||||
heltfDemod = wlanEHTDemodulate(rxHELTF, "EHT-LTF", cfgEHT);
|
||||
[chanEstimate, pilotEstimate] = wlanEHTLTFChannelEstimate(heltfDemod, cfgEHT);
|
||||
|
||||
cfrMagnitudes(:, end + 1) = abs(chanEstimate(:, 1, 1));
|
||||
|
||||
rxData = rx(packetOffset + (ind.EHTData(1) : ind.EHTData(2)), :);
|
||||
demodSym = wlanEHTDemodulate(rxData, "EHT-Data", cfgEHT);
|
||||
|
||||
demodSym = wlanEHTTrackPilotError(demodSym, chanEstimate, cfgEHT, "EHT-Data");
|
||||
|
||||
nVarEst = wlanEHTDataNoiseEstimate(demodSym(ofdmInfo.PilotIndices, :, :),pilotEstimate, cfgEHT);
|
||||
|
||||
demodDataSym = demodSym(ofdmInfo.DataIndices, :, :);
|
||||
chanEstimateData = chanEstimate(ofdmInfo.DataIndices, :, :);
|
||||
|
||||
[eqSym, csi] = wlanEHTEqualize(demodDataSym, chanEstimateData, nVarEst, cfgEHT, 'EHT-Data');
|
||||
|
||||
rxPSDU = wlanEHTDataBitRecover(eqSym, nVarEst, csi, cfgEHT);
|
||||
|
||||
numPacketErrors = numPacketErrors + any(biterr(txPSDU, rxPSDU));
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,45 @@
|
||||
satSim = create_satellite_sim(satConfig, groundStation);
|
||||
% viewer = satelliteScenarioViewer(satSim.sc);
|
||||
|
||||
sampleTimes = satConfig.startTime:seconds(satConfig.sampleTime):satConfig.stopTime;
|
||||
distancesToSat = zeros(size(sampleTimes));
|
||||
elevationAnglesToSat = zeros(size(sampleTimes));
|
||||
|
||||
progressStartText = "Starting ...";
|
||||
f = waitbar(0, progressStartText, "Name", "Task 1");
|
||||
|
||||
progressTotal = numel(sampleTimes);
|
||||
progressQueue = parallel.pool.DataQueue;
|
||||
|
||||
parfor_waitbar(f, progressTotal, progressStartText, true);
|
||||
progressListener = afterEach(progressQueue, @(info) parfor_waitbar(f, progressTotal, info, false));
|
||||
|
||||
parfor idx = 1:numel(sampleTimes)
|
||||
res = perform_access_analysis(satSim, sampleTimes(idx));
|
||||
distancesToSat(idx) = res.distanceToSatellite;
|
||||
elevationAnglesToSat(idx) = res.elevationAngleToSatellite;
|
||||
send(progressQueue, sprintf("Index %d", idx));
|
||||
end
|
||||
|
||||
delete(progressListener);
|
||||
if ishandle(f)
|
||||
close(f);
|
||||
end
|
||||
|
||||
figure;
|
||||
plot(sampleTimes, distancesToSat);
|
||||
grid on;
|
||||
xlabel("Time [s]");
|
||||
ylabel("Distance to Satellite [m]");
|
||||
title("Distance over time plot of satellite pass");
|
||||
|
||||
figure;
|
||||
plot(sampleTimes, elevationAnglesToSat);
|
||||
grid on;
|
||||
xlabel("Time [s]");
|
||||
ylabel("Elevation angle to satellite [degree]");
|
||||
title("Elevation angle over time plot of satellite pass");
|
||||
|
||||
accessAnalysisResults.times = sampleTimes;
|
||||
accessAnalysisResults.distances = distancesToSat;
|
||||
accessAnalysisResults.elevationAngles = elevationAnglesToSat;
|
||||
@@ -0,0 +1,64 @@
|
||||
profile = "C";
|
||||
bandwidth = 20;
|
||||
include_free_space_pathloss = true;
|
||||
delay_model = "None";
|
||||
carrier_frequency = 2.4e9;
|
||||
mobile_speed = 0;
|
||||
mobile_altitude = groundStation.Altitude;
|
||||
satellite_altitude = satConfig.satAltitude;
|
||||
random_stream = "mt19937ar with seed";
|
||||
seed = 666;
|
||||
tx_antenna_count = 1;
|
||||
rx_antenna_count = 1;
|
||||
apep = 1000;
|
||||
txPower = 20;
|
||||
wifiSensitivity = -85;
|
||||
reliableRxPower = -75;
|
||||
amplifierGain = 30;
|
||||
|
||||
[cfgEHT, simParameters, channel, chInfo, maxChDelay, satelliteDopplerShift, chanBW] = create_baseline_configuration(profile, bandwidth, include_free_space_pathloss, delay_model, carrier_frequency, mobile_speed, mobile_altitude, satellite_altitude, random_stream, seed, tx_antenna_count, rx_antenna_count, apep);
|
||||
cfgEHT.User{1}.MCS = 3;
|
||||
simParameters.TransmitPower = txPower;
|
||||
|
||||
[~, numPacketsSimulated, ~, rxPower, pathLoss] = simulateTransmission(accessAnalysisResults, cfgEHT, channel, maxChDelay, [], inf, simParameters);
|
||||
|
||||
packetIdx = 1:numPacketsSimulated;
|
||||
packetTimes = accessAnalysisResults.times(packetIdx);
|
||||
rxPower = rxPower(packetIdx);
|
||||
pathLoss = pathLoss(packetIdx);
|
||||
|
||||
figure;
|
||||
plot(packetTimes, rxPower);
|
||||
grid on;
|
||||
xlabel("Time");
|
||||
ylabel("Power [dBm]");
|
||||
title("Receive power over time plot of satellite pass");
|
||||
yline(wifiSensitivity, "--", "receive sensitivity -85 dBm");
|
||||
yline(reliableRxPower, "--", "reliable reception -75 dBm");
|
||||
|
||||
lambda = physconst("lightspeed") / carrier_frequency;
|
||||
maxPathLossDetectable = txPower - wifiSensitivity;
|
||||
maxDistanceDetectable = lambda / (4 * pi) * 10^(maxPathLossDetectable / 20);
|
||||
|
||||
maxPathLossReliable = txPower - reliableRxPower;
|
||||
maxDistanceReliable = lambda / (4 * pi) * 10^(maxPathLossReliable / 20);
|
||||
|
||||
requiredTxPower = reliableRxPower + pathLoss;
|
||||
|
||||
figure;
|
||||
plot(packetTimes, requiredTxPower);
|
||||
grid on;
|
||||
xlabel("Time");
|
||||
ylabel("Power [dBm]");
|
||||
title("Required transmit power for -75 dBm receive power");
|
||||
|
||||
amplifiedTxPower = txPower + amplifierGain;
|
||||
requiredAntennaGain = max(requiredTxPower - amplifiedTxPower, 0);
|
||||
|
||||
validRequiredTxPower = requiredTxPower(isfinite(requiredTxPower));
|
||||
validRequiredAntennaGain = requiredAntennaGain(isfinite(requiredAntennaGain));
|
||||
|
||||
fprintf("Maximum detectable distance at %.0f dBm TX power: %.2f km\n", txPower, maxDistanceDetectable / 1e3);
|
||||
fprintf("Maximum reliable distance at %.0f dBm TX power: %.2f km\n", txPower, maxDistanceReliable / 1e3);
|
||||
fprintf("Required TX power for -75 dBm reception: %.2f dBm to %.2f dBm\n", min(validRequiredTxPower), max(validRequiredTxPower));
|
||||
fprintf("Required antenna gain with %.0f dB amplifier: %.2f dB to %.2f dB\n", amplifierGain, min(validRequiredAntennaGain), max(validRequiredAntennaGain));
|
||||
Reference in New Issue
Block a user