From c59a3941118ef3cdbd78201548b327279c806c8b Mon Sep 17 00:00:00 2001 From: your name Date: Fri, 19 Mar 2021 18:36:29 -0500 Subject: [PATCH 1/2] hackrfinput - restore baseband filter Restore baseband filter setting. libhackrf automatically sets baseband filter when sample rate is set and it leads to a settings mismatch between gui and hardware. --- plugins/samplesource/hackrfinput/hackrfinput.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index a5d414529..e41a455bd 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -375,6 +375,12 @@ bool HackRFInput::applySettings(const HackRFInputSettings& settings, bool force) qDebug("HackRFInput::applySettings: sample rate set to %llu S/s", settings.m_devSampleRate); m_hackRFThread->setSamplerate(settings.m_devSampleRate); } + rc = (hackrf_error) hackrf_set_baseband_filter_bandwidth(m_dev, m_settings.m_bandwidth); // restore baseband bandwidth filter. libhackrf automatically sets baseband filter when sample rate is set. + if (rc != HACKRF_SUCCESS) { + qDebug("HackRFInput::applySettings: Restore baseband filter failed: %s", hackrf_error_name(rc)); + } else { + qDebug() << "HackRFInput:applySettings: Baseband BW filter restored to " << m_settings.m_bandwidth << " Hz"; + } } } } From be85e680e016384c85c5a6659ff20b4dbe1473c2 Mon Sep 17 00:00:00 2001 From: FuzzyCheese <23639418+FuzzyCheese@users.noreply.github.com> Date: Fri, 19 Mar 2021 23:50:56 -0500 Subject: [PATCH 2/2] hackrfinput - add auto bandpass filter selection Add button to auto select the bandpass filter based on the sample rate. It matches the automatic selection done by libhackrf when sample rate is changed. --- .../hackrfinput/hackrfinputgui.cpp | 21 ++++++ .../samplesource/hackrfinput/hackrfinputgui.h | 1 + .../hackrfinput/hackrfinputgui.ui | 68 +++++++++++-------- .../hackrfinput/hackrfinputsettings.cpp | 3 + .../hackrfinput/hackrfinputsettings.h | 1 + plugins/samplesource/hackrfinput/readme.md | 1 + 6 files changed, 66 insertions(+), 29 deletions(-) diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp index 22a463025..dda1e7139 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.cpp @@ -246,6 +246,7 @@ void HackRFInputGui::displaySettings() ui->LOppmText->setText(QString("%1").arg(QString::number(m_settings.m_LOppmTenths/10.0, 'f', 1))); ui->dcOffset->setChecked(m_settings.m_dcBlock); ui->iqImbalance->setChecked(m_settings.m_iqCorrection); + ui->autoBBF->setChecked(m_settings.m_autoBBF); displaySampleRate(); @@ -313,10 +314,23 @@ void HackRFInputGui::on_iqImbalance_toggled(bool checked) sendSettings(); } +void HackRFInputGui::on_autoBBF_toggled(bool checked) +{ + m_settings.m_autoBBF = checked; + if(checked){ + m_settings.m_bandwidth = hackrf_compute_baseband_filter_bw(m_settings.m_devSampleRate); + ui->bbFilter->blockSignals(true); + displaySettings(); + ui->bbFilter->blockSignals(false); + sendSettings(); + } +} + void HackRFInputGui::on_bbFilter_currentIndexChanged(int index) { int newBandwidth = HackRFBandwidths::getBandwidth(index); m_settings.m_bandwidth = newBandwidth * 1000; + ui->autoBBF->setChecked(false); sendSettings(); } @@ -346,6 +360,13 @@ void HackRFInputGui::on_sampleRate_changed(quint64 value) m_settings.m_devSampleRate <<= m_settings.m_log2Decim; } + if(m_settings.m_autoBBF){ + m_settings.m_bandwidth = hackrf_compute_baseband_filter_bw(m_settings.m_devSampleRate); + ui->bbFilter->blockSignals(true); + displaySettings(); + ui->bbFilter->blockSignals(false); + } + displayFcTooltip(); sendSettings(); } diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.h b/plugins/samplesource/hackrfinput/hackrfinputgui.h index 6abc95eaf..758837920 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.h +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.h @@ -88,6 +88,7 @@ private slots: void on_LOppm_valueChanged(int value); void on_dcOffset_toggled(bool checked); void on_iqImbalance_toggled(bool checked); + void on_autoBBF_toggled(bool checked); void on_biasT_stateChanged(int state); void on_decim_currentIndexChanged(int index); void on_fcPos_currentIndexChanged(int index); diff --git a/plugins/samplesource/hackrfinput/hackrfinputgui.ui b/plugins/samplesource/hackrfinput/hackrfinputgui.ui index 109107500..65d063e37 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputgui.ui +++ b/plugins/samplesource/hackrfinput/hackrfinputgui.ui @@ -215,6 +215,13 @@ 2 + + + + Auto + + + @@ -235,40 +242,17 @@ - - + + + + Bandpass Filter auto select + - Auto + BBF - - - Activate antenna bias tee - - - Qt::RightToLeft - - - Bias T - - - - - - - Extra LNA +14dB - - - Qt::RightToLeft - - - RF Amp - - - - Qt::Horizontal @@ -281,7 +265,33 @@ + + + + Activate antenna bias tee + + + Qt::RightToLeft + + + Bias T + + + + + + Extra LNA +14dB + + + Qt::RightToLeft + + + RF Amp + + + + diff --git a/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp b/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp index e6d837589..e7b14f65c 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputsettings.cpp @@ -39,6 +39,7 @@ void HackRFInputSettings::resetToDefaults() m_vgaGain = 16; m_dcBlock = false; m_iqCorrection = false; + m_autoBBF = true; m_devSampleRate = 2400000; m_transverterMode = false; m_transverterDeltaFrequency = 0; @@ -71,6 +72,7 @@ QByteArray HackRFInputSettings::serialize() const s.writeBool(18, m_transverterMode); s.writeS64(19, m_transverterDeltaFrequency); s.writeBool(20, m_iqOrder); + s.writeBool(21, m_autoBBF); return s.final(); } @@ -117,6 +119,7 @@ bool HackRFInputSettings::deserialize(const QByteArray& data) d.readBool(18, &m_transverterMode, false); d.readS64(19, &m_transverterDeltaFrequency, 0); d.readBool(20, &m_iqOrder, true); + d.readBool(21, &m_autoBBF, true); return true; } diff --git a/plugins/samplesource/hackrfinput/hackrfinputsettings.h b/plugins/samplesource/hackrfinput/hackrfinputsettings.h index e9e095c43..de756e03e 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputsettings.h +++ b/plugins/samplesource/hackrfinput/hackrfinputsettings.h @@ -40,6 +40,7 @@ struct HackRFInputSettings { bool m_lnaExt; bool m_dcBlock; bool m_iqCorrection; + bool m_autoBBF; bool m_transverterMode; qint64 m_transverterDeltaFrequency; bool m_iqOrder; diff --git a/plugins/samplesource/hackrfinput/readme.md b/plugins/samplesource/hackrfinput/readme.md index f21ed46b0..f256e06e9 100644 --- a/plugins/samplesource/hackrfinput/readme.md +++ b/plugins/samplesource/hackrfinput/readme.md @@ -44,6 +44,7 @@ These buttons control the local DSP auto correction options: - **DC**: auto remove DC component - **IQ**: auto make I/Q balance. The DC correction must be enabled for this to be effective. + - **BBF**: auto select bandpass filter setting. Compute best value depending on sample rate.

4: Bias tee