mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-23 18:52:28 -04:00
SSB modulator: separate GUI and modulator phase 1
This commit is contained in:
parent
483cdfdcea
commit
0ee4e4040a
@ -24,6 +24,8 @@
|
|||||||
#include <dsp/upchannelizer.h>
|
#include <dsp/upchannelizer.h>
|
||||||
#include "dsp/dspengine.h"
|
#include "dsp/dspengine.h"
|
||||||
#include "dsp/pidcontroller.h"
|
#include "dsp/pidcontroller.h"
|
||||||
|
#include "dsp/threadedbasebandsamplesource.h"
|
||||||
|
#include "device/devicesinkapi.h"
|
||||||
#include "util/db.h"
|
#include "util/db.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(SSBMod::MsgConfigureSSBMod, Message)
|
MESSAGE_CLASS_DEFINITION(SSBMod::MsgConfigureSSBMod, Message)
|
||||||
@ -38,7 +40,8 @@ MESSAGE_CLASS_DEFINITION(SSBMod::MsgReportFileSourceStreamTiming, Message)
|
|||||||
const int SSBMod::m_levelNbSamples = 480; // every 10ms
|
const int SSBMod::m_levelNbSamples = 480; // every 10ms
|
||||||
const int SSBMod::m_ssbFftLen = 1024;
|
const int SSBMod::m_ssbFftLen = 1024;
|
||||||
|
|
||||||
SSBMod::SSBMod(BasebandSampleSink* sampleSink) :
|
SSBMod::SSBMod(DeviceSinkAPI *deviceAPI, BasebandSampleSink* sampleSink) :
|
||||||
|
m_deviceAPI(deviceAPI),
|
||||||
m_SSBFilter(0),
|
m_SSBFilter(0),
|
||||||
m_DSBFilter(0),
|
m_DSBFilter(0),
|
||||||
m_SSBFilterBuffer(0),
|
m_SSBFilterBuffer(0),
|
||||||
@ -60,6 +63,10 @@ SSBMod::SSBMod(BasebandSampleSink* sampleSink) :
|
|||||||
{
|
{
|
||||||
setObjectName("SSBMod");
|
setObjectName("SSBMod");
|
||||||
|
|
||||||
|
m_channelizer = new UpChannelizer(this);
|
||||||
|
m_threadedChannelizer = new ThreadedBasebandSampleSource(m_channelizer, this);
|
||||||
|
m_deviceAPI->addThreadedSource(m_threadedChannelizer);
|
||||||
|
|
||||||
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_settings.m_audioSampleRate, m_settings.m_bandwidth / m_settings.m_audioSampleRate, m_ssbFftLen);
|
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_settings.m_audioSampleRate, m_settings.m_bandwidth / m_settings.m_audioSampleRate, m_ssbFftLen);
|
||||||
m_DSBFilter = new fftfilt((2.0f * m_settings.m_bandwidth) / m_settings.m_audioSampleRate, 2 * m_ssbFftLen);
|
m_DSBFilter = new fftfilt((2.0f * m_settings.m_bandwidth) / m_settings.m_audioSampleRate, 2 * m_ssbFftLen);
|
||||||
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
||||||
@ -111,6 +118,10 @@ SSBMod::~SSBMod()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DSPEngine::instance()->removeAudioSource(&m_audioFifo);
|
DSPEngine::instance()->removeAudioSource(&m_audioFifo);
|
||||||
|
|
||||||
|
m_deviceAPI->removeThreadedSource(m_threadedChannelizer);
|
||||||
|
delete m_threadedChannelizer;
|
||||||
|
delete m_channelizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSBMod::pull(Sample& sample)
|
void SSBMod::pull(Sample& sample)
|
||||||
@ -535,6 +546,19 @@ bool SSBMod::handleMessage(const Message& cmd)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (MsgConfigureChannelizer::match(cmd))
|
||||||
|
{
|
||||||
|
MsgConfigureChannelizer& cfg = (MsgConfigureChannelizer&) cmd;
|
||||||
|
|
||||||
|
m_channelizer->configure(m_channelizer->getInputMessageQueue(),
|
||||||
|
cfg.getSampleRate(),
|
||||||
|
cfg.getCenterFrequency());
|
||||||
|
|
||||||
|
qDebug() << "SSBMod::handleMessage: MsgConfigureChannelizer: sampleRate: " << cfg.getSampleRate()
|
||||||
|
<< " centerFrequency: " << cfg.getCenterFrequency();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (MsgConfigureSSBMod::match(cmd))
|
else if (MsgConfigureSSBMod::match(cmd))
|
||||||
{
|
{
|
||||||
float band, lowCutoff;
|
float band, lowCutoff;
|
||||||
|
@ -35,6 +35,10 @@
|
|||||||
|
|
||||||
#include "ssbmodsettings.h"
|
#include "ssbmodsettings.h"
|
||||||
|
|
||||||
|
class DeviceSinkAPI;
|
||||||
|
class ThreadedBasebandSampleSource;
|
||||||
|
class UpChannelizer;
|
||||||
|
|
||||||
class SSBMod : public BasebandSampleSource {
|
class SSBMod : public BasebandSampleSource {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@ -222,7 +226,7 @@ public:
|
|||||||
|
|
||||||
//=================================================================
|
//=================================================================
|
||||||
|
|
||||||
SSBMod(BasebandSampleSink* sampleSink);
|
SSBMod(DeviceSinkAPI *deviceAPI, BasebandSampleSink* sampleSink);
|
||||||
~SSBMod();
|
~SSBMod();
|
||||||
|
|
||||||
virtual void pull(Sample& sample);
|
virtual void pull(Sample& sample);
|
||||||
@ -251,6 +255,9 @@ private:
|
|||||||
RSRunning
|
RSRunning
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DeviceSinkAPI* m_deviceAPI;
|
||||||
|
ThreadedBasebandSampleSource* m_threadedChannelizer;
|
||||||
|
UpChannelizer* m_channelizer;
|
||||||
SSBModSettings m_settings;
|
SSBModSettings m_settings;
|
||||||
|
|
||||||
NCOF m_carrierNco;
|
NCOF m_carrierNco;
|
||||||
|
@ -23,9 +23,7 @@
|
|||||||
#include "ssbmodgui.h"
|
#include "ssbmodgui.h"
|
||||||
|
|
||||||
#include "device/devicesinkapi.h"
|
#include "device/devicesinkapi.h"
|
||||||
#include "dsp/upchannelizer.h"
|
|
||||||
#include "dsp/spectrumvis.h"
|
#include "dsp/spectrumvis.h"
|
||||||
#include "dsp/threadedbasebandsamplesource.h"
|
|
||||||
#include "ui_ssbmodgui.h"
|
#include "ui_ssbmodgui.h"
|
||||||
#include "plugin/pluginapi.h"
|
#include "plugin/pluginapi.h"
|
||||||
#include "util/simpleserializer.h"
|
#include "util/simpleserializer.h"
|
||||||
@ -457,12 +455,8 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI, QWidget* pa
|
|||||||
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
|
connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked()));
|
||||||
|
|
||||||
m_spectrumVis = new SpectrumVis(ui->glSpectrum);
|
m_spectrumVis = new SpectrumVis(ui->glSpectrum);
|
||||||
m_ssbMod = new SSBMod(m_spectrumVis);
|
m_ssbMod = new SSBMod(m_deviceAPI, m_spectrumVis);
|
||||||
m_ssbMod->setMessageQueueToGUI(getInputMessageQueue());
|
m_ssbMod->setMessageQueueToGUI(getInputMessageQueue());
|
||||||
m_channelizer = new UpChannelizer(m_ssbMod);
|
|
||||||
m_threadedChannelizer = new ThreadedBasebandSampleSource(m_channelizer, this);
|
|
||||||
//m_pluginAPI->addThreadedSink(m_threadedChannelizer);
|
|
||||||
m_deviceAPI->addThreadedSource(m_threadedChannelizer);
|
|
||||||
|
|
||||||
resetToDefaults();
|
resetToDefaults();
|
||||||
|
|
||||||
@ -507,9 +501,6 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI, QWidget* pa
|
|||||||
SSBModGUI::~SSBModGUI()
|
SSBModGUI::~SSBModGUI()
|
||||||
{
|
{
|
||||||
m_deviceAPI->removeChannelInstance(this);
|
m_deviceAPI->removeChannelInstance(this);
|
||||||
m_deviceAPI->removeThreadedSource(m_threadedChannelizer);
|
|
||||||
delete m_threadedChannelizer;
|
|
||||||
delete m_channelizer;
|
|
||||||
delete m_ssbMod;
|
delete m_ssbMod;
|
||||||
delete m_spectrumVis;
|
delete m_spectrumVis;
|
||||||
delete ui;
|
delete ui;
|
||||||
@ -600,9 +591,9 @@ void SSBModGUI::applySettings(bool force)
|
|||||||
{
|
{
|
||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
{
|
{
|
||||||
m_channelizer->configure(m_channelizer->getInputMessageQueue(),
|
SSBMod::MsgConfigureChannelizer *msgChan = SSBMod::MsgConfigureChannelizer::create(
|
||||||
48000,
|
48000, m_settings.m_inputFrequencyOffset);
|
||||||
m_channelMarker.getCenterFrequency());
|
m_ssbMod->getInputMessageQueue()->push(msgChan);
|
||||||
|
|
||||||
SSBMod::MsgConfigureSSBMod *msg = SSBMod::MsgConfigureSSBMod::create(m_settings, force);
|
SSBMod::MsgConfigureSSBMod *msg = SSBMod::MsgConfigureSSBMod::create(m_settings, force);
|
||||||
m_ssbMod->getInputMessageQueue()->push(msg);
|
m_ssbMod->getInputMessageQueue()->push(msg);
|
||||||
|
@ -29,8 +29,6 @@
|
|||||||
class PluginAPI;
|
class PluginAPI;
|
||||||
class DeviceSinkAPI;
|
class DeviceSinkAPI;
|
||||||
|
|
||||||
class ThreadedBasebandSampleSource;
|
|
||||||
class UpChannelizer;
|
|
||||||
class SSBMod;
|
class SSBMod;
|
||||||
class SpectrumVis;
|
class SpectrumVis;
|
||||||
|
|
||||||
@ -102,8 +100,6 @@ private:
|
|||||||
bool m_doApplySettings;
|
bool m_doApplySettings;
|
||||||
int m_rate;
|
int m_rate;
|
||||||
|
|
||||||
ThreadedBasebandSampleSource* m_threadedChannelizer;
|
|
||||||
UpChannelizer* m_channelizer;
|
|
||||||
SpectrumVis* m_spectrumVis;
|
SpectrumVis* m_spectrumVis;
|
||||||
SSBMod* m_ssbMod;
|
SSBMod* m_ssbMod;
|
||||||
MovingAverage<double> m_channelPowerDbAvg;
|
MovingAverage<double> m_channelPowerDbAvg;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user