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

Unified Diff: src/devices/spectrum/spectrum-interference-test.cc

Issue 230045: spectrum framework
Patch Set: revised code 2010-05-21 Created 13 years, 10 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
Index: src/devices/spectrum/spectrum-interference-test.cc
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/devices/spectrum/spectrum-interference-test.cc
@@ -0,0 +1,235 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 CTTC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Nicola Baldo <nbaldo@cttc.es>
+ */
+
+#include <ns3/object.h>
+#include <ns3/spectrum-interference.h>
+#include <ns3/spectrum-error-model.h>
+#include <ns3/log.h>
+#include <ns3/test.h>
+#include <ns3/simulator.h>
+#include <ns3/packet.h>
+#include <ns3/ptr.h>
+#include <iostream>
+#include <math.h>
+
+NS_LOG_COMPONENT_DEFINE ("SpectrumInterferenceTest");
+
+namespace ns3 {
+
+
+
+
+class SpectrumInterferenceTestCase : public TestCase
+{
+public:
+ SpectrumInterferenceTestCase (Ptr<SpectrumValue> s, uint32_t txBytes, bool rxCorrect, std::string name);
+ virtual ~SpectrumInterferenceTestCase ();
+ virtual bool DoRun (void);
+ void RetrieveTestResult (SpectrumInterference* si);
+
+private:
+ Ptr<SpectrumValue> m_s;
+ uint32_t m_txBytes;
+ uint32_t m_rxCorrectKnownOutcome;
+ bool m_error;
+ Ptr<const SpectrumModel> m_mySpectrumModel;
+};
+
+
+
+SpectrumInterferenceTestCase::SpectrumInterferenceTestCase (Ptr<SpectrumValue> s, uint32_t txBytes, bool rxCorrect, std::string name)
+ : TestCase (name),
+ m_s (s),
+ m_txBytes (txBytes),
+ m_rxCorrectKnownOutcome (rxCorrect),
+ m_mySpectrumModel (s->GetSpectrumModel ())
+{
+}
+
+SpectrumInterferenceTestCase::~SpectrumInterferenceTestCase ()
+{
+}
+
+
+
+bool
+SpectrumInterferenceTestCase::DoRun (void)
+{
+ Ptr<SpectrumValue> n = Create<SpectrumValue> (m_mySpectrumModel);
+ Ptr<SpectrumValue> i1 = Create<SpectrumValue> (m_mySpectrumModel);
+ Ptr<SpectrumValue> i2 = Create<SpectrumValue> (m_mySpectrumModel);
+ Ptr<SpectrumValue> i3 = Create<SpectrumValue> (m_mySpectrumModel);
+ Ptr<SpectrumValue> i4 = Create<SpectrumValue> (m_mySpectrumModel);
+
+
+ (*n)[0] = 5.000000000000e-19;
+ (*n)[1] = 4.545454545455e-19;
+
+ (*i1)[0] = 5.000000000000e-18;
+ (*i2)[0] = 5.000000000000e-16;
+ (*i3)[0] = 1.581138830084e-16;
+ (*i4)[0] = 7.924465962306e-17;
+ (*i1)[1] = 1.437398936440e-18;
+ (*i2)[1] = 5.722388235428e-16;
+ (*i3)[1] = 7.204059965732e-17;
+ (*i4)[1] = 5.722388235428e-17;
+
+
+ SpectrumInterference si;
+ si.SetErrorModel (CreateObject<ShannonSpectrumErrorModel> ());
+ si.SetNoisePowerSpectralDensity (n);
+
+ Time ts = Seconds (1);
+ Time ds = Seconds (1);
+ Time ti1 = Seconds (0);
+ Time di1 = Seconds (3);
+ Time ti2 = Seconds (0.7);
+ Time di2 = Seconds (1);
+ Time ti3 = Seconds (1.2);
+ Time di3 = Seconds (1);
+ Time ti4 = Seconds (1.5);
+ Time di4 = Seconds (0.1);
+
+ Simulator::Schedule (ts, &SpectrumInterference::AddSignal, &si, m_s, ds);
+ Simulator::Schedule (ti1, &SpectrumInterference::AddSignal, &si, i1, di1);
+ Simulator::Schedule (ti2, &SpectrumInterference::AddSignal, &si, i2, di2);
+ Simulator::Schedule (ti3, &SpectrumInterference::AddSignal, &si, i3, di3);
+ Simulator::Schedule (ti4, &SpectrumInterference::AddSignal, &si, i4, di4);
+
+ Ptr<Packet> p = Create<Packet> (m_txBytes);
+ Simulator::Schedule (ts, &SpectrumInterference::StartRx, &si, p, m_s);
+ Simulator::Schedule (ts + ds, &SpectrumInterferenceTestCase::RetrieveTestResult, this, &si);
+
+ Simulator::Run ();
+ // the above will return and after RetrieveTestResults have
+ // been called and after all signals have expired
+
+ return m_error;
+}
+
+
+
+void
+SpectrumInterferenceTestCase::RetrieveTestResult (SpectrumInterference* si)
+{
+
+ bool rxOk = si->EndRx ();
+ m_error = (m_rxCorrectKnownOutcome != rxOk);
+
+ std::ostringstream actualStream;
+ actualStream << rxOk;
+ std::ostringstream limitStream;
+ limitStream << m_rxCorrectKnownOutcome;
+
+ NS_LOG_LOGIC ("actual=" << actualStream.str () << " limit=" << limitStream.str ());
+
+ if (m_error)
+ {
+ UpdateErrorStatus (m_error);
+ ReportTestFailure (std::string ("wrong result"),
+ actualStream.str (),
+ limitStream.str (),
+ std::string ("no message"),
+ __FILE__, __LINE__);
+ }
+
+}
+
+
+
+class SpectrumInterferenceTestSuite : public TestSuite
+{
+public:
+ SpectrumInterferenceTestSuite ();
+};
+
+SpectrumInterferenceTestSuite::SpectrumInterferenceTestSuite ()
+ : TestSuite ("spectrum-interference", UNIT)
+{
+
+ NS_LOG_INFO ("creating SpectrumInterferenceTestSuite");
+
+ Ptr<const SpectrumModel> m;
+
+ Bands bands;
+ struct BandInfo bi;
+
+ bi.fl = 2.400e9;
+ bi.fc = 2.410e9;
+ bi.fh = 2.420e9;
+ bands.push_back (bi);
+
+ bi.fl = 2.420e9;
+ bi.fc = 2.431e9;
+ bi.fh = 2.442e9;
+ bands.push_back (bi);
+
+ m = Create<SpectrumModel> (bands);
+
+
+ double b; // max deliverable bytes
+
+ const double e = 1e-5; // max tolerated relative error for
+ // deliverable bytes
+
+ // Power Spectral Density of the signal of interest = [-46 -48] dBm;
+ Ptr<SpectrumValue> s1 = Create<SpectrumValue> (m);
+ (*s1)[0] = 1.255943215755e-15;
+ (*s1)[1] = 7.204059965732e-16;
+ b = 10067205.5632012;
+ AddTestCase (new SpectrumInterferenceTestCase (s1, 1, 1, "sdBm = [-46 -48] tx bytes: 1"));
+ AddTestCase (new SpectrumInterferenceTestCase (s1, round (b * 0.5), 1, "sdBm = [-46 -48] tx bytes: b*0.5"));
+ AddTestCase (new SpectrumInterferenceTestCase (s1, round (b * (1 - e)), 1, "sdBm = [-46 -48] tx bytes: b*(1-e)"));
+ AddTestCase (new SpectrumInterferenceTestCase (s1, round (b * (1 + e)), 0, "sdBm = [-46 -48] tx bytes: b*(1+e)"));
+ AddTestCase (new SpectrumInterferenceTestCase (s1, round (b * 1.5), 0, "sdBm = [-46 -48] tx bytes: b*1.5"));
+ AddTestCase (new SpectrumInterferenceTestCase (s1, 0xffffffff, 0, "sdBm = [-46 -48] tx bytes: 2^32-1"));
+
+ // Power Spectral Density of the signal of interest = [-63 -61] dBm;
+ Ptr<SpectrumValue> s2 = Create<SpectrumValue> (m);
+ (*s2)[0] = 2.505936168136e-17;
+ (*s2)[1] = 3.610582885110e-17;
+ b = 882401.591840728;
+ AddTestCase (new SpectrumInterferenceTestCase (s2, 1, 1, "sdBm = [-63 -61] tx bytes: 1"));
+ AddTestCase (new SpectrumInterferenceTestCase (s2, round (b * 0.5), 1, "sdBm = [-63 -61] tx bytes: b*0.5"));
+ AddTestCase (new SpectrumInterferenceTestCase (s2, round (b * (1 - e)), 1, "sdBm = [-63 -61] tx bytes: b*(1-e)"));
+ AddTestCase (new SpectrumInterferenceTestCase (s2, round (b * (1 + e)), 0, "sdBm = [-63 -61] tx bytes: b*(1+e)"));
+ AddTestCase (new SpectrumInterferenceTestCase (s2, round (b * 1.5), 0, "sdBm = [-63 -61] tx bytes: b*1.5"));
+ AddTestCase (new SpectrumInterferenceTestCase (s2, 0xffffffff, 0, "sdBm = [-63 -61] tx bytes: 2^32-1"));
+
+}
+
+
+
+
+
+
+} // namespace ns3
+
+
+using namespace ns3;
+
+int
+main (int argc, char** argv)
+{
+
+ SpectrumInterferenceTestSuite SpectrumInterferenceTestSuite;
+
+ return SpectrumInterferenceTestSuite.Run ();
+}

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