mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-23 12:48:49 -04:00
Channel analyzer NG: fixed GUI displays (mainly spectrum) when channel sample rate changes. Some code cleanup
This commit is contained in:
parent
e6b2d12236
commit
32e225263e
@ -48,7 +48,6 @@ ChannelAnalyzerNG::ChannelAnalyzerNG(DeviceSourceAPI *deviceAPI) :
|
||||
|
||||
m_channelizer = new DownChannelizer(this);
|
||||
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
||||
connect(m_channelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelizerInputSampleRateChanged()));
|
||||
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
||||
|
||||
apply(true);
|
||||
@ -118,12 +117,6 @@ void ChannelAnalyzerNG::stop()
|
||||
{
|
||||
}
|
||||
|
||||
void ChannelAnalyzerNG::channelizerInputSampleRateChanged()
|
||||
{
|
||||
MsgReportChannelSampleRateChanged *msg = MsgReportChannelSampleRateChanged::create();
|
||||
getMessageQueueToGUI()->push(msg);
|
||||
}
|
||||
|
||||
bool ChannelAnalyzerNG::handleMessage(const Message& cmd)
|
||||
{
|
||||
qDebug() << "ChannelAnalyzerNG::handleMessage: " << cmd.getIdentifier();
|
||||
@ -140,7 +133,14 @@ bool ChannelAnalyzerNG::handleMessage(const Message& cmd)
|
||||
<< " frequencyOffset: " << m_config.m_frequency;
|
||||
|
||||
apply();
|
||||
return true;
|
||||
|
||||
if (getMessageQueueToGUI())
|
||||
{
|
||||
MsgReportChannelSampleRateChanged *msg = MsgReportChannelSampleRateChanged::create();
|
||||
getMessageQueueToGUI()->push(msg);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (MsgConfigureChannelizer::match(cmd))
|
||||
{
|
||||
|
@ -145,9 +145,6 @@ public:
|
||||
|
||||
static const QString m_channelID;
|
||||
|
||||
private slots:
|
||||
void channelizerInputSampleRateChanged();
|
||||
|
||||
private:
|
||||
|
||||
struct Config
|
||||
|
@ -156,12 +156,50 @@ bool ChannelAnalyzerNGGUI::deserialize(const QByteArray& data)
|
||||
}
|
||||
}
|
||||
|
||||
bool ChannelAnalyzerNGGUI::handleMessage(const Message& message __attribute__((unused)))
|
||||
bool ChannelAnalyzerNGGUI::handleMessage(const Message& message)
|
||||
{
|
||||
if (ChannelAnalyzerNG::MsgReportChannelSampleRateChanged::match(message))
|
||||
{
|
||||
setNewFinalRate(m_spanLog2);
|
||||
applySettings();
|
||||
int newRate = getRequestedChannelSampleRate() / (1<<m_spanLog2);
|
||||
|
||||
int newBW = (ui->BW->value() * 100 * m_rate) / newRate;
|
||||
int newLC = (ui->lowCut->value() * 100 * m_rate) / newRate;
|
||||
|
||||
qDebug() << "ChannelAnalyzerNGGUI::handleMessage: MsgReportChannelSampleRateChanged:"
|
||||
<< " newRate: " << newRate
|
||||
<< " newBW: " << newBW
|
||||
<< " newLC: " << newLC;
|
||||
|
||||
m_rate = newRate;
|
||||
|
||||
ui->BW->setValue(newBW/100);
|
||||
ui->lowCut->setValue(newLC/100);
|
||||
|
||||
blockApplySettings(true);
|
||||
setFiltersUIBoundaries();
|
||||
blockApplySettings(false);
|
||||
|
||||
if (ui->ssb->isChecked())
|
||||
{
|
||||
QString s = QString::number(ui->BW->value()/10.0, 'f', 1);
|
||||
ui->BWText->setText(tr("%1k").arg(s));
|
||||
}
|
||||
else
|
||||
{
|
||||
QString s = QString::number(ui->BW->value()/5.0, 'f', 1); // BW = value * 2
|
||||
ui->BWText->setText(tr("%1k").arg(s));
|
||||
}
|
||||
|
||||
QString s = QString::number(ui->lowCut->value()/10.0, 'f', 1);
|
||||
ui->lowCutText->setText(tr("%1k").arg(s));
|
||||
|
||||
s = QString::number(m_rate/1000.0, 'f', 1);
|
||||
ui->spanText->setText(tr("%1 kS/s").arg(s));
|
||||
|
||||
ui->glScope->setSampleRate(m_rate);
|
||||
|
||||
displayBandwidth(); // sets ui->glSpectrum sample rate
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -183,7 +221,7 @@ void ChannelAnalyzerNGGUI::handleInputMessages()
|
||||
}
|
||||
}
|
||||
|
||||
void ChannelAnalyzerNGGUI::viewChanged()
|
||||
void ChannelAnalyzerNGGUI::channelMarkerChanged()
|
||||
{
|
||||
applySettings();
|
||||
}
|
||||
@ -195,13 +233,6 @@ void ChannelAnalyzerNGGUI::tick()
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
}
|
||||
|
||||
//void ChannelAnalyzerNGGUI::channelizerInputSampleRateChanged()
|
||||
//{
|
||||
// //ui->channelSampleRate->setValueRange(7, 2000U, m_channelAnalyzer->getInputSampleRate());
|
||||
// setNewFinalRate(m_spanLog2);
|
||||
// applySettings();
|
||||
//}
|
||||
|
||||
void ChannelAnalyzerNGGUI::on_channelSampleRate_changed(quint64 value)
|
||||
{
|
||||
ui->channelSampleRate->setValueRange(7, 2000U, m_channelAnalyzer->getInputSampleRate());
|
||||
@ -236,7 +267,7 @@ void ChannelAnalyzerNGGUI::on_deltaFrequency_changed(qint64 value)
|
||||
|
||||
void ChannelAnalyzerNGGUI::on_BW_valueChanged(int value)
|
||||
{
|
||||
m_channelMarker.setBandwidth(value * 100 * 2);
|
||||
// m_channelMarker.setBandwidth(value * 100 * 2);
|
||||
|
||||
if (ui->ssb->isChecked())
|
||||
{
|
||||
@ -250,7 +281,7 @@ void ChannelAnalyzerNGGUI::on_BW_valueChanged(int value)
|
||||
}
|
||||
|
||||
displayBandwidth();
|
||||
on_lowCut_valueChanged(m_channelMarker.getLowCutoff()/100);
|
||||
on_lowCut_valueChanged(m_channelMarker.getLowCutoff()/100); // does apply settings
|
||||
}
|
||||
|
||||
int ChannelAnalyzerNGGUI::getEffectiveLowCutoff(int lowCutoff)
|
||||
@ -280,11 +311,13 @@ int ChannelAnalyzerNGGUI::getEffectiveLowCutoff(int lowCutoff)
|
||||
|
||||
void ChannelAnalyzerNGGUI::on_lowCut_valueChanged(int value)
|
||||
{
|
||||
blockApplySettings(true);
|
||||
int lowCutoff = getEffectiveLowCutoff(value * 100);
|
||||
m_channelMarker.setLowCutoff(lowCutoff);
|
||||
QString s = QString::number(lowCutoff/1000.0, 'f', 1);
|
||||
ui->lowCutText->setText(tr("%1k").arg(s));
|
||||
ui->lowCut->setValue(lowCutoff/100);
|
||||
blockApplySettings(false);
|
||||
applySettings();
|
||||
}
|
||||
|
||||
@ -398,7 +431,7 @@ ChannelAnalyzerNGGUI::ChannelAnalyzerNGGUI(PluginAPI* pluginAPI, DeviceUISet *de
|
||||
m_channelMarker.setCenterFrequency(0);
|
||||
m_channelMarker.setVisible(true);
|
||||
|
||||
connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(viewChanged()));
|
||||
connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged()));
|
||||
|
||||
m_deviceUISet->registerRxChannelInstance(ChannelAnalyzerNG::m_channelID, this);
|
||||
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
||||
@ -448,6 +481,7 @@ bool ChannelAnalyzerNGGUI::setNewFinalRate(int spanLog2)
|
||||
displayBandwidth();
|
||||
|
||||
ui->glScope->setSampleRate(m_rate);
|
||||
ui->glSpectrum->setSampleRate(m_rate);
|
||||
m_scopeVis->setSampleRate(m_rate);
|
||||
|
||||
return true;
|
||||
@ -455,6 +489,10 @@ bool ChannelAnalyzerNGGUI::setNewFinalRate(int spanLog2)
|
||||
|
||||
void ChannelAnalyzerNGGUI::displayBandwidth()
|
||||
{
|
||||
blockApplySettings(true);
|
||||
|
||||
m_channelMarker.setBandwidth(ui->BW->value() * 100 * 2);
|
||||
|
||||
if (ui->ssb->isChecked())
|
||||
{
|
||||
if (ui->BW->value() < 0)
|
||||
@ -468,8 +506,9 @@ void ChannelAnalyzerNGGUI::displayBandwidth()
|
||||
ui->glSpectrum->setLsbDisplay(false);
|
||||
}
|
||||
|
||||
ui->glSpectrum->setCenterFrequency(m_rate/4);
|
||||
m_channelMarker.setLowCutoff(ui->lowCut->value()*100);
|
||||
ui->glSpectrum->setSampleRate(m_rate/2);
|
||||
ui->glSpectrum->setCenterFrequency(m_rate/4);
|
||||
ui->glSpectrum->setSsbSpectrum(true);
|
||||
}
|
||||
else
|
||||
@ -482,7 +521,7 @@ void ChannelAnalyzerNGGUI::displayBandwidth()
|
||||
ui->glSpectrum->setSsbSpectrum(false);
|
||||
}
|
||||
|
||||
|
||||
blockApplySettings(false);
|
||||
}
|
||||
|
||||
void ChannelAnalyzerNGGUI::setFiltersUIBoundaries()
|
||||
@ -541,14 +580,8 @@ void ChannelAnalyzerNGGUI::applySettings()
|
||||
m_channelMarker.getCenterFrequency());
|
||||
m_channelAnalyzer->getInputMessageQueue()->push(msg);
|
||||
|
||||
// m_channelizer->configure(m_channelizer->getInputMessageQueue(),
|
||||
// //m_channelizer->getInputSampleRate(),
|
||||
// getRequestedChannelSampleRate(),
|
||||
// m_channelMarker.getCenterFrequency());
|
||||
|
||||
m_channelAnalyzer->configure(m_channelAnalyzer->getInputMessageQueue(),
|
||||
//m_channelizer->getInputSampleRate(), // TODO: specify required channel sample rate
|
||||
sampleRate, // TODO: specify required channel sample rate
|
||||
sampleRate,
|
||||
ui->BW->value() * 100.0,
|
||||
ui->lowCut->value() * 100.0,
|
||||
m_spanLog2,
|
||||
|
@ -26,8 +26,6 @@
|
||||
class PluginAPI;
|
||||
class DeviceUISet;
|
||||
class BasebandSampleSink;
|
||||
class ThreadedBasebandSampleSink;
|
||||
class DownChannelizer;
|
||||
class ChannelAnalyzerNG;
|
||||
class SpectrumScopeNGComboVis;
|
||||
class SpectrumVis;
|
||||
@ -56,8 +54,7 @@ public:
|
||||
virtual bool handleMessage(const Message& message);
|
||||
|
||||
private slots:
|
||||
void viewChanged();
|
||||
// void channelizerInputSampleRateChanged();
|
||||
void channelMarkerChanged();
|
||||
void on_deltaFrequency_changed(qint64 value);
|
||||
void on_channelSampleRate_changed(quint64 value);
|
||||
void on_useRationalDownsampler_toggled(bool checked);
|
||||
@ -81,8 +78,6 @@ private:
|
||||
int m_spanLog2;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
|
||||
// ThreadedBasebandSampleSink* m_threadedChannelizer;
|
||||
// DownChannelizer* m_channelizer;
|
||||
ChannelAnalyzerNG* m_channelAnalyzer;
|
||||
SpectrumScopeNGComboVis* m_spectrumScopeComboVis;
|
||||
SpectrumVis* m_spectrumVis;
|
||||
|
Loading…
Reference in New Issue
Block a user