satellite-bbframe-conf.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 Magister Solutions Ltd
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Jani Puttonen <jani.puttonen@magister.fi>
19  */
20 
21 #include "satellite-bbframe-conf.h"
22 
23 #include "satellite-utils.h"
24 
25 #include <ns3/boolean.h>
26 #include <ns3/double.h>
27 #include <ns3/enum.h>
28 #include <ns3/log.h>
29 #include <ns3/string.h>
30 #include <ns3/uinteger.h>
31 
32 #include <algorithm>
33 #include <iostream>
34 #include <limits>
35 #include <utility>
36 #include <vector>
37 
38 NS_LOG_COMPONENT_DEFINE("SatBbFrameConf");
39 
40 namespace ns3
41 {
42 
48 const uint32_t payloadConf[7][3] = {
49  {2, 360, 90},
50  {3, 240, 60},
51  {4, 180, 45},
52  {5, 144, 36},
53  {6, 120, 30},
54  {7, 102, 25},
55  {8, 90, 22},
56 };
57 
59  : m_modcod(SatEnums::SAT_MODCOD_QPSK_1_TO_2),
60  m_frameType(SatEnums::NORMAL_FRAME),
61  m_frameDuration(Seconds(0.0)),
62  m_payloadBits(0),
63  m_cnoRequirement(0.0)
64 {
65  NS_LOG_FUNCTION(this);
66  NS_ASSERT(false);
67 
71 }
72 
75  Time frameDur,
76  uint32_t payloadBits)
77  : m_modcod(modcod),
78  m_frameType(fType),
79  m_frameDuration(frameDur),
80  m_payloadBits(payloadBits),
81  m_cnoRequirement(0.0)
82 {
83 }
84 
87 {
88  NS_LOG_FUNCTION(this);
89  return m_modcod;
90 }
91 
94 {
95  NS_LOG_FUNCTION(this);
96  return m_frameType;
97 }
98 
99 uint32_t
101 {
102  NS_LOG_FUNCTION(this);
103  return m_payloadBits;
104 }
105 
106 Time
108 {
109  NS_LOG_FUNCTION(this);
110  return m_frameDuration;
111 }
112 
113 double
115 {
116  NS_LOG_FUNCTION(this);
117  return m_cnoRequirement;
118 }
119 
120 void
122 {
123  NS_LOG_FUNCTION(this << cnoRequirement);
124  m_cnoRequirement = cnoRequirement;
125 }
126 
127 void
129 {
130  NS_LOG_FUNCTION(this);
131 
132  std::cout << "Modcod, " << SatEnums::GetModcodTypeName(m_modcod) << ", frameType, "
133  << m_frameType << ", payloadBits, " << m_payloadBits << ", frameDuration, "
134  << m_frameDuration << ", cnoRequirement, " << m_cnoRequirement << std::endl;
135 }
136 
137 NS_OBJECT_ENSURE_REGISTERED(SatBbFrameConf);
138 
140  : m_symbolRate(100000000.0),
141  m_symbolsPerSlot(90),
142  m_pilotBlockInSymbols(0),
143  m_pilotBlockIntervalInSlots(36),
144  m_plHeaderInSlots(1),
145  m_dummyFrameInSlots(36),
146  m_bbFrameHeaderSizeInBytes(10),
147  m_bbFrameHighOccupancyThreshold(0.9),
148  m_bbFrameLowOccupancyThreshold(0.5),
149  m_targetBler(0.00001),
150  m_acmEnabled(false),
151  m_defaultModCodDummyFramesS2X(SatEnums::SAT_NONVALID_MODCOD),
152  m_defaultModCodDummyFramesS2XStr("QPSK_1_TO_4"),
153  m_defaultModCod(SatEnums::SAT_NONVALID_MODCOD),
154  m_defaultModCodStr("QPSK_1_TO_2"),
155  m_shortFramePayloadInSlots(),
156  m_normalFramePayloadInSlots(),
157  m_waveforms(),
158  m_bbFrameUsageMode(SatEnums::NORMAL_FRAMES),
159  m_mostRobustShortFrameModcod(SatEnums::SAT_NONVALID_MODCOD),
160  m_mostRobustNormalFrameModcod(SatEnums::SAT_NONVALID_MODCOD),
161  m_dvbVersion(SatEnums::DVB_S2),
162  m_bbFrameS2XPilots(true),
163  m_modCodsUsedStr("")
164 {
165  NS_LOG_FUNCTION(this);
166  NS_FATAL_ERROR("Default constructor not supported!!!");
167 }
168 
170  : m_symbolRate(symbolRate),
171  m_symbolsPerSlot(90),
172  m_pilotBlockInSymbols(0),
173  m_pilotBlockIntervalInSlots(36),
174  m_plHeaderInSlots(1),
175  m_dummyFrameInSlots(36),
176  m_bbFrameHeaderSizeInBytes(10),
177  m_bbFrameHighOccupancyThreshold(0.9),
178  m_bbFrameLowOccupancyThreshold(0.5),
179  m_targetBler(0.00001),
180  m_acmEnabled(false),
181  m_defaultModCodDummyFramesS2X(SatEnums::SAT_NONVALID_MODCOD),
182  m_defaultModCodDummyFramesS2XStr("QPSK_1_TO_4"),
183  m_defaultModCod(SatEnums::SAT_NONVALID_MODCOD),
184  m_defaultModCodStr("QPSK_1_TO_2"),
185  m_shortFramePayloadInSlots(),
186  m_normalFramePayloadInSlots(),
187  m_waveforms(),
188  m_bbFrameUsageMode(SatEnums::NORMAL_FRAMES),
189  m_mostRobustShortFrameModcod(SatEnums::SAT_NONVALID_MODCOD),
190  m_mostRobustNormalFrameModcod(SatEnums::SAT_NONVALID_MODCOD),
191  m_dvbVersion(dvbVersion),
192  m_bbFrameS2XPilots(true),
193  m_modCodsUsedStr("")
194 {
195  ObjectBase::ConstructSelf(AttributeConstructionList());
196 
197  // Initialize the payloads
198  for (uint32_t i = 0; i < 7; ++i)
199  {
200  m_normalFramePayloadInSlots.insert(std::make_pair(payloadConf[i][0], payloadConf[i][1]));
201  m_shortFramePayloadInSlots.insert(std::make_pair(payloadConf[i][0], payloadConf[i][2]));
202  }
203 
204  // Load custom MC list if specified or all MC if nothing in m_modCodsUsedStr is empty
205  m_modCodsUsed.clear();
206  GetModCodsList();
207 
208  switch (m_dvbVersion)
209  {
210  case SatEnums::DVB_S2:
212  break;
213  case SatEnums::DVB_S2X:
215  {
216  NS_FATAL_ERROR("Cannot use NORMAL_AND_SHORT_FRAMES with DVB-S2X ModCods");
217  }
218 
220  "SAT_MODCOD_S2X_" + m_defaultModCodStr + "_" +
221  (m_bbFrameUsageMode == SatEnums::NORMAL_FRAMES ? "NORMAL" : "SHORT") + "_" +
222  (m_bbFrameS2XPilots ? "PILOTS" : "NOPILOTS"));
223 
226  "_SHORT_" + (m_bbFrameS2XPilots ? "PILOTS" : "NOPILOTS"));
227 
228  break;
229  default:
230  NS_FATAL_ERROR("Unknown DVB version used");
231  }
232 
233  if (std::find(m_modCodsUsed.begin(), m_modCodsUsed.end(), m_defaultModCod) ==
234  m_modCodsUsed.end())
235  {
236  NS_FATAL_ERROR("Default ModCod (" + SatEnums::GetModcodTypeName(m_defaultModCod) +
237  ") is not in the list of used ModCods.");
238  }
239 
240  // Available frame types
241  std::vector<SatEnums::SatBbFrameType_t> frameTypes;
243 
244  uint32_t wfCount(1);
245  for (std::vector<SatEnums::SatModcod_t>::const_iterator mit = m_modCodsUsed.begin();
246  mit != m_modCodsUsed.end();
247  ++mit)
248  {
249  switch (m_dvbVersion)
250  {
251  case SatEnums::DVB_S2:
252  for (std::vector<SatEnums::SatBbFrameType_t>::const_iterator fit = frameTypes.begin();
253  fit != frameTypes.end();
254  ++fit)
255  {
256  // Calculate the payload
257  uint32_t pl = CalculateBbFramePayloadBits(*mit, *fit);
258 
259  // Calculate the frame length
260  Time len = CalculateBbFrameDuration(*mit, *fit);
261 
262  Ptr<SatDvbS2Waveform> wf = Create<SatDvbS2Waveform>(*mit, *fit, len, pl);
263  m_waveforms.insert(std::make_pair(std::make_pair(*mit, *fit), wf));
264  wfCount++;
265  }
266  break;
267  case SatEnums::DVB_S2X:
269  uint32_t pl = CalculateBbFramePayloadBits(*mit, fit);
270 
271  // Calculate the frame length
272  Time len = CalculateBbFrameDuration(*mit, fit);
273 
274  Ptr<SatDvbS2Waveform> wf = Create<SatDvbS2Waveform>(*mit, fit, len, pl);
275  m_waveforms.insert(std::make_pair(std::make_pair(*mit, fit), wf));
276  wfCount++;
277  break;
278  }
279  }
280 
281  /* Add waveform with Default Dummy Frames ModCod when using DVB-S2X.
282  * Added if not already in ModCods list.
283  */
285  std::find(m_modCodsUsed.begin(), m_modCodsUsed.end(), m_defaultModCodDummyFramesS2X) ==
286  m_modCodsUsed.end())
287  {
290  uint32_t pl = CalculateBbFramePayloadBits(mit, fit);
291 
292  // Calculate the frame length
293  Time len = CalculateBbFrameDuration(mit, fit);
294 
295  Ptr<SatDvbS2Waveform> wf = Create<SatDvbS2Waveform>(mit, fit, len, pl);
296  m_waveforms.insert(std::make_pair(std::make_pair(mit, fit), wf));
297  wfCount++;
298  }
299 
300  uint32_t payloadBitsForShortFrame = std::numeric_limits<uint32_t>::max();
301  uint32_t payloadBitsForNormalFrame = std::numeric_limits<uint32_t>::max();
302 
303  // find the waveform with the more robust MODCOD than previous one
304  for (waveformMap_t::const_reverse_iterator rit = m_waveforms.rbegin();
305  rit != m_waveforms.rend();
306  ++rit)
307  {
308  if (rit->second->GetBbFrameType() == SatEnums::SHORT_FRAME)
309  {
310  // The first waveform over the threshold
311  if (rit->second->GetPayloadInBits() < payloadBitsForShortFrame)
312  {
313  payloadBitsForShortFrame = rit->second->GetPayloadInBits();
314  m_mostRobustShortFrameModcod = rit->second->GetModcod();
315  }
316  }
317 
318  if (rit->second->GetBbFrameType() == SatEnums::NORMAL_FRAME)
319  {
320  // The first waveform over the threshold
321  if (rit->second->GetPayloadInBits() < payloadBitsForNormalFrame)
322  {
323  payloadBitsForNormalFrame = rit->second->GetPayloadInBits();
324  m_mostRobustNormalFrameModcod = rit->second->GetModcod();
325  }
326  }
327  }
328 
332  {
333  NS_FATAL_ERROR(
334  "The most robust MODCOD not found for short frames, BB frame configuration error???");
335  }
339  {
340  NS_FATAL_ERROR(
341  "The most robust MODCOD not found for normal frames, BB frame configuration error???");
342  }
343 
346  {
347  // currently is assumed that the most robust MODCODs are same for both short and normal
348  // frames
349  NS_FATAL_ERROR("The most robust MODCODs are different for short and normal frames!!!");
350  }
351 }
352 
353 TypeId
355 {
356  static TypeId tid =
357  TypeId("ns3::SatBbFrameConf")
358  .SetParent<Object>()
359  .AddAttribute("SymbolsPerSlot",
360  "Number of symbols per slot",
361  UintegerValue(90),
362  MakeUintegerAccessor(&SatBbFrameConf::m_symbolsPerSlot),
363  MakeUintegerChecker<uint32_t>())
364  .AddAttribute("PilotBlockInSymbols",
365  "Pilot block size in symbols",
366  UintegerValue(36),
367  MakeUintegerAccessor(&SatBbFrameConf::m_pilotBlockInSymbols),
368  MakeUintegerChecker<uint32_t>())
369  .AddAttribute("PilotBlockIntervalInSlots",
370  "Pilot block interval in slots",
371  UintegerValue(16),
372  MakeUintegerAccessor(&SatBbFrameConf::m_pilotBlockIntervalInSlots),
373  MakeUintegerChecker<uint32_t>())
374  .AddAttribute("PlHeaderInSlots",
375  "PL header size in slots",
376  UintegerValue(1),
377  MakeUintegerAccessor(&SatBbFrameConf::m_plHeaderInSlots),
378  MakeUintegerChecker<uint32_t>())
379  .AddAttribute("DummyFrameInSlots",
380  "Dummy frame size in slots",
381  UintegerValue(36),
382  MakeUintegerAccessor(&SatBbFrameConf::m_dummyFrameInSlots),
383  MakeUintegerChecker<uint32_t>())
384  .AddAttribute("TargetBLER",
385  "Block error rate target",
386  DoubleValue(0.00001),
387  MakeDoubleAccessor(&SatBbFrameConf::m_targetBler),
388  MakeDoubleChecker<double>())
389  .AddAttribute("AcmEnabled",
390  "Enable ACM",
391  BooleanValue(false),
392  MakeBooleanAccessor(&SatBbFrameConf::m_acmEnabled),
393  MakeBooleanChecker())
394  .AddAttribute("DefaultModCod",
395  "Default MODCOD",
396  StringValue("QPSK_1_TO_2"),
397  MakeStringAccessor(&SatBbFrameConf::m_defaultModCodStr),
398  MakeStringChecker())
399  .AddAttribute("DefaultModCodDummyFramesS2X",
400  "Default MODCOD for DVB-S2X Dummy Frames. In DVB-S2, Dummy Frames use "
401  "m_defaultModCod.",
402  StringValue("QPSK_1_TO_4"),
404  MakeStringChecker())
405  .AddAttribute("BbFrameHeaderInBytes",
406  "BB Frame header size in bytes",
407  UintegerValue(10), // ETSI EN 302 307 V1.3.1 specified 80 bits
408  MakeUintegerAccessor(&SatBbFrameConf::m_bbFrameHeaderSizeInBytes),
409  MakeUintegerChecker<uint32_t>())
410  .AddAttribute("BbFrameHighOccupancyThreshold",
411  "BB Frame high occupancy threshold [0-1]",
412  DoubleValue(0.9),
414  MakeDoubleChecker<double>(0.0, 1.0))
415  .AddAttribute("BbFrameLowOccupancyThreshold",
416  "BB Frame low occupancy threshold [0-1]",
417  DoubleValue(0.5),
419  MakeDoubleChecker<double>(0.0, 1.0))
420  .AddAttribute("BBFrameUsageMode",
421  "Mode for selecting used BB Frames.",
422  EnumValue(SatEnums::NORMAL_FRAMES),
423  MakeEnumAccessor(&SatBbFrameConf::m_bbFrameUsageMode),
424  MakeEnumChecker(SatEnums::SHORT_FRAMES,
425  "ShortFrames",
427  "NormalFrames",
429  "ShortAndNormalFrames"))
430  .AddAttribute("BBFramePilotsS2X",
431  "Use Pilots in DVB-S2X BB Frames.",
432  BooleanValue(true),
433  MakeBooleanAccessor(&SatBbFrameConf::m_bbFrameS2XPilots),
434  MakeBooleanChecker())
435  .AddAttribute("ModCodsUsed",
436  "List of DVB-S2X ModCods used. If nothing specified, all available "
437  "ModCods are used",
438  StringValue(""),
439  MakeStringAccessor(&SatBbFrameConf::m_modCodsUsedStr),
440  MakeStringChecker())
441  .AddConstructor<SatBbFrameConf>();
442  return tid;
443 }
444 
445 TypeId
447 {
448  return GetTypeId();
449 }
450 
452 {
453  NS_LOG_FUNCTION(this);
454 }
455 
456 void
457 SatBbFrameConf::InitializeCNoRequirements(Ptr<SatLinkResultsFwd> linkResults)
458 {
459  NS_LOG_FUNCTION(this);
460 
461  for (waveformMap_t::iterator it = m_waveforms.begin(); it != m_waveforms.end(); ++it)
462  {
468  double esnoRequirementDb =
469  linkResults->GetEsNoDb(it->second->GetModcod(), it->first.second, m_targetBler);
470 
476  it->second->SetCNoRequirement(SatUtils::DbToLinear(esnoRequirementDb) * m_symbolRate);
477  }
478 }
479 
480 void
482 {
483  NS_LOG_FUNCTION(this);
484 
485  for (waveformMap_t::const_iterator it = m_waveforms.begin(); it != m_waveforms.end(); ++it)
486  {
487  it->second->Dump();
488  }
489 }
490 
493 {
494  NS_LOG_FUNCTION(this);
495  return m_dvbVersion;
496 }
497 
498 std::vector<SatEnums::SatModcod_t>
500 {
501  NS_LOG_FUNCTION(this);
502  return m_modCodsUsed;
503 }
504 
505 uint32_t
507  SatEnums::SatBbFrameType_t frameType) const
508 {
509  NS_LOG_FUNCTION(this << modcod << frameType);
510 
511  uint32_t dataSlots(0);
512  uint32_t modulatedBits = SatUtils::GetModulatedBits(modcod);
513 
514  switch (frameType)
515  {
516  case SatEnums::SHORT_FRAME: {
517  dataSlots = m_shortFramePayloadInSlots.at(modulatedBits);
518  break;
519  }
520  case SatEnums::NORMAL_FRAME: {
521  dataSlots = m_normalFramePayloadInSlots.at(modulatedBits);
522  break;
523  }
524  default: {
525  NS_FATAL_ERROR("Unsupported enum SatBbFrameType_t!");
526  break;
527  }
528  }
529 
530  return (uint32_t)(dataSlots * m_symbolsPerSlot * modulatedBits *
531  SatUtils::GetCodingRate(modcod));
532 }
533 
534 Time
536  SatEnums::SatBbFrameType_t frameType) const
537 {
538  NS_LOG_FUNCTION(this << modcod << frameType);
539 
540  uint32_t dataSlots(0);
541  uint32_t modulatedBits = SatUtils::GetModulatedBits(modcod);
542 
543  switch (frameType)
544  {
545  case SatEnums::SHORT_FRAME: {
546  dataSlots = m_shortFramePayloadInSlots.at(modulatedBits);
547  break;
548  }
549  case SatEnums::NORMAL_FRAME: {
550  dataSlots = m_normalFramePayloadInSlots.at(modulatedBits);
551  break;
552  }
553  default: {
554  NS_FATAL_ERROR("Unsupported enum SatBbFrameType_t!");
555  break;
556  }
557  }
558 
559  uint32_t slots = dataSlots + m_plHeaderInSlots;
560  uint32_t dataSymbols = slots * m_symbolsPerSlot;
561  uint32_t pilotSlots = (uint32_t)(floor((double)slots / m_pilotBlockIntervalInSlots));
562  uint32_t pilotSymbols = pilotSlots * m_pilotBlockInSymbols;
563 
564  uint32_t totalSymbols = dataSymbols + pilotSymbols;
565  double frameLength = totalSymbols / m_symbolRate;
566 
567  return Seconds(frameLength);
568 }
569 
570 void
572 {
573  NS_LOG_FUNCTION(this);
574  m_modCodsUsed.clear();
575 
576  if (m_modCodsUsedStr.size() == 0)
577  {
578  switch (m_dvbVersion)
579  {
580  case SatEnums::DVB_S2:
582  return;
583  case SatEnums::DVB_S2X:
587  return;
588  default:
589  NS_FATAL_ERROR("Incorrect DVB version");
590  }
591  }
592 
593  std::stringstream strm(m_modCodsUsedStr);
594  std::string name;
595  std::string prefix;
596  std::string suffix;
597 
598  switch (m_dvbVersion)
599  {
600  case SatEnums::DVB_S2:
601  prefix = "SAT_MODCOD_";
602  suffix = "";
603  break;
604  case SatEnums::DVB_S2X:
605  prefix = "SAT_MODCOD_S2X_";
606  suffix = std::string("_") +
607  (m_bbFrameUsageMode == SatEnums::NORMAL_FRAMES ? "NORMAL" : "SHORT") + "_" +
608  (m_bbFrameS2XPilots ? "PILOTS" : "NOPILOTS");
609  break;
610  default:
611  NS_FATAL_ERROR("Incorrect DVB version");
612  }
613 
614  while (getline(strm, name, ' '))
615  {
616  SatEnums::SatModcod_t mc = SatEnums::GetModcodFromName(prefix + name + suffix);
617  m_modCodsUsed.push_back(mc);
618  }
619  std::sort(m_modCodsUsed.begin(), m_modCodsUsed.end());
620 }
621 
622 uint32_t
624  SatEnums::SatBbFrameType_t frameType) const
625 {
626  NS_LOG_FUNCTION(this << modcod << frameType);
627  return m_waveforms.at(std::make_pair(modcod, frameType))->GetPayloadInBits();
628 }
629 
630 double
632 {
633  NS_LOG_FUNCTION(this);
634  return m_symbolRate;
635 }
636 
637 Time
639  SatEnums::SatBbFrameType_t frameType) const
640 {
641  NS_LOG_FUNCTION(this << modcod << frameType);
642  return m_waveforms.at(std::make_pair(modcod, frameType))->GetFrameDuration();
643 }
644 
645 Time
647 {
648  NS_LOG_FUNCTION(this);
650 }
651 
654 {
655  NS_LOG_FUNCTION(this << frameType);
656 
657  // If ACM is disabled, return the default MODCOD
658  if (!m_acmEnabled)
659  {
660  return m_defaultModCod;
661  }
662 
663  // Return the waveform with best spectral efficiency
664  for (waveformMap_t::const_reverse_iterator rit = m_waveforms.rbegin();
665  rit != m_waveforms.rend();
666  ++rit)
667  {
668  if (rit->second->GetBbFrameType() == frameType)
669  {
670  double cnoReq = rit->second->GetCNoRequirement();
671  // The first waveform over the threshold
672  if (cnoReq <= cNo)
673  {
674  return rit->second->GetModcod();
675  }
676  }
677  }
678  return m_defaultModCod;
679 }
680 
683 {
684  NS_LOG_FUNCTION(this << frameType);
685 
687 
688  if (frameType == SatEnums::SHORT_FRAME)
689  {
690  mostRobustModcod = m_mostRobustShortFrameModcod;
691  }
692  else if (frameType == SatEnums::NORMAL_FRAME)
693  {
694  mostRobustModcod = m_mostRobustNormalFrameModcod;
695  }
696  else
697  {
698  NS_FATAL_ERROR("Not supported frame type!!!");
699  }
700 
701  return mostRobustModcod;
702 }
703 
706 {
707  NS_LOG_FUNCTION(this);
708  return m_defaultModCod;
709 }
710 
713 {
714  NS_LOG_FUNCTION(this);
716 }
717 
718 } // namespace ns3
This class implements the BB Frame configurations for DVB-S2.
SatEnums::BbFrameUsageMode_t m_bbFrameUsageMode
BBFrame usage mode.
double GetSymbolRate()
Symbol rate in baud.
uint32_t m_pilotBlockInSymbols
The size of the pilot block in symbols.
void GetModCodsList()
Get the list of ModCods from their string representation.
void DumpWaveforms() const
Dump waveform details for debugging purposes.
SatBbFrameConf()
Default constructor.
uint32_t m_symbolsPerSlot
The size of the (data) slot in symbols.
Time CalculateBbFrameDuration(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType) const
Calculate the BBFrame duration in Time.
double m_targetBler
Block error rate target for the waveforms.
void InitializeCNoRequirements(Ptr< SatLinkResultsFwd > linkResults)
Initialize the C/No requirements for a given BLER target.
virtual ~SatBbFrameConf()
Destructor for SatBbFrameConf.
double m_bbFrameLowOccupancyThreshold
The BB frame low occupancy threshold in range 0 - 1.
double m_bbFrameHighOccupancyThreshold
The BB frame high occupancy threshold in range 0 - 1.
std::map< uint32_t, uint32_t > m_normalFramePayloadInSlots
SatEnums::SatModcod_t m_defaultModCodDummyFramesS2X
Default MODCOD for DVB-S2X dummy Frames.
bool m_acmEnabled
Flag to indicate whether ACM is enabled or disabled.
static TypeId GetTypeId(void)
Get the type ID.
std::string m_defaultModCodStr
The string representation of default ModCod.
Time GetBbFrameDuration(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType) const
Get the BB frame frame duration.
std::vector< SatEnums::SatModcod_t > m_modCodsUsed
List of ModCods used.
bool m_bbFrameS2XPilots
Indicates if using pilots in BBFrames when DVB-S2X is chosen.
std::map< uint32_t, uint32_t > m_shortFramePayloadInSlots
uint32_t m_bbFrameHeaderSizeInBytes
The BB frame header size in bytes.
uint32_t m_plHeaderInSlots
The PL header size in slots.
SatEnums::SatModcod_t GetMostRobustModcod(SatEnums::SatBbFrameType_t frameType) const
Get the most robust MODCOD with a given BB frame type.
SatEnums::SatModcod_t m_mostRobustShortFrameModcod
The most robust MODCOD for short frame.
std::string m_defaultModCodDummyFramesS2XStr
String representation of default ModCod for DVB-S2X Dummy Frames.
virtual TypeId GetInstanceTypeId(void) const
Get the type ID of instance.
SatEnums::DvbVersion_t GetDvbVersion()
Indicates if using DVB-S2 or DVB-S2X.
SatEnums::DvbVersion_t m_dvbVersion
Indicates if using DVB-S2 or DVB-S2X.
uint32_t m_pilotBlockIntervalInSlots
Interval of pilot block in slots.
uint32_t GetBbFramePayloadBits(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType) const
Get the BB frame payload in bits.
Time GetDummyBbFrameDuration() const
Get the dummy frame duration in Time.
std::vector< SatEnums::SatModcod_t > GetModCodsUsed()
Get the list of ModCods used.
SatEnums::SatModcod_t GetDefaultModCod() const
Get the default MODCOD.
uint32_t CalculateBbFramePayloadBits(SatEnums::SatModcod_t modcod, SatEnums::SatBbFrameType_t frameType) const
Calculate the BBrame higher layer payload in bits.
SatEnums::SatModcod_t GetBestModcod(double cNo, SatEnums::SatBbFrameType_t frameType) const
Get the best MODCOD with a given BB frame type.
std::string m_modCodsUsedStr
String containing all DVB-S2X ModCods used.
waveformMap_t m_waveforms
Available "waveforms", i.e.
SatEnums::SatModcod_t m_defaultModCod
Default MODCOD is used.
SatEnums::SatModcod_t GetDefaultModCodDummyFramesS2X() const
Get the default MODCOD for short DVB-S2X frames.
SatEnums::SatModcod_t m_mostRobustNormalFrameModcod
The most robust MODCOD for long frame.
double m_symbolRate
Symbol rate in baud.
uint32_t m_dummyFrameInSlots
Dummy BBFrame length in slots.
SatDvbS2Waveform()
Default constructor for SatDvbS2Waveform.
uint32_t GetPayloadInBits() const
Get payload of this waveform in bits.
double m_cnoRequirement
C/No requirement calculated with a certain BLER target from the link results.
void SetCNoRequirement(double cnoRequirement)
Set the C/No requirement of the waveform in linear domain.
Time GetFrameDuration() const
Get the frame duration in Time.
SatEnums::SatModcod_t m_modcod
MODCOD.
uint32_t m_payloadBits
Payload in bits.
void Dump() const
Dump the contents of the waveform.
SatEnums::SatBbFrameType_t m_frameType
Frame type: short, normal.
double GetCNoRequirement() const
Get C/No requirement corresponding a given BLER target.
Time m_frameDuration
Frame duration in Time.
SatEnums::SatModcod_t GetModcod() const
Get MODCOD of this waveform.
SatEnums::SatBbFrameType_t GetBbFrameType() const
Get BB frame type.
SatEnums class is for simplifying the use of enumerators in the satellite module.
static SatModcod_t GetModcodFromName(const std::string name)
static void GetAvailableBbFrameTypes(std::vector< SatBbFrameType_t > &frameTypes)
SatBbFrameType_t
BB frame type used in DVB-S2 FWD link.
SatModcod_t
Modulation scheme and coding rate for DVB-S2.
static void GetAvailableModcodsFwdLinkS2X(std::vector< SatModcod_t > &modcods, SatEnums::BbFrameUsageMode_t type, bool pilots)
static std::string GetModcodTypeName(SatModcod_t modcod)
@ SHORT_AND_NORMAL_FRAMES
SHORT_AND_NORMAL_FRAMES.
@ SHORT_FRAMES
SHORT_FRAMES.
@ NORMAL_FRAMES
NORMAL_FRAMES.
DvbVersion_t
The scheduling algorithm used to fill the BBFrames.
static void GetAvailableModcodsFwdLink(std::vector< SatModcod_t > &modcods)
static SatEnums::SatBbFrameType_t GetFrameTypeS2X(SatEnums::SatModcod_t modcod)
static T DbToLinear(T db)
Converts decibels to linear.
static uint32_t GetModulatedBits(SatEnums::SatModcod_t modcod)
Get the modulated bits of a certain MODCOD.
static double GetCodingRate(SatEnums::SatModcod_t modcod)
Gets the coding rate of a certain MODCOD.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
const uint32_t payloadConf[7][3]
1st col = modulated bits 2nd col = payload slots per normal frame 3rnd col = payload slots per short ...