lab5 task1 done, task2 nearly finished

This commit is contained in:
ti_mo
2026-06-22 22:03:28 +02:00
parent 48793b1532
commit eb4d72c7c2
16 changed files with 2727 additions and 0 deletions
+1221
View File
File diff suppressed because it is too large Load Diff
+151
View File
@@ -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
+73
View File
@@ -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
+12
View File
@@ -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

+226
View File
@@ -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

+31
View File
@@ -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
+29
View File
@@ -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.
![Distance over time sweep](distance_over_time.svg)
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
![Elevation angle over time sweep](elevation_angle_over_time.svg)
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.
+29
View File
@@ -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
+75
View File
@@ -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
+262
View File
@@ -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

+196
View File
@@ -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

+106
View File
@@ -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
+45
View File
@@ -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;
+64
View File
@@ -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));