Use specific message to communicate between channelizer and demodulator

This commit is contained in:
f4exb 2015-08-19 22:12:52 +02:00
parent 60a8946ce4
commit 582ce24c62
13 changed files with 62 additions and 42 deletions

View File

@ -4,6 +4,7 @@
#include <list> #include <list>
#include "dsp/samplesink.h" #include "dsp/samplesink.h"
#include "util/export.h" #include "util/export.h"
#include "util/message.h"
class MessageQueue; class MessageQueue;
class IntHalfbandFilter; class IntHalfbandFilter;
@ -11,6 +12,24 @@ class IntHalfbandFilter;
class SDRANGELOVE_API Channelizer : public SampleSink { class SDRANGELOVE_API Channelizer : public SampleSink {
Q_OBJECT Q_OBJECT
public: public:
class SDRANGELOVE_API MsgChannelizerNotification : public Message {
MESSAGE_CLASS_DECLARATION
public:
MsgChannelizerNotification(int samplerate, qint64 frequencyOffset) :
Message(),
m_sampleRate(samplerate),
m_frequencyOffset(frequencyOffset)
{ }
int getSampleRate() const { return m_sampleRate; }
qint64 getFrequencyOffset() const { return m_frequencyOffset; }
private:
int m_sampleRate;
qint64 m_frequencyOffset;
};
Channelizer(SampleSink* sampleSink); Channelizer(SampleSink* sampleSink);
virtual ~Channelizer(); virtual ~Channelizer();

View File

@ -153,7 +153,6 @@ private:
AudioFifo* m_audioFifo; AudioFifo* m_audioFifo;
}; };
/*
class SDRANGELOVE_API DSPConfigureSpectrumVis : public Message { class SDRANGELOVE_API DSPConfigureSpectrumVis : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -173,7 +172,7 @@ private:
int m_fftSize; int m_fftSize;
int m_overlapPercent; int m_overlapPercent;
FFTWindow::Function m_window; FFTWindow::Function m_window;
};*/ };
class SDRANGELOVE_API DSPConfigureCorrection : public Message { class SDRANGELOVE_API DSPConfigureCorrection : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
@ -237,18 +236,18 @@ class SDRANGELOVE_API DSPSignalNotification : public Message {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION
public: public:
DSPSignalNotification(int samplerate, qint64 frequencyOffset) : DSPSignalNotification(int samplerate, qint64 centerFrequency) :
Message(), Message(),
m_sampleRate(samplerate), m_sampleRate(samplerate),
m_frequencyOffset(frequencyOffset) m_centerFrequency(centerFrequency)
{ } { }
int getSampleRate() const { return m_sampleRate; } int getSampleRate() const { return m_sampleRate; }
qint64 getFrequencyOffset() const { return m_frequencyOffset; } qint64 getCenterFrequency() const { return m_centerFrequency; }
private: private:
int m_sampleRate; int m_sampleRate;
qint64 m_frequencyOffset; qint64 m_centerFrequency;
}; };
class SDRANGELOVE_API DSPConfigureChannelizer : public Message { class SDRANGELOVE_API DSPConfigureChannelizer : public Message {

View File

@ -21,7 +21,7 @@
#include <stdio.h> #include <stdio.h>
#include <complex.h> #include <complex.h>
#include "audio/audiooutput.h" #include "audio/audiooutput.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
#include "dsp/pidcontroller.h" #include "dsp/pidcontroller.h"
MESSAGE_CLASS_DEFINITION(AMDemod::MsgConfigureAMDemod, Message) MESSAGE_CLASS_DEFINITION(AMDemod::MsgConfigureAMDemod, Message)
@ -176,16 +176,16 @@ bool AMDemod::handleMessage(const Message& cmd)
{ {
qDebug() << "AMDemod::handleMessage"; qDebug() << "AMDemod::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputSampleRate = notif.getSampleRate();
m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset();
apply(); apply();
qDebug() << " - DSPSignalNotification:" qDebug() << "AMDemod::handleMessage: MsgChannelizerNotification:"
<< " m_inputSampleRate: " << m_config.m_inputSampleRate << " m_inputSampleRate: " << m_config.m_inputSampleRate
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset;
@ -212,7 +212,7 @@ bool AMDemod::handleMessage(const Message& cmd)
} }
else else
{ {
if(m_sampleSink != 0) if(m_sampleSink != 0) // FIXME: for dependent sample sink - unused for this demod
{ {
return m_sampleSink->handleMessage(cmd); return m_sampleSink->handleMessage(cmd);
} }

View File

@ -20,7 +20,7 @@
#include <QDebug> #include <QDebug>
#include <stdio.h> #include <stdio.h>
#include "audio/audiooutput.h" #include "audio/audiooutput.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
#include "chanalyzer.h" #include "chanalyzer.h"
@ -127,14 +127,14 @@ bool ChannelAnalyzer::handleMessage(const Message& cmd)
qDebug() << "ChannelAnalyzer::handleMessage"; qDebug() << "ChannelAnalyzer::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_sampleRate = notif.getSampleRate(); m_sampleRate = notif.getSampleRate();
m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate);
qDebug() << " - DSPSignalNotification: m_sampleRate: " << m_sampleRate qDebug() << "ChannelAnalyzer::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate
<< " frequencyOffset: " << notif.getFrequencyOffset(); << " frequencyOffset: " << notif.getFrequencyOffset();
return true; return true;

View File

@ -20,7 +20,7 @@
#include <QDebug> #include <QDebug>
#include <stdio.h> #include <stdio.h>
#include "lorademod.h" #include "lorademod.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
#include "lorabits.h" #include "lorabits.h"
@ -279,16 +279,17 @@ bool LoRaDemod::handleMessage(const Message& cmd)
{ {
qDebug() << "LoRaDemod::handleMessage"; qDebug() << "LoRaDemod::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_sampleRate = notif.getSampleRate(); m_sampleRate = notif.getSampleRate();
m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate);
m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9); m_interpolator.create(16, m_sampleRate, m_Bandwidth/1.9);
m_sampleDistanceRemain = m_sampleRate / m_Bandwidth; m_sampleDistanceRemain = m_sampleRate / m_Bandwidth;
qDebug() << " DSPSignalNotification: m_sampleRate: " << m_sampleRate; qDebug() << "LoRaDemod::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate
<< " frequencyOffset: " << notif.getFrequencyOffset();
return true; return true;
} }

View File

@ -22,7 +22,7 @@
#include "nfmdemod.h" #include "nfmdemod.h"
#include "nfmdemodgui.h" #include "nfmdemodgui.h"
#include "audio/audiooutput.h" #include "audio/audiooutput.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
#include "dsp/pidcontroller.h" #include "dsp/pidcontroller.h"
#include "dsp/dspengine.h" #include "dsp/dspengine.h"
@ -256,16 +256,16 @@ bool NFMDemod::handleMessage(const Message& cmd)
{ {
qDebug() << "NFMDemod::handleMessage"; qDebug() << "NFMDemod::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputSampleRate = notif.getSampleRate();
m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset();
apply(); apply();
qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_config.m_inputSampleRate qDebug() << "NFMDemod::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_config.m_inputSampleRate
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset;
return true; return true;

View File

@ -21,7 +21,7 @@
#include <stdio.h> #include <stdio.h>
#include "ssbdemod.h" #include "ssbdemod.h"
#include "audio/audiooutput.h" #include "audio/audiooutput.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
MESSAGE_CLASS_DEFINITION(SSBDemod::MsgConfigureSSBDemod, Message) MESSAGE_CLASS_DEFINITION(SSBDemod::MsgConfigureSSBDemod, Message)
@ -149,16 +149,16 @@ bool SSBDemod::handleMessage(const Message& cmd)
qDebug() << "SSBDemod::handleMessage"; qDebug() << "SSBDemod::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_sampleRate = notif.getSampleRate(); m_sampleRate = notif.getSampleRate();
m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate); m_nco.setFreq(-notif.getFrequencyOffset(), m_sampleRate);
m_interpolator.create(16, m_sampleRate, m_Bandwidth); m_interpolator.create(16, m_sampleRate, m_Bandwidth);
m_sampleDistanceRemain = m_sampleRate / 48000.0; m_sampleDistanceRemain = m_sampleRate / 48000.0;
qDebug() << " - DSPSignalNotification: m_sampleRate: " << m_sampleRate qDebug() << "SSBDemod::handleMessage: MsgChannelizerNotification: m_sampleRate: " << m_sampleRate
<< " frequencyOffset" << notif.getFrequencyOffset(); << " frequencyOffset" << notif.getFrequencyOffset();
return true; return true;

View File

@ -19,7 +19,7 @@
#include <QThread> #include <QThread>
#include "tcpsrc.h" #include "tcpsrc.h"
#include "tcpsrcgui.h" #include "tcpsrcgui.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConfigure, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConfigure, Message)
MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message) MESSAGE_CLASS_DEFINITION(TCPSrc::MsgTCPSrcConnection, Message)
@ -162,16 +162,16 @@ bool TCPSrc::handleMessage(const Message& cmd)
{ {
qDebug() << "TCPSrc::handleMessage"; qDebug() << "TCPSrc::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_inputSampleRate = notif.getSampleRate(); m_inputSampleRate = notif.getSampleRate();
m_nco.setFreq(-notif.getFrequencyOffset(), m_inputSampleRate); m_nco.setFreq(-notif.getFrequencyOffset(), m_inputSampleRate);
m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0);
m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_inputSampleRate qDebug() << "TCPSrc::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_inputSampleRate
<< " frequencyOffset: " << notif.getFrequencyOffset(); << " frequencyOffset: " << notif.getFrequencyOffset();
return true; return true;

View File

@ -20,7 +20,7 @@
#include <stdio.h> #include <stdio.h>
#include <complex.h> #include <complex.h>
#include "audio/audiooutput.h" #include "audio/audiooutput.h"
#include "dsp/dspcommands.h" #include "dsp/channelizer.h"
#include "dsp/pidcontroller.h" #include "dsp/pidcontroller.h"
#include "wfmdemod.h" #include "wfmdemod.h"
@ -163,15 +163,15 @@ bool WFMDemod::handleMessage(const Message& cmd)
{ {
qDebug() << "WFMDemod::handleMessage"; qDebug() << "WFMDemod::handleMessage";
if (DSPSignalNotification::match(cmd)) if (Channelizer::MsgChannelizerNotification::match(cmd))
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) cmd; Channelizer::MsgChannelizerNotification& notif = (Channelizer::MsgChannelizerNotification&) cmd;
m_config.m_inputSampleRate = notif.getSampleRate(); m_config.m_inputSampleRate = notif.getSampleRate();
m_config.m_inputFrequencyOffset = notif.getFrequencyOffset(); m_config.m_inputFrequencyOffset = notif.getFrequencyOffset();
apply(); apply();
qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_config.m_inputSampleRate qDebug() << "WFMDemod::handleMessage: MsgChannelizerNotification: m_inputSampleRate: " << m_config.m_inputSampleRate
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset; << " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset;
return true; return true;

View File

@ -4,6 +4,8 @@
#include <QDebug> #include <QDebug>
MESSAGE_CLASS_DEFINITION(Channelizer::MsgChannelizerNotification, Message)
Channelizer::Channelizer(SampleSink* sampleSink) : Channelizer::Channelizer(SampleSink* sampleSink) :
m_sampleSink(sampleSink), m_sampleSink(sampleSink),
m_inputSampleRate(10), m_inputSampleRate(10),
@ -83,8 +85,7 @@ bool Channelizer::handleMessage(const Message& cmd)
emit inputSampleRateChanged(); emit inputSampleRateChanged();
return true; return true;
} }
else else if (DSPConfigureChannelizer::match(cmd))
if (DSPConfigureChannelizer::match(cmd))
{ {
DSPConfigureChannelizer& chan = (DSPConfigureChannelizer&) cmd; DSPConfigureChannelizer& chan = (DSPConfigureChannelizer&) cmd;
m_requestedOutputSampleRate = chan.getSampleRate(); m_requestedOutputSampleRate = chan.getSampleRate();
@ -98,7 +99,7 @@ bool Channelizer::handleMessage(const Message& cmd)
if (m_sampleSink != NULL) if (m_sampleSink != NULL)
{ {
DSPSignalNotification notif(m_currentOutputSampleRate, m_currentCenterFrequency); MsgChannelizerNotification notif(m_currentOutputSampleRate, m_currentCenterFrequency);
m_sampleSink->handleMessage(notif); m_sampleSink->handleMessage(notif);
} }

View File

@ -651,7 +651,7 @@ void DSPEngine::handleSourceMessages()
// update DSP values // update DSP values
m_sampleRate = notif->getSampleRate(); m_sampleRate = notif->getSampleRate();
m_centerFrequency = notif->getFrequencyOffset(); m_centerFrequency = notif->getCenterFrequency();
qDebug() << "DSPEngine::handleSourceMessages: DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")"; qDebug() << "DSPEngine::handleSourceMessages: DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")";

View File

@ -89,7 +89,7 @@ bool FileSink::handleMessage(const Message& message)
{ {
DSPSignalNotification& notif = (DSPSignalNotification&) message; DSPSignalNotification& notif = (DSPSignalNotification&) message;
m_sampleRate = notif.getSampleRate(); m_sampleRate = notif.getSampleRate();
m_centerFrequency = notif.getFrequencyOffset(); m_centerFrequency = notif.getCenterFrequency();
qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_sampleRate qDebug() << " - DSPSignalNotification: m_inputSampleRate: " << m_sampleRate
<< " m_centerFrequency: " << m_centerFrequency; << " m_centerFrequency: " << m_centerFrequency;
return true; return true;

View File

@ -342,8 +342,8 @@ void MainWindow::handleDSPMessages()
{ {
DSPSignalNotification* notif = (DSPSignalNotification*) message; DSPSignalNotification* notif = (DSPSignalNotification*) message;
m_sampleRate = notif->getSampleRate(); m_sampleRate = notif->getSampleRate();
m_centerFrequency = notif->getFrequencyOffset(); m_centerFrequency = notif->getCenterFrequency();
qDebug("SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getFrequencyOffset()); qDebug("SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency());
updateCenterFreqDisplay(); updateCenterFreqDisplay();
updateSampleRate(); updateSampleRate();
qDebug() << "MainWindow::handleDSPMessages: forward to file sink"; qDebug() << "MainWindow::handleDSPMessages: forward to file sink";