From c3242d618f58e9bf9e6600cf106367169c403fd5 Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 9 May 2018 21:50:41 +0200 Subject: [PATCH] Benchmarking: added inf/sup decimators test --- plugins/channelrx/demodnfm/nfmdemodgui.cpp | 2 +- plugins/channelrx/demodnfm/nfmplugin.cpp | 2 +- sdrbench/mainbench.cpp | 92 +++++++++++++++++++++- sdrbench/mainbench.h | 4 +- sdrbench/parserbench.cpp | 6 +- sdrbench/parserbench.h | 4 +- 6 files changed, 101 insertions(+), 9 deletions(-) diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index 753a222da..3f4ba6f45 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -77,7 +77,7 @@ bool NFMDemodGUI::handleMessage(const Message& message) { if (NFMDemod::MsgReportCTCSSFreq::match(message)) { - qDebug("NFMDemodGUI::handleMessage: NFMDemod::MsgReportCTCSSFreq"); + //qDebug("NFMDemodGUI::handleMessage: NFMDemod::MsgReportCTCSSFreq"); NFMDemod::MsgReportCTCSSFreq& report = (NFMDemod::MsgReportCTCSSFreq&) message; setCtcssFreq(report.getFrequency()); //qDebug("NFMDemodGUI::handleMessage: MsgReportCTCSSFreq: %f", report.getFrequency()); diff --git a/plugins/channelrx/demodnfm/nfmplugin.cpp b/plugins/channelrx/demodnfm/nfmplugin.cpp index f47b5e63e..928dcc072 100644 --- a/plugins/channelrx/demodnfm/nfmplugin.cpp +++ b/plugins/channelrx/demodnfm/nfmplugin.cpp @@ -9,7 +9,7 @@ const PluginDescriptor NFMPlugin::m_pluginDescriptor = { QString("NFM Demodulator"), - QString("3.14.5"), + QString("3.14.6"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/sdrbench/mainbench.cpp b/sdrbench/mainbench.cpp index 8e26c5a51..ab33f5d9b 100644 --- a/sdrbench/mainbench.cpp +++ b/sdrbench/mainbench.cpp @@ -49,6 +49,10 @@ void MainBench::run() if (m_parser.getTestType() == ParserBench::TestDecimatorsII) { testDecimateII(); + } else if (m_parser.getTestType() == ParserBench::TestDecimatorsInfII) { + testDecimateII(ParserBench::TestDecimatorsInfII); + } else if (m_parser.getTestType() == ParserBench::TestDecimatorsSupII) { + testDecimateII(ParserBench::TestDecimatorsSupII); } else if (m_parser.getTestType() == ParserBench::TestDecimatorsIF) { testDecimateIF(); } else if (m_parser.getTestType() == ParserBench::TestDecimatorsFI) { @@ -62,7 +66,7 @@ void MainBench::run() emit finished(); } -void MainBench::testDecimateII() +void MainBench::testDecimateII(ParserBench::TestType testType) { QElapsedTimer timer; qint64 nsecs = 0; @@ -78,9 +82,25 @@ void MainBench::testDecimateII() for (uint32_t i = 0; i < m_parser.getRepetition(); i++) { - timer.start(); - decimateII(buf, m_parser.getNbSamples()*2); - nsecs += timer.nsecsElapsed(); + switch (testType) + { + case ParserBench::TestDecimatorsInfII: + timer.start(); + decimateInfII(buf, m_parser.getNbSamples()*2); + nsecs += timer.nsecsElapsed(); + break; + case ParserBench::TestDecimatorsSupII: + timer.start(); + decimateSupII(buf, m_parser.getNbSamples()*2); + nsecs += timer.nsecsElapsed(); + break; + case ParserBench::TestDecimatorsII: + default: + timer.start(); + decimateII(buf, m_parser.getNbSamples()*2); + nsecs += timer.nsecsElapsed(); + break; + } } printResults("MainBench::testDecimateII", nsecs); @@ -202,6 +222,70 @@ void MainBench::decimateII(const qint16* buf, int len) } } +void MainBench::decimateInfII(const qint16* buf, int len) +{ + SampleVector::iterator it = m_convertBuffer.begin(); + + switch (m_parser.getLog2Factor()) + { + case 0: + m_decimatorsII.decimate1(&it, buf, len); + break; + case 1: + m_decimatorsII.decimate2_inf(&it, buf, len); + break; + case 2: + m_decimatorsII.decimate4_inf(&it, buf, len); + break; + case 3: + m_decimatorsII.decimate8_inf(&it, buf, len); + break; + case 4: + m_decimatorsII.decimate16_inf(&it, buf, len); + break; + case 5: + m_decimatorsII.decimate32_inf(&it, buf, len); + break; + case 6: + m_decimatorsII.decimate64_inf(&it, buf, len); + break; + default: + break; + } +} + +void MainBench::decimateSupII(const qint16* buf, int len) +{ + SampleVector::iterator it = m_convertBuffer.begin(); + + switch (m_parser.getLog2Factor()) + { + case 0: + m_decimatorsII.decimate1(&it, buf, len); + break; + case 1: + m_decimatorsII.decimate2_sup(&it, buf, len); + break; + case 2: + m_decimatorsII.decimate4_sup(&it, buf, len); + break; + case 3: + m_decimatorsII.decimate8_sup(&it, buf, len); + break; + case 4: + m_decimatorsII.decimate16_sup(&it, buf, len); + break; + case 5: + m_decimatorsII.decimate32_sup(&it, buf, len); + break; + case 6: + m_decimatorsII.decimate64_sup(&it, buf, len); + break; + default: + break; + } +} + void MainBench::decimateIF(const qint16* buf, int len) { FSampleVector::iterator it = m_convertBufferF.begin(); diff --git a/sdrbench/mainbench.h b/sdrbench/mainbench.h index beb17e5fd..2bd419cab 100644 --- a/sdrbench/mainbench.h +++ b/sdrbench/mainbench.h @@ -47,11 +47,13 @@ signals: void finished(); private: - void testDecimateII(); + void testDecimateII(ParserBench::TestType testType = ParserBench::TestDecimatorsII); void testDecimateIF(); void testDecimateFI(); void testDecimateFF(); void decimateII(const qint16 *buf, int len); + void decimateInfII(const qint16 *buf, int len); + void decimateSupII(const qint16 *buf, int len); void decimateIF(const qint16 *buf, int len); void decimateFI(const float *buf, int len); void decimateFF(const float *buf, int len); diff --git a/sdrbench/parserbench.cpp b/sdrbench/parserbench.cpp index 9c8444008..2d7eae974 100644 --- a/sdrbench/parserbench.cpp +++ b/sdrbench/parserbench.cpp @@ -118,8 +118,12 @@ ParserBench::TestType ParserBench::getTestType() const return TestDecimatorsFI; } else if (m_testStr == "decimateff") { return TestDecimatorsFF; - }else if (m_testStr == "decimateif") { + } else if (m_testStr == "decimateif") { return TestDecimatorsIF; + } else if (m_testStr == "decimateinfii") { + return TestDecimatorsInfII; + } else if (m_testStr == "decimatesupii") { + return TestDecimatorsSupII; } else { return TestDecimatorsII; } diff --git a/sdrbench/parserbench.h b/sdrbench/parserbench.h index 473f54bc4..b06d5f473 100644 --- a/sdrbench/parserbench.h +++ b/sdrbench/parserbench.h @@ -29,7 +29,9 @@ public: TestDecimatorsII, TestDecimatorsIF, TestDecimatorsFI, - TestDecimatorsFF + TestDecimatorsFF, + TestDecimatorsInfII, + TestDecimatorsSupII } TestType; ParserBench();