SatDump 2.0.0-alpha-520736c72
Loading...
Searching...
No Matches
channel_model_leo.h
1#pragma once
2
3#include "../antenna/generic.h"
4#include "../attenuation/generic.h"
5#include "../const.h"
6#include "link_margin.h"
7#include "nlohmann/json.hpp"
8#include <memory>
9
10class ChannelModelLEO
11{
12private:
13 // Antenna and other RF settings
14 const double d_frequency;
15 const bool d_uplink_mode;
16 const double d_rx_noise_figure;
17 const double d_rx_noise_temperature;
18 const double d_tx_power_dbm;
19 const double d_rx_bandwidth;
20
21 // Calculature noise floor
22 double d_noise_floor;
23
24 // Satellite info. Range in KM, elevation in degrees
25 double d_sat_range;
26 double d_sat_elev;
27 double d_sat_range_rate;
28
29 // double d_surface_watervap_density;
30 // double d_temperature;
31 // double d_rainfall_rate;
32
33 // Calculated attenuation & doppler & link margin
34 double d_doppler_shift;
35 double d_atmo_attenuation;
36 double d_rainfall_attenuation;
37 double d_pathloss_attenuation;
38 double d_pointing_attenuation;
39 double d_total_attenuation;
40 double d_link_margin_db;
41
42 const std::shared_ptr<antenna::GenericAntenna> tx_antenna;
43 const std::shared_ptr<antenna::GenericAntenna> rx_antenna;
44
45 const impairment_enum_t d_doppler_shift_enum;
46 std::shared_ptr<GenericAttenuation> d_atmo_gases_attenuation;
47 std::shared_ptr<GenericAttenuation> d_precipitation_attenuation;
48 std::shared_ptr<GenericAttenuation> d_fspl_attenuation;
49 std::shared_ptr<GenericAttenuation> d_pointing_loss_attenuation;
50
51 std::shared_ptr<LinkMargin> d_link_margin;
52
60 double calculate_free_space_path_loss(double slant_range);
61
68 double calculate_doppler_shift(double velocity);
69
70 double calculate_total_attenuation();
71
72public:
73 ChannelModelLEO(bool uplink_mode, // //
74 impairment_enum_t fspl_attenuation_enum, //
75 impairment_enum_t pointing_attenuation_enum, //
76 impairment_enum_t doppler_shift_enum, //
77 impairment_enum_t atmo_gases_attenuation, //
78 impairment_enum_t precipitation_attenuation, //
79 bool enable_link_margin, //
80 double surface_watervap_density, //
81 double temperature, //
82 double rainfall_rate, //
83 std::shared_ptr<antenna::GenericAntenna> tx_antenna, //
84 std::shared_ptr<antenna::GenericAntenna> rx_antenna, //
85 double frequency, //
86 double power_tx, //
87 double receiver_noise_figure, //
88 double receiver_noise_temperature, //
89 double receiver_bandwidth //
90 );
91
92 ~ChannelModelLEO();
93
94public:
95 void set_sat_info(double range, double elev, double range_rate)
96 {
97 d_sat_range = range;
98 d_sat_elev = elev;
99 d_sat_range_rate = range_rate;
100 }
101
102 void update();
103 nlohmann::json get_channel_model_settings();
104
105public:
106 double get_frequency();
107 uint8_t get_polarization();
108 double get_tx_power_dbm();
109 double get_receiver_bandwidth();
110 double get_noise_temperature();
111 double get_noise_figure();
112 double get_noise_floor();
113
115 double calculate_noise_floor();
116 double get_doppler_freq();
117 double get_atmo_attenuation();
118 double get_rainfall_attenuation();
119 double get_pathloss_attenuation();
120 double get_pointing_attenuation();
121 double get_total_attenuation();
122 double get_slant_range();
123 double get_elevation();
124 double get_link_margin();
125};
void estimate_link_margin()
Definition channel_model_leo.cpp:197