mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-16 13:21:50 -05:00
Handle SSB variable span in the spectrum GUI but not in the spectrum itseld still based on 6kHz bandwodth
This commit is contained in:
parent
bec01078d9
commit
85610c6a86
@ -33,6 +33,7 @@ SSBDemod::SSBDemod(AudioFifo* audioFifo, SampleSink* sampleSink) :
|
|||||||
m_Bandwidth = 5000;
|
m_Bandwidth = 5000;
|
||||||
m_LowCutoff = 300;
|
m_LowCutoff = 300;
|
||||||
m_volume = 2.0;
|
m_volume = 2.0;
|
||||||
|
m_spanLog2 = 3;
|
||||||
m_sampleRate = 96000;
|
m_sampleRate = 96000;
|
||||||
m_frequency = 0;
|
m_frequency = 0;
|
||||||
m_nco.setFreq(m_frequency, m_sampleRate);
|
m_nco.setFreq(m_frequency, m_sampleRate);
|
||||||
@ -53,9 +54,9 @@ SSBDemod::~SSBDemod()
|
|||||||
if (SSBFilter) delete SSBFilter;
|
if (SSBFilter) delete SSBFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSBDemod::configure(MessageQueue* messageQueue, Real Bandwidth, Real LowCutoff, Real volume)
|
void SSBDemod::configure(MessageQueue* messageQueue, Real Bandwidth, Real LowCutoff, Real volume, int spanLog2)
|
||||||
{
|
{
|
||||||
Message* cmd = MsgConfigureSSBDemod::create(Bandwidth, LowCutoff, volume);
|
Message* cmd = MsgConfigureSSBDemod::create(Bandwidth, LowCutoff, volume, spanLog2);
|
||||||
cmd->submit(messageQueue, this);
|
cmd->submit(messageQueue, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +118,7 @@ bool SSBDemod::handleMessage(Message* cmd)
|
|||||||
|
|
||||||
if(DSPSignalNotification::match(cmd)) {
|
if(DSPSignalNotification::match(cmd)) {
|
||||||
DSPSignalNotification* signal = (DSPSignalNotification*)cmd;
|
DSPSignalNotification* signal = (DSPSignalNotification*)cmd;
|
||||||
qDebug("%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset());
|
//fprintf(stderr, "%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset());
|
||||||
m_sampleRate = signal->getSampleRate();
|
m_sampleRate = signal->getSampleRate();
|
||||||
m_nco.setFreq(-signal->getFrequencyOffset(), m_sampleRate);
|
m_nco.setFreq(-signal->getFrequencyOffset(), m_sampleRate);
|
||||||
m_interpolator.create(16, m_sampleRate, m_Bandwidth);
|
m_interpolator.create(16, m_sampleRate, m_Bandwidth);
|
||||||
@ -151,6 +152,9 @@ bool SSBDemod::handleMessage(Message* cmd)
|
|||||||
|
|
||||||
m_volume = cfg->getVolume();
|
m_volume = cfg->getVolume();
|
||||||
m_volume *= m_volume * 0.1;
|
m_volume *= m_volume * 0.1;
|
||||||
|
|
||||||
|
m_spanLog2 = cfg->getSpanLog2();
|
||||||
|
|
||||||
cmd->completed();
|
cmd->completed();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -35,7 +35,7 @@ public:
|
|||||||
SSBDemod(AudioFifo* audioFifo, SampleSink* sampleSink);
|
SSBDemod(AudioFifo* audioFifo, SampleSink* sampleSink);
|
||||||
~SSBDemod();
|
~SSBDemod();
|
||||||
|
|
||||||
void configure(MessageQueue* messageQueue, Real Bandwidth, Real LowCutoff, Real volume);
|
void configure(MessageQueue* messageQueue, Real Bandwidth, Real LowCutoff, Real volume, int spanLog2);
|
||||||
|
|
||||||
void feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly);
|
void feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly);
|
||||||
void start();
|
void start();
|
||||||
@ -50,22 +50,25 @@ private:
|
|||||||
Real getBandwidth() const { return m_Bandwidth; }
|
Real getBandwidth() const { return m_Bandwidth; }
|
||||||
Real getLoCutoff() const { return m_LowCutoff; }
|
Real getLoCutoff() const { return m_LowCutoff; }
|
||||||
Real getVolume() const { return m_volume; }
|
Real getVolume() const { return m_volume; }
|
||||||
|
int getSpanLog2() const { return m_spanLog2; }
|
||||||
|
|
||||||
static MsgConfigureSSBDemod* create(Real Bandwidth, Real LowCutoff, Real volume)
|
static MsgConfigureSSBDemod* create(Real Bandwidth, Real LowCutoff, Real volume, int spanLog2)
|
||||||
{
|
{
|
||||||
return new MsgConfigureSSBDemod(Bandwidth, LowCutoff, volume);
|
return new MsgConfigureSSBDemod(Bandwidth, LowCutoff, volume, spanLog2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Real m_Bandwidth;
|
Real m_Bandwidth;
|
||||||
Real m_LowCutoff;
|
Real m_LowCutoff;
|
||||||
Real m_volume;
|
Real m_volume;
|
||||||
|
int m_spanLog2;
|
||||||
|
|
||||||
MsgConfigureSSBDemod(Real Bandwidth, Real LowCutoff, Real volume) :
|
MsgConfigureSSBDemod(Real Bandwidth, Real LowCutoff, Real volume, int spanLog2) :
|
||||||
Message(),
|
Message(),
|
||||||
m_Bandwidth(Bandwidth),
|
m_Bandwidth(Bandwidth),
|
||||||
m_LowCutoff(LowCutoff),
|
m_LowCutoff(LowCutoff),
|
||||||
m_volume(volume)
|
m_volume(volume),
|
||||||
|
m_spanLog2(spanLog2)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -78,6 +81,7 @@ private:
|
|||||||
Real m_Bandwidth;
|
Real m_Bandwidth;
|
||||||
Real m_LowCutoff;
|
Real m_LowCutoff;
|
||||||
Real m_volume;
|
Real m_volume;
|
||||||
|
int m_spanLog2;
|
||||||
int m_undersampleCount;
|
int m_undersampleCount;
|
||||||
int m_sampleRate;
|
int m_sampleRate;
|
||||||
int m_frequency;
|
int m_frequency;
|
||||||
|
@ -210,7 +210,8 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
|
|||||||
ui(new Ui::SSBDemodGUI),
|
ui(new Ui::SSBDemodGUI),
|
||||||
m_pluginAPI(pluginAPI),
|
m_pluginAPI(pluginAPI),
|
||||||
m_basicSettingsShown(false),
|
m_basicSettingsShown(false),
|
||||||
m_rate(6000)
|
m_rate(6000),
|
||||||
|
m_spanLog2(3)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
@ -264,18 +265,23 @@ bool SSBDemodGUI::setNewRate(int spanLog2)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_spanLog2 = spanLog2;
|
||||||
m_rate = 48000 / (1<<spanLog2);
|
m_rate = 48000 / (1<<spanLog2);
|
||||||
|
|
||||||
if (ui->BW->value() < -m_rate/100) {
|
if (ui->BW->value() < -m_rate/100) {
|
||||||
ui->BW->setValue(-m_rate/100);
|
ui->BW->setValue(-m_rate/100);
|
||||||
|
m_channelMarker->setBandwidth(-m_rate*2);
|
||||||
} else if (ui->BW->value() > m_rate/100) {
|
} else if (ui->BW->value() > m_rate/100) {
|
||||||
ui->BW->setValue(m_rate/100);
|
ui->BW->setValue(m_rate/100);
|
||||||
|
m_channelMarker->setBandwidth(m_rate*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ui->lowCut->value() < -m_rate/100) {
|
if (ui->lowCut->value() < -m_rate/100) {
|
||||||
ui->lowCut->setValue(-m_rate/100);
|
ui->lowCut->setValue(-m_rate/100);
|
||||||
|
m_channelMarker->setLowCutoff(-m_rate);
|
||||||
} else if (ui->lowCut->value() > m_rate/100) {
|
} else if (ui->lowCut->value() > m_rate/100) {
|
||||||
ui->lowCut->setValue(m_rate/100);
|
ui->lowCut->setValue(m_rate/100);
|
||||||
|
m_channelMarker->setLowCutoff(m_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->BW->setMinimum(-m_rate/100);
|
ui->BW->setMinimum(-m_rate/100);
|
||||||
@ -286,6 +292,9 @@ bool SSBDemodGUI::setNewRate(int spanLog2)
|
|||||||
QString s = QString::number(m_rate/1000.0, 'f', 1);
|
QString s = QString::number(m_rate/1000.0, 'f', 1);
|
||||||
ui->spanText->setText(tr("%1k").arg(s));
|
ui->spanText->setText(tr("%1k").arg(s));
|
||||||
|
|
||||||
|
ui->glSpectrum->setCenterFrequency(m_rate/2);
|
||||||
|
ui->glSpectrum->setSampleRate(m_rate);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +309,8 @@ void SSBDemodGUI::applySettings()
|
|||||||
m_ssbDemod->configure(m_threadedSampleSink->getMessageQueue(),
|
m_ssbDemod->configure(m_threadedSampleSink->getMessageQueue(),
|
||||||
ui->BW->value() * 100.0,
|
ui->BW->value() * 100.0,
|
||||||
ui->lowCut->value() * 100.0,
|
ui->lowCut->value() * 100.0,
|
||||||
ui->volume->value() / 10.0 );
|
ui->volume->value() / 10.0,
|
||||||
|
m_spanLog2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSBDemodGUI::leaveEvent(QEvent*)
|
void SSBDemodGUI::leaveEvent(QEvent*)
|
||||||
|
@ -50,6 +50,7 @@ private:
|
|||||||
ChannelMarker* m_channelMarker;
|
ChannelMarker* m_channelMarker;
|
||||||
bool m_basicSettingsShown;
|
bool m_basicSettingsShown;
|
||||||
int m_rate;
|
int m_rate;
|
||||||
|
int m_spanLog2;
|
||||||
|
|
||||||
AudioFifo* m_audioFifo;
|
AudioFifo* m_audioFifo;
|
||||||
ThreadedSampleSink* m_threadedSampleSink;
|
ThreadedSampleSink* m_threadedSampleSink;
|
||||||
|
Loading…
Reference in New Issue
Block a user