diff --git a/doc/img/NFMMod_plugin.png b/doc/img/NFMMod_plugin.png index c4bfd172b..ef15850d4 100644 Binary files a/doc/img/NFMMod_plugin.png and b/doc/img/NFMMod_plugin.png differ diff --git a/doc/img/NFMMod_plugin.xcf b/doc/img/NFMMod_plugin.xcf index 8f91438f4..ff9d5c343 100644 Binary files a/doc/img/NFMMod_plugin.xcf and b/doc/img/NFMMod_plugin.xcf differ diff --git a/doc/img/NFMdemod_plugin.png b/doc/img/NFMdemod_plugin.png index 350ed9356..930dda188 100644 Binary files a/doc/img/NFMdemod_plugin.png and b/doc/img/NFMdemod_plugin.png differ diff --git a/doc/img/NFMdemod_plugin.xcf b/doc/img/NFMdemod_plugin.xcf index 82fc47474..f509ec470 100644 Binary files a/doc/img/NFMdemod_plugin.xcf and b/doc/img/NFMdemod_plugin.xcf differ diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index 8568c2cba..0d3ad55f5 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -107,8 +107,10 @@ void NFMDemodGUI::on_deltaFrequency_changed(qint64 value) applySettings(); } -void NFMDemodGUI::on_channelSpacing_currentIndexChanged(int index) +void NFMDemodGUI::on_channelSpacingApply_clicked() { + int index = ui->channelSpacing->currentIndex(); + qDebug("NFMDemodGUI::on_channelSpacing_currentIndexChanged: %d", index); m_settings.m_rfBandwidth = NFMDemodSettings::getRFBW(index); m_settings.m_afBandwidth = NFMDemodSettings::getAFBW(index); m_settings.m_fmDeviation = 2.0 * NFMDemodSettings::getFMDev(index); @@ -120,7 +122,7 @@ void NFMDemodGUI::on_channelSpacing_currentIndexChanged(int index) ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); - ui->fmDevText->setText(QString("%1k").arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); ui->rfBW->blockSignals(false); ui->afBW->blockSignals(false); @@ -133,6 +135,12 @@ void NFMDemodGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_rfBandwidth = value * 100.0; m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); + + ui->channelSpacing->blockSignals(true); + ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); + ui->channelSpacing->update(); + ui->channelSpacing->blockSignals(false); + applySettings(); } @@ -145,7 +153,7 @@ void NFMDemodGUI::on_afBW_valueChanged(int value) void NFMDemodGUI::on_fmDev_valueChanged(int value) { - ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 200.0; applySettings(); } @@ -397,9 +405,13 @@ void NFMDemodGUI::displaySettings() ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); - ui->fmDevText->setText(QString("%1k").arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); + ui->channelSpacing->blockSignals(true); + ui->channelSpacing->setCurrentIndex(NFMDemodSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); + ui->channelSpacing->blockSignals(false); + ui->volumeText->setText(QString("%1").arg(m_settings.m_volume*100.0, 0, 'f', 0)); ui->volume->setValue(m_settings.m_volume * 100.0); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index a7e27f43b..8b86015de 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -64,7 +64,7 @@ private: private slots: void on_deltaFrequency_changed(qint64 value); - void on_channelSpacing_currentIndexChanged(int index); + void on_channelSpacingApply_clicked(); void on_rfBW_valueChanged(int value); void on_afBW_valueChanged(int value); void on_fmDev_valueChanged(int value); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.ui b/plugins/channelrx/demodnfm/nfmdemodgui.ui index f424e458e..d47b5e2c3 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.ui +++ b/plugins/channelrx/demodnfm/nfmdemodgui.ui @@ -204,7 +204,16 @@ - + + + + 24 + 16777215 + + + + Apply channel spacing + CS @@ -219,7 +228,14 @@ - Apply channel spacing settings + Channel spacing selection + + + + + + + k @@ -381,12 +397,12 @@ - 35 + 40 0 - 20.0k + +20.0k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/plugins/channelrx/demodnfm/nfmplugin.cpp b/plugins/channelrx/demodnfm/nfmplugin.cpp index 83a0ade91..c53193bcb 100644 --- a/plugins/channelrx/demodnfm/nfmplugin.cpp +++ b/plugins/channelrx/demodnfm/nfmplugin.cpp @@ -12,7 +12,7 @@ const PluginDescriptor NFMPlugin::m_pluginDescriptor = { NFMDemod::m_channelId, QString("NFM Demodulator"), - QString("4.21.3"), + QString("6.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channelrx/demodnfm/readme.md b/plugins/channelrx/demodnfm/readme.md index d4a1faa1b..e6ceb3ecf 100644 --- a/plugins/channelrx/demodnfm/readme.md +++ b/plugins/channelrx/demodnfm/readme.md @@ -24,7 +24,7 @@ Average total power in dB relative to a +/- 1.0 amplitude signal received in the

4: Channel spacing presets

-This selector will apply RF bandwidth, AF bandwidth and FM deviation settings according to the channel spacing scheme as follows: +Clicking on the "CS" button will apply RF bandwidth, AF bandwidth and FM deviation settings according to the channel spacing scheme selected in the combo box as follows: @@ -92,6 +92,8 @@ This selector will apply RF bandwidth, AF bandwidth and FM deviation settings ac When you are lost with the RF, AF bandwidths and FM deviation settings you can always come back to these standards and generally get good results. +When changing the RF bandwidth the channel spacing selection in the combo box is adjusted to fit within this bandwidth. + ☞ The demodulation is done at the channel sample rate which is guaranteed not to be lower than the requested audio sample rate but can possibly be equal to it. This means that for correct operation in any case you must ensure that the sample rate of the audio device is not lower than the Nyquist rate required to process this channel bandwidth. ☞ The channel sample rate is always the baseband signal rate divided by an integer power of two so depending on the baseband sample rate obtained from the sampling device you could also guarantee a minimal channel bandwidth. For example with a 125 kS/s baseband sample rate and a 8 kS/s audio sample rate the channel sample rate cannot be lower than 125/8 = 15.625 kS/s (125/16 = 7.8125 kS/s is too small) which is still OK for 5 or 6.25 kHz channel bandwidths. diff --git a/plugins/channeltx/modnfm/nfmmodgui.cpp b/plugins/channeltx/modnfm/nfmmodgui.cpp index 62e58f63f..6b22a2589 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.cpp +++ b/plugins/channeltx/modnfm/nfmmodgui.cpp @@ -137,8 +137,9 @@ void NFMModGUI::on_deltaFrequency_changed(qint64 value) applySettings(); } -void NFMModGUI::on_channelSpacing_currentIndexChanged(int index) +void NFMModGUI::on_channelSpacingApply_clicked() { + int index = ui->channelSpacing->currentIndex(); m_settings.m_rfBandwidth = NFMModSettings::getRFBW(index); m_settings.m_afBandwidth = NFMModSettings::getAFBW(index); m_settings.m_fmDeviation = 2.0 * NFMModSettings::getFMDev(index); @@ -150,7 +151,7 @@ void NFMModGUI::on_channelSpacing_currentIndexChanged(int index) ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0); ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); - ui->fmDevText->setText(QString("%1k").arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); ui->rfBW->blockSignals(false); ui->afBW->blockSignals(false); @@ -163,7 +164,12 @@ void NFMModGUI::on_rfBW_valueChanged(int value) ui->rfBWText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); m_settings.m_rfBandwidth = value * 100.0; m_channelMarker.setBandwidth(m_settings.m_rfBandwidth); - applySettings(); + + ui->channelSpacing->blockSignals(true); + ui->channelSpacing->setCurrentIndex(NFMModSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); + ui->channelSpacing->blockSignals(false); + + applySettings(); } void NFMModGUI::on_afBW_valueChanged(int value) @@ -175,7 +181,7 @@ void NFMModGUI::on_afBW_valueChanged(int value) void NFMModGUI::on_fmDev_valueChanged(int value) { - ui->fmDevText->setText(QString("%1k").arg(value / 10.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(value / 10.0, 0, 'f', 1)); m_settings.m_fmDeviation = value * 200.0; applySettings(); } @@ -478,9 +484,13 @@ void NFMModGUI::displaySettings() ui->afBWText->setText(QString("%1k").arg(m_settings.m_afBandwidth / 1000.0, 0, 'f', 1)); ui->afBW->setValue(m_settings.m_afBandwidth / 100.0); - ui->fmDevText->setText(QString("%1k").arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); + ui->fmDevText->setText(QString("%1%2k").arg(QChar(0xB1, 0x00)).arg(m_settings.m_fmDeviation / 2000.0, 0, 'f', 1)); ui->fmDev->setValue(m_settings.m_fmDeviation / 200.0); + ui->channelSpacing->blockSignals(true); + ui->channelSpacing->setCurrentIndex(NFMModSettings::getChannelSpacingIndex(m_settings.m_rfBandwidth)); + ui->channelSpacing->blockSignals(false); + ui->volumeText->setText(QString("%1").arg(m_settings.m_volumeFactor, 0, 'f', 1)); ui->volume->setValue(m_settings.m_volumeFactor * 10.0); diff --git a/plugins/channeltx/modnfm/nfmmodgui.h b/plugins/channeltx/modnfm/nfmmodgui.h index b44a1a70c..ae4afd841 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.h +++ b/plugins/channeltx/modnfm/nfmmodgui.h @@ -89,7 +89,7 @@ private slots: void handleSourceMessages(); void on_deltaFrequency_changed(qint64 value); - void on_channelSpacing_currentIndexChanged(int index); + void on_channelSpacingApply_clicked(); void on_rfBW_valueChanged(int value); void on_afBW_valueChanged(int value); void on_fmDev_valueChanged(int value); diff --git a/plugins/channeltx/modnfm/nfmmodgui.ui b/plugins/channeltx/modnfm/nfmmodgui.ui index 59ae43e78..e1f491573 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.ui +++ b/plugins/channeltx/modnfm/nfmmodgui.ui @@ -186,7 +186,16 @@ - + + + + 24 + 16777215 + + + + Apply channel spacing + CS @@ -201,7 +210,14 @@ - Apply channel spacing settings + Channel spacing selection + + + + + + + k @@ -348,12 +364,12 @@ - 35 + 40 0 - 5.0k + +20.0k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter diff --git a/plugins/channeltx/modnfm/nfmmodplugin.cpp b/plugins/channeltx/modnfm/nfmmodplugin.cpp index 80d962bb9..ca5893fbf 100644 --- a/plugins/channeltx/modnfm/nfmmodplugin.cpp +++ b/plugins/channeltx/modnfm/nfmmodplugin.cpp @@ -28,7 +28,7 @@ const PluginDescriptor NFMModPlugin::m_pluginDescriptor = { NFMMod::m_channelId, QString("NFM Modulator"), - QString("4.21.3"), + QString("6.0.0"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/channeltx/modnfm/readme.md b/plugins/channeltx/modnfm/readme.md index 06943c1bb..3bf8009c6 100644 --- a/plugins/channeltx/modnfm/readme.md +++ b/plugins/channeltx/modnfm/readme.md @@ -22,7 +22,7 @@ Use this button to toggle mute for this channel.

4: Channel spacing presets

-This selector will apply RF bandwidth, AF bandwidth and FM deviation settings according to the channel spacing scheme as follows: +Clicking on the "CS" button will apply RF bandwidth, AF bandwidth and FM deviation settings according to the channel spacing scheme selected in the combo box as follows:
@@ -90,6 +90,8 @@ This selector will apply RF bandwidth, AF bandwidth and FM deviation settings ac When you are lost with the RF, AF bandwidths and FM deviation settings you can always come back to these standards and generally get good results. +When changing the RF bandwidth the channel spacing selection in the combo box is adjusted to fit within this bandwidth. +

5: Audio frequency bandwidth

This is the bandwidth in khz of the modulating signal filtered before modulation.