Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(580)

Unified Diff: src/nist/test/test-nist-parabolic-3d-antenna.cc

Issue 326890043: Public Safety Communication modeling tools based on ns-3
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/nist/test/test-nist-3gpp-validation.cc ('k') | src/nist/test/test-nist-phy-error-model.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/nist/test/test-nist-parabolic-3d-antenna.cc
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/nist/test/test-nist-parabolic-3d-antenna.cc
@@ -0,0 +1,201 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This software was developed at the National Institute of Standards and
+ * Technology by employees of the Federal Government in the course of
+ * their official duties. Pursuant to titleElement 17 Section 105 of the United
+ * States Code this software is not subject to copyright protection and
+ * is in the public domain.
+ * NIST assumes no responsibility whatsoever for its use by other parties,
+ * and makes no guarantees, expressed or implied, about its quality,
+ * reliability, or any other characteristic.
+
+ * We would appreciate acknowledgement if the software is used.
+
+ * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
+ * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
+ * FROM THE USE OF THIS SOFTWARE.
+ *
+ * Modified by: NIST
+ */
+
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/double.h>
+#include <ns3/nist-parabolic-3d-antenna-model.h>
+#include <ns3/simulator.h>
+#include <cmath>
+#include <string>
+#include <iostream>
+#include <sstream>
+
+
+NS_LOG_COMPONENT_DEFINE ("TestNistParabolic3dAntennaModel");
+
+using namespace ns3;
+
+enum NistParabolic3dAntennaModelGainTestCondition {
+ EQUAL = 0,
+ LESSTHAN = 1
+};
+
+class NistParabolic3dAntennaModelTestCase : public TestCase
+{
+public:
+ static std::string BuildNameString (Angles a, double hb, double o, double hg, double vb, double e, double m, double vg);
+ NistParabolic3dAntennaModelTestCase (Angles a, double hb, double o, double hg, double vb, double e, double m, double vg, double expectedGainDb, NistParabolic3dAntennaModelGainTestCondition cond);
+
+
+private:
+ virtual void DoRun (void);
+
+ Angles m_a;
+ double m_hb;
+ double m_o;
+ double m_hg;
+ double m_vb;
+ double m_e;
+ double m_m;
+ double m_vg;
+ double m_expectedGain;
+ NistParabolic3dAntennaModelGainTestCondition m_cond;
+};
+
+std::string NistParabolic3dAntennaModelTestCase::BuildNameString (Angles a, double hb, double o, double hg, double vb, double e, double m, double vg)
+{
+ std::ostringstream oss;
+ oss << "theta=" << a.theta << " , phi=" << a.phi
+ << ", horizontal beamdwidth=" << hb << " deg"
+ << ", orientation=" << o
+ << ", horizontal maxAttenuation=" << hg << " dB"
+ << ", vertical beamwidth=" << vb << " deg"
+ << ", electrical tilt= " << e << " deg"
+ << ", mechanical tilt= " << m << " deg"
+ << ", vertical maxAttenuation=" << vb << " dB"
+;
+ return oss.str ();
+}
+
+
+NistParabolic3dAntennaModelTestCase::NistParabolic3dAntennaModelTestCase (Angles a, double hb, double o, double hg, double vb, double e, double m, double vg, double expectedGainDb, NistParabolic3dAntennaModelGainTestCondition cond)
+ : TestCase (BuildNameString (a, hb, o, hg, vb, e, m, vg)),
+ m_a (a),
+ m_hb (hb),
+ m_o (o),
+ m_hg (hg),
+ m_vb (vb),
+ m_e (e),
+ m_m (m),
+ m_vg (vg),
+ m_expectedGain (expectedGainDb),
+ m_cond (cond)
+{
+}
+
+void
+NistParabolic3dAntennaModelTestCase::DoRun ()
+{
+ NS_LOG_FUNCTION (this << BuildNameString (m_a, m_hb, m_o, m_hg, m_vb, m_e, m_m, m_vg));
+
+ Ptr<NistParabolic3dAntennaModel> a = CreateObject<NistParabolic3dAntennaModel> ();
+ a->SetAttribute ("HorizontalBeamwidth", DoubleValue (m_hb));
+ a->SetAttribute ("Orientation", DoubleValue (m_o));
+ a->SetAttribute ("MaxHorizontalAttenuation", DoubleValue (m_hg));
+ a->SetAttribute ("VerticalBeamwidth", DoubleValue (m_vb));
+ a->SetAttribute ("ElectricalTilt", DoubleValue (m_e));
+ a->SetAttribute ("MechanicalTilt", DoubleValue (m_m));
+ a->SetAttribute ("MaxVerticalAttenuation", DoubleValue (m_vg));
+ double actualGain = a->GetGainDb (m_a);
+ switch (m_cond)
+ {
+ case EQUAL:
+ NS_TEST_EXPECT_MSG_EQ_TOL (actualGain, m_expectedGain, 0.001, "wrong value of the radiation pattern");
+ break;
+ case LESSTHAN:
+ NS_TEST_EXPECT_MSG_LT (actualGain, m_expectedGain, "gain higher than expected");
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+
+class NistParabolic3dAntennaModelTestSuite : public TestSuite
+{
+public:
+ NistParabolic3dAntennaModelTestSuite ();
+};
+
+NistParabolic3dAntennaModelTestSuite::NistParabolic3dAntennaModelTestSuite ()
+ : TestSuite ("parabolic-3d-antenna-model", UNIT)
+{
+
+ // with a 60 deg beamwidth, gain is -20dB at +-77.460 degrees from boresight
+ // testing horizontal plane
+ // phi, theta, h beamwidth, orientation, h maxAttn, v beamwidth, etilt, mtilt, v maxAttn, expectedGain, condition
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (30), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-30), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-90), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (90), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (100), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (150), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (180), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-100), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-150), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-180), DegreesToRadians(90)), 60, 0, 25, 10, 0, 0, 20, -25, EQUAL), TestCase::QUICK);
+
+ // with a 60 deg beamwidth, gain is -10dB at +-54.772 degrees from boresight
+ // test positive orientation
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (60), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (90), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (30), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-30), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (150), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (160), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (210), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (240), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-40), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-90), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-120), DegreesToRadians(90)), 60, 60, 15, 10, 0, 0, 20, -15, EQUAL), TestCase::QUICK);
+
+ // test negative orientation and different beamwidths
+ // with a 80 deg beamwidth, gain is -20dB at +- 73.030 degrees from boresight
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-150), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-110), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-190), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-70), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (92), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (-30), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (60), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (90), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (90), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (30), DegreesToRadians(90)), 80, -150, 10, 10, 0, 0, 20, -10, EQUAL), TestCase::QUICK);
+
+ // testing vertical plane
+ // phi, theta, h beamwidth, orientation, h maxAttn, v beamwidth, etilt, mtilt, v maxAttn, expectedGain, condition
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (90)), 60, 0, 25, 10, 0, 0, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (85)), 60, 0, 25, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (95)), 60, 0, 25, 10, 0, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (0)), 60, 0, 25, 10, 0, 0, 20, -20, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (180)), 60, 0, 25, 10, 0, 0, 20, -20, EQUAL), TestCase::QUICK);
+
+ // testing tilt
+
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (95)), 60, 0, 25, 10, 5, 0, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (95)), 60, 0, 25, 10, 0, 5, 20, 0, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (90)), 60, 0, 25, 10, 5, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (90)), 60, 0, 25, 10, 0, 5, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (100)), 60, 0, 25, 10, 5, 0, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (100)), 60, 0, 25, 10, 0, 5, 20, -3, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (0)), 60, 0, 25, 10, 5, 0, 20, -20, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (0)), 60, 0, 25, 10, 0, 5, 20, -20, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (180)), 60, 0, 25, 10, 5, 0, 20, -20, EQUAL), TestCase::QUICK);
+ AddTestCase (new NistParabolic3dAntennaModelTestCase (Angles (DegreesToRadians (0), DegreesToRadians (180)), 60, 0, 25, 10, 0, 5, 20, -20, EQUAL), TestCase::QUICK);
+
+
+};
+
+static NistParabolic3dAntennaModelTestSuite staticNistParabolic3dAntennaModelTestSuiteInstance;
« no previous file with comments | « src/nist/test/test-nist-3gpp-validation.cc ('k') | src/nist/test/test-nist-phy-error-model.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b