The se plots and map come from an end-to-end link analysis for an Iridium system satellite-based link between an Francisco and Berlin.
%function demoLink
%
% demoLink
%
% This demo simulates the Iridium system. During the simulation
% the routing path between Berlin and SanFrancisco is calculated.
% For uplink, crosslink, and downlink channel Eb/N0, delay, C/N,
% and the biterror rate are calculated. In the next step Eb/N0
% delay, C/N, and the biterror rate for the whole link is
% computed and shown.
%
1; % Not a function file, since the first command is not the function
% keyword
%
function [EbN0, DELAY, BEP, CN, CN0]
= UpDownChannel(DIST, ELEV, ALT,LAT)
% DIST [km] Distance vector from groundstation to satellite
% ELEV [deg] Elevation angle vector from groundstation to satellite
% ALT [km] Altitude of groundstation over NN
% LAT [deg] Latitude of groundstation (deg)
%
% EbN0 [dB] Bit energy Eb/N0 (dB)
% DELAY [sec] Delays
% BEP [] Bit error rate
% CN [dB] Carrier-to-noise ratio
% CN0 [dB] Carrier-to-noise density ratio (dB)
% user setting variables for downlink
F = 1.62e9; % Carrier Frequency [Hz]
Pol = 45; % Polarization 45-circ., 0-horiz., 90-vert.
B = 75e3; % Channel Bandwidth [Hz]
Rb = 50e3; % Data bit rate [bps]
Eta = 0.55; % Antenna efficiency
D = 1; % Antenna diameter [m]
Pt = 10; % Transmitter Power [W]
Lp = 3; % Pointing Loss [dB]
T = 18; % Temperature [deg C]
Rho = 5; % Water vapour [g/m^3]
R001 = 31; % Rain rate 0.01 % [mm/h]
ISI = 0.5; % Intersymbol Interference Loss [dB]
Lm = 3; % Link Margin [dB]
Fomr = -24.8; % Figure of Merit [dB]
Coder = 4; % ConvolutionCode4
M = 0; % ASK modulation
Gt = G_antenna(F, D, Eta); % Antenna gain maximum
EIRP = dB(Pt) + Gt; % EIRP
Lg = L_gas (ALT, ELEV, F, Rho, T); % Gas Loss
Lr = L_rain (ALT, ELEV, F, LAT, R001); % Rain Loss
Lfs = L_fs (DIST, F); % Free space Loss
L = Lfs + Lg + Lr + Lp + ISI; % Overall Losses
Gc = G_coding (Coder);
DELAY = Delay (DIST, Lr);
BEP = BER (EbN0, M);
[EbN0, CN0, CN] = LinkBudget(EIRP, L, Lm, Gc, Fomr, Rb, B);
% inverse dB
EbN0A = exp10(EbN0/10);
endfunction
function [EbN0, DELAY, BEP, CN, CN0] = CrossLinkChannel(DIST)
% DIST [km] Distance vector from groundstation to satellite
% ELEV [deg] Elevation angle vector from groundstation to satellite
% ALT [km] Altitude of groundstation over NN
% LAT [deg] Latitude of groundstation (deg)
%
% EbN0 [dB] Bit energy Eb/N0 (dB)
% DELAY [sec] Delays
% BEP [] Bit error rate
% CN [dB] Carrier-to-noise ratio
% CN0 [dB] Carrier-to-noise density ratio (dB)
% user setting variables for downlink
F = 1.62e9; % Carrier Frequency [Hz]
B = 10e6; % Channel Bandwidth [Hz]
Rb = 12e6; % Data bit rate [bps]
Eta = 0.55; % Antenna efficiency
D = 2; % Antenna diameter [m]
Pt = 30; % Transmitter Power [W]
Lp = 3; % Pointing Loss [dB]
ISI = 0.5; % Intersymbol Interference Loss [dB]
Lm = 3; % Link Margin [dB]
Fomr = -10; % Figure of Merit [dB]
Coder = 4; % ConvolutionCode4
M = 17; % QPSK modulation
Gt = G_antenna(F, D, Eta); % Antenna gain maximum
EIRP = dB(Pt) + Gt; % EIRP
Lfs = L_fs (DIST, F); % Free space Loss
L = Lfs + Lp + ISI; % Overall Losses
Gc = G_coding (Coder);
DELAY = Delay (DIST);
BEP = BER (EbN0, M);
[EbN0, CN0, CN] = LinkBudget(EIRP, L, Lm, Gc, Fomr, Rb, B);
EbN0A = exp10(EbN0/10); % inverse dB
endfunction
loadreplaceAll("./IR66.data");
% initialize values for Iridium
Node1 = getNodeNumber('SanFrancisco')+1;
Node2 = getNodeNumber('Berlin')+1;
SatsPerOrbit=11;
% other values
[lat(1), alt(1)] = getNodeParameter (Node1-1, P_lat, P_alt);
[lat(2), alt(2)] = getNodeParameter (Node2-1, P_lat, P_alt);
% set start time
setSimEpoch(1992,7,30,10,30,0);
% time steps
t=0:10:600;
for i=1:max(size(t))
tnow=t(i);
setSimTime(tnow);
[d,r,a,e,v] = RelPosition ();
D = RoutingCorrection
(d,v,SatsPerOrbit,NumberOfStations+NumberOfMobiles);
Route= RoutingDijkstra (D,Node1,Node2);
UsedNodes=prod(size(Route));
% uplink
[EbN0(1), Delay(1),Ber(1),CN(1),CN0(1)]
=UpDownChannel(d(Node1,
Route(2)),
e(Node1,
Route(2)),
alt(Node1),
lat(Node1));
% crosslink
for i2 = 2:(UsedNodes-2)
distance(i2)=d(Route(i2),Route(i2+1));
[EbN0(i2),Delay(i2),Ber(i2),CN(i2),CN0(i2)]
=CrossLinkChannel(distance(i2));
endfor
% downlink
i2 = UsedNodes-1;
[EbN0(i2),Delay(i2),Ber(i2),CN(i2),CN0(i2)]
=UpDownChannel(d(Node2,
Route(i2)),
e(Node2,
Route(i2)),
alt(Node2),
lat(Node2));
% all links
Delay_g(i) = 0;
for i2 = 1:(UsedNodes-1)
if (i2==1)
Delay_g(i) = Delay(i2);
CN_g(i) = CN(i2);
Ber_g(i)=Ber(i2);
else
Delay_g(i)=Delay_g(i)+Delay(i2);
zw1 = exp10(CN_g(i)/10.0);
zw2 = exp10(CN(i2) /10.0);
CN_g(i)=10*log10(1/((1/zw1) + (1/zw2)));
Ber_g(i)=Ber_g(i)*(1-Ber(i2)) + (1-Ber_g(i))*Ber(i2);
endif
endfor
EbN0_g(i)=CN_g(i)-10.0*log(12.0/10.0);
endfor
erase
title('SanFrancisco to Berlin');
window('221');
plot(t,EbN0_g,'grid','red');
xlabel('t [sec]');
ylabel('Eb/N0 [dB]');
window('222');
plot(t,Delay_g,'grid','red');
xlabel('t [sec]');
ylabel('Delay [sec]');
window('223')
plot(t,CN_g,'grid','green');
xlabel('t [sec]');
ylabel('C/N [dB]');
window('224')
plot(t,log10(Ber_g),'grid','green');
xlabel('t [sec]');
ylabel('log10(BER)');
%demos
%endfunction