From 8750ca91602ea682a06dce0e8398ce2dbc43f7e1 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 13 Jul 2021 18:03:12 +0200 Subject: [PATCH] Pager demod: optimize feed samples to scope and set sample rate in scope GUI --- .../channelrx/demodpager/pagerdemodgui.cpp | 1 + .../channelrx/demodpager/pagerdemodsink.cpp | 19 ++++++++++++------- plugins/channelrx/demodpager/pagerdemodsink.h | 3 +++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/channelrx/demodpager/pagerdemodgui.cpp b/plugins/channelrx/demodpager/pagerdemodgui.cpp index a791c20ec..fea6c9a1b 100644 --- a/plugins/channelrx/demodpager/pagerdemodgui.cpp +++ b/plugins/channelrx/demodpager/pagerdemodgui.cpp @@ -463,6 +463,7 @@ PagerDemodGUI::PagerDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Bas m_scopeVis->setLiveRate(PagerDemodSettings::m_channelSampleRate); ui->glScope->connectTimer(MainCore::instance()->getMasterTimer()); ui->scopeGUI->setBuddies(m_scopeVis->getInputMessageQueue(), m_scopeVis, ui->glScope); + ui->scopeGUI->setSampleRate(PagerDemodSettings::m_channelSampleRate); ui->deltaFrequencyLabel->setText(QString("%1f").arg(QChar(0x94, 0x03))); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::GrayGold)); diff --git a/plugins/channelrx/demodpager/pagerdemodsink.cpp b/plugins/channelrx/demodpager/pagerdemodsink.cpp index 8ff13b661..27ddae207 100644 --- a/plugins/channelrx/demodpager/pagerdemodsink.cpp +++ b/plugins/channelrx/demodpager/pagerdemodsink.cpp @@ -49,7 +49,8 @@ PagerDemodSink::PagerDemodSink(PagerDemod *pagerDemod) : m_syncCount(75), m_batchNumber(0), m_wordCount(0), - m_addressValid(0) + m_addressValid(0), + m_sampleBufferIndex(0) { m_magsq = 0.0; @@ -58,6 +59,7 @@ PagerDemodSink::PagerDemodSink(PagerDemod *pagerDemod) : applySettings(m_settings, true); applyChannelSettings(m_channelSampleRate, m_channelFrequencyOffset, true); + m_sampleBuffer.resize(m_sampleBufferSize); } PagerDemodSink::~PagerDemodSink() @@ -68,12 +70,15 @@ void PagerDemodSink::sampleToScope(Complex sample) { if (m_scopeSink) { - ComplexVector m_sampleBuffer; - m_sampleBuffer.push_back(sample); - std::vector vbegin; - vbegin.push_back(m_sampleBuffer.begin()); - m_scopeSink->feed(vbegin, m_sampleBuffer.end() - m_sampleBuffer.begin()); - m_sampleBuffer.clear(); + m_sampleBuffer[m_sampleBufferIndex++] = sample; + + if (m_sampleBufferIndex == m_sampleBufferSize) + { + std::vector vbegin; + vbegin.push_back(m_sampleBuffer.begin()); + m_scopeSink->feed(vbegin, m_sampleBufferSize); + m_sampleBufferIndex = 0; + } } } diff --git a/plugins/channelrx/demodpager/pagerdemodsink.h b/plugins/channelrx/demodpager/pagerdemodsink.h index 9f15aded5..f63dec89c 100644 --- a/plugins/channelrx/demodpager/pagerdemodsink.h +++ b/plugins/channelrx/demodpager/pagerdemodsink.h @@ -140,6 +140,9 @@ private: QVector m_demodBuffer; int m_demodBufferFill; + ComplexVector m_sampleBuffer; + static const int m_sampleBufferSize = PagerDemodSettings::m_channelSampleRate / 20; // 50ms + int m_sampleBufferIndex; void processOneSample(Complex &ci); MessageQueue *getMessageQueueToChannel() { return m_messageQueueToChannel; }