A Discrete-Event Network Simulator
API
lr-wpan-error-model.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 The Boeing Company
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: Gary Pei <guangyu.pei@boeing.com>
19  */
20 #include "lr-wpan-error-model.h"
21 #include <ns3/log.h>
22 
23 #include <cmath>
24 
25 namespace ns3 {
26 
27 NS_LOG_COMPONENT_DEFINE ("LrWpanErrorModel");
28 
29 NS_OBJECT_ENSURE_REGISTERED (LrWpanErrorModel);
30 
31 TypeId
33 {
34  static TypeId tid = TypeId ("ns3::LrWpanErrorModel")
35  .SetParent<Object> ()
36  .SetGroupName ("LrWpan")
37  .AddConstructor<LrWpanErrorModel> ()
38  ;
39  return tid;
40 }
41 
43 {
45  m_binomialCoefficients[1] = -16;
46  m_binomialCoefficients[2] = 120;
47  m_binomialCoefficients[3] = -560;
48  m_binomialCoefficients[4] = 1820;
49  m_binomialCoefficients[5] = -4368;
50  m_binomialCoefficients[6] = 8008;
51  m_binomialCoefficients[7] = -11440;
52  m_binomialCoefficients[8] = 12870;
53  m_binomialCoefficients[9] = -11440;
54  m_binomialCoefficients[10] = 8008;
55  m_binomialCoefficients[11] = -4368;
56  m_binomialCoefficients[12] = 1820;
57  m_binomialCoefficients[13] = -560;
58  m_binomialCoefficients[14] = 120;
59  m_binomialCoefficients[15] = -16;
60  m_binomialCoefficients[16] = 1;
61 }
62 
63 double
64 LrWpanErrorModel::GetChunkSuccessRate (double snr, uint32_t nbits) const
65 {
66  double ber = 0.0;
67 
68  for (uint32_t k = 2; k <= 16; k++)
69  {
70  ber += m_binomialCoefficients[k] * exp (20.0 * snr * (1.0 / k - 1.0));
71  }
72 
73  ber = ber * 8.0 / 15.0 / 16.0;
74 
75  ber = std::min (ber, 1.0);
76  double retval = pow (1.0 - ber, nbits);
77  return retval;
78 }
79 
80 } // namespace ns3
double GetChunkSuccessRate(double snr, uint32_t nbits) const
Return chunk success rate for given SNR.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:44
#define min(a, b)
Definition: 80211b.c:44
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
double m_binomialCoefficients[17]
Array of precalculated binomial coefficients.
static TypeId GetTypeId(void)
Get the type ID.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Model the error rate for IEEE 802.15.4 2.4 GHz AWGN channel for OQPSK the model description can be fo...
A base class which provides memory management and object aggregation.
Definition: object.h:87
a unique identifier for an interface.
Definition: type-id.h:58
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:904