diff --git a/plugins/channelmimo/interferometer/interferometer.cpp b/plugins/channelmimo/interferometer/interferometer.cpp index d952ea558..55485e3e8 100644 --- a/plugins/channelmimo/interferometer/interferometer.cpp +++ b/plugins/channelmimo/interferometer/interferometer.cpp @@ -22,7 +22,6 @@ #include #include "device/deviceapi.h" -#include "dsp/downchannelizer.h" #include "dsp/hbfilterchainconverter.h" #include "dsp/dspcommands.h" @@ -181,25 +180,19 @@ bool Interferometer::handleMessage(const Message& cmd) m_deviceSampleRate = notif.getSampleRate(); calculateFrequencyOffset(); // This is when device sample rate changes - // Notify sink of input sample rate change + // Notify baseband sink of input sample rate change InterferometerBaseband::MsgSignalNotification *sig = InterferometerBaseband::MsgSignalNotification::create( m_deviceSampleRate, notif.getCenterFrequency(), notif.getIndex() ); qDebug() << "Interferometer::handleMessage: DSPMIMOSignalNotification: push to sink"; m_basbandSink->getInputMessageQueue()->push(sig); - // Redo the channelizer stuff with the new sample rate to re-synchronize everything - InterferometerBaseband::MsgConfigureChannelizer *msg = InterferometerBaseband::MsgConfigureChannelizer::create( - m_settings.m_log2Decim, - m_settings.m_filterChainHash); - m_basbandSink->getInputMessageQueue()->push(msg); - - if (m_guiMessageQueue) + if (getMessageQueueToGUI()) { qDebug() << "Interferometer::handleMessage: DSPMIMOSignalNotification: push to GUI"; MsgBasebandNotification *msg = MsgBasebandNotification::create( notif.getSampleRate(), notif.getCenterFrequency()); - m_guiMessageQueue->push(msg); + getMessageQueueToGUI()->push(msg); } } diff --git a/plugins/channelmimo/interferometer/interferometerbaseband.cpp b/plugins/channelmimo/interferometer/interferometerbaseband.cpp index 770f58da3..dd3c3b555 100644 --- a/plugins/channelmimo/interferometer/interferometerbaseband.cpp +++ b/plugins/channelmimo/interferometer/interferometerbaseband.cpp @@ -18,7 +18,8 @@ #include #include -#include "dsp/downchannelizer.h" +#include "dsp/downsamplechannelizer.h" +#include "dsp/basebandsamplesink.h" #include "dsp/dspcommands.h" #include "interferometerbaseband.h" @@ -40,7 +41,7 @@ InterferometerBaseband::InterferometerBaseband(int fftSize) : for (int i = 0; i < 2; i++) { m_sinks[i].setStreamIndex(i); - m_channelizers[i] = new DownChannelizer(&m_sinks[i]); + m_channelizers[i] = new DownSampleChannelizer(&m_sinks[i]); m_sizes[i] = 0; } @@ -130,7 +131,7 @@ void InterferometerBaseband::handleData() void InterferometerBaseband::processFifo(const std::vector& data, unsigned int ibegin, unsigned int iend) { for (unsigned int stream = 0; stream < 2; stream++) { - m_channelizers[stream]->feed(data[stream].begin() + ibegin, data[stream].begin() + iend, false); + m_channelizers[stream]->feed(data[stream].begin() + ibegin, data[stream].begin() + iend); } run(); @@ -200,9 +201,7 @@ bool InterferometerBaseband::handleMessage(const Message& cmd) for (int i = 0; i < 2; i++) { - m_channelizers[i]->set(m_channelizers[i]->getInputMessageQueue(), - log2Decim, - filterChainHash); + m_channelizers[i]->setDecimation(log2Decim, filterChainHash); m_sinks[i].reset(); } @@ -210,6 +209,7 @@ bool InterferometerBaseband::handleMessage(const Message& cmd) } else if (MsgSignalNotification::match(cmd)) { + QMutexLocker mutexLocker(&m_mutex); MsgSignalNotification& cfg = (MsgSignalNotification&) cmd; int inputSampleRate = cfg.getInputSampleRate(); qint64 centerFrequency = cfg.getCenterFrequency(); @@ -222,14 +222,15 @@ bool InterferometerBaseband::handleMessage(const Message& cmd) if (streamIndex < 2) { - DSPSignalNotification *notif = new DSPSignalNotification(inputSampleRate, centerFrequency); - m_channelizers[streamIndex]->getInputMessageQueue()->push(notif); + m_channelizers[streamIndex]->setBasebandSampleRate(inputSampleRate); + m_sinks[streamIndex].reset(); } return true; } else if (MsgConfigureCorrelation::match(cmd)) { + QMutexLocker mutexLocker(&m_mutex); MsgConfigureCorrelation& cfg = (MsgConfigureCorrelation&) cmd; InterferometerSettings::CorrelationType correlationType = cfg.getCorrelationType(); diff --git a/plugins/channelmimo/interferometer/interferometerbaseband.h b/plugins/channelmimo/interferometer/interferometerbaseband.h index f61655018..cb6474562 100644 --- a/plugins/channelmimo/interferometer/interferometerbaseband.h +++ b/plugins/channelmimo/interferometer/interferometerbaseband.h @@ -21,12 +21,12 @@ #include #include -//#include "dsp/samplesinkvector.h" #include "dsp/samplemififo.h" +#include "util/messagequeue.h" #include "interferometerstreamsink.h" #include "interferometercorr.h" -class DownChannelizer; +class DownSampleChannelizer; class BasebandSampleSink; class InterferometerBaseband : public QObject @@ -120,7 +120,7 @@ private: std::vector m_vbegin; int m_sizes[2]; InterferometerStreamSink m_sinks[2]; - DownChannelizer *m_channelizers[2]; + DownSampleChannelizer *m_channelizers[2]; BasebandSampleSink *m_spectrumSink; BasebandSampleSink *m_scopeSink; MessageQueue m_inputMessageQueue; //!< Queue for asynchronous inbound communication diff --git a/plugins/channelmimo/interferometer/interferometerstreamsink.cpp b/plugins/channelmimo/interferometer/interferometerstreamsink.cpp index ea58cbf23..118d5c31b 100644 --- a/plugins/channelmimo/interferometer/interferometerstreamsink.cpp +++ b/plugins/channelmimo/interferometer/interferometerstreamsink.cpp @@ -18,31 +18,20 @@ #include #include -#include "dsp/downchannelizer.h" - #include "interferometerstreamsink.h" InterferometerStreamSink::InterferometerStreamSink() : m_streamIndex(0), m_dataSize(0), m_bufferSize(0), - m_dataStart(0), - m_sampleRate(48000), - m_settingsMutex(QMutex::Recursive) + m_dataStart(0) {} InterferometerStreamSink::~InterferometerStreamSink() {} -void InterferometerStreamSink::start() -{} - -void InterferometerStreamSink::stop() -{} - -void InterferometerStreamSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly) +void InterferometerStreamSink::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end) { - QMutexLocker mutexLocker(&m_settingsMutex); m_dataSize = (end - begin) + m_dataStart; if (m_dataSize > m_bufferSize) @@ -54,28 +43,7 @@ void InterferometerStreamSink::feed(const SampleVector::const_iterator& begin, c std::copy(begin, end, m_data.begin() + m_dataStart); } -bool InterferometerStreamSink::handleMessage(const Message& cmd) -{ - if (DownChannelizer::MsgChannelizerNotification::match(cmd)) - { - DownChannelizer::MsgChannelizerNotification& notif = (DownChannelizer::MsgChannelizerNotification&) cmd; - - qDebug() << "InterferometerStreamSink::handleMessage: MsgChannelizerNotification:" - << " streamIndex: " << m_streamIndex - << " inputSampleRate: " << notif.getSampleRate() - << " inputFrequencyOffset: " << notif.getFrequencyOffset(); - m_sampleRate = notif.getSampleRate(); - - return true; - } - else - { - return false; - } -} - void InterferometerStreamSink::reset() { - QMutexLocker mutexLocker(&m_settingsMutex); m_dataStart = 0; } diff --git a/plugins/channelmimo/interferometer/interferometerstreamsink.h b/plugins/channelmimo/interferometer/interferometerstreamsink.h index 9572e524b..804cba5e2 100644 --- a/plugins/channelmimo/interferometer/interferometerstreamsink.h +++ b/plugins/channelmimo/interferometer/interferometerstreamsink.h @@ -18,21 +18,16 @@ #ifndef SDRBASE_INTERFEROMETERSTREAMSINK_H_ #define SDRBASE_INTERFEROMETERSTREAMSINK_H_ -#include - -#include "dsp/basebandsamplesink.h" +#include "dsp/channelsamplesink.h" -class InterferometerStreamSink : public BasebandSampleSink +class InterferometerStreamSink : public ChannelSampleSink { public: InterferometerStreamSink(); virtual ~InterferometerStreamSink(); - virtual void start(); - virtual void stop(); - virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); - virtual bool handleMessage(const Message& cmd); //!< Processing of a message. Returns true if message has actually been processed + virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end); void reset(); unsigned int getStreamIndex() const { return m_streamIndex; } @@ -48,10 +43,8 @@ private: int m_bufferSize; int m_dataStart; - int m_sampleRate; uint32_t m_log2Decim; uint32_t m_filterChainHash; - QMutex m_settingsMutex; };