From 4ffe502e44dcef14d8f17cf5259708ad3cc61b0d Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 30 Nov 2016 00:55:35 +0100 Subject: [PATCH] FM Modulator: reflect GUI changes. Use FM Deviation in place of modulation percentage --- plugins/channeltx/modnfm/nfmmod.cpp | 24 ++++----- plugins/channeltx/modnfm/nfmmod.h | 18 +++---- plugins/channeltx/modnfm/nfmmodgui.cpp | 32 ++++++----- plugins/channeltx/modnfm/nfmmodgui.h | 1 + plugins/channeltx/modnfm/nfmmodgui.ui | 74 ++++++++++++-------------- 5 files changed, 76 insertions(+), 73 deletions(-) diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 0ea65a7c9..963f489a3 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -41,13 +41,13 @@ NFMMod::NFMMod() : m_sampleRate(48000), m_afInput(NFMModInputNone) { - setObjectName("AMMod"); + setObjectName("NFMod"); m_config.m_outputSampleRate = 48000; m_config.m_inputFrequencyOffset = 0; m_config.m_rfBandwidth = 12500; m_config.m_afBandwidth = 3000; - m_config.m_modFactor = 20; + m_config.m_fmDeviation = 20; m_config.m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate(); apply(); @@ -71,12 +71,12 @@ NFMMod::~NFMMod() void NFMMod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, - float modFactor, + float fmDeviation, int volumeTenths, bool audioMute, bool playLoop) { - Message* cmd = MsgConfigureNFMMod::create(rfBandwidth, afBandwidth, modFactor, volumeTenths, audioMute, playLoop); + Message* cmd = MsgConfigureNFMMod::create(rfBandwidth, afBandwidth, fmDeviation, volumeTenths, audioMute, playLoop); messageQueue->push(cmd); } @@ -90,13 +90,13 @@ void NFMMod::pull(Sample& sample) if (m_interpolatorDistance > 1.0f) // decimate { pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier + m_modSample.real(((t+1.0f) * m_running.m_fmDeviation * 16384.0f)); // modulate and scale zero frequency carrier m_modSample.imag(0.0f); while (!m_interpolator.decimate(&m_interpolatorDistanceRemain, m_modSample, &ci)) { pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier + m_modSample.real(((t+1.0f) * m_running.m_fmDeviation * 16384.0f)); // modulate and scale zero frequency carrier m_modSample.imag(0.0f); } } @@ -105,7 +105,7 @@ void NFMMod::pull(Sample& sample) if (m_interpolator.interpolate(&m_interpolatorDistanceRemain, m_modSample, &ci)) { pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier + m_modSample.real(((t+1.0f) * m_running.m_fmDeviation * 16384.0f)); // modulate and scale zero frequency carrier m_modSample.imag(0.0f); } } @@ -210,17 +210,17 @@ bool NFMMod::handleMessage(const Message& cmd) m_config.m_rfBandwidth = cfg.getRFBandwidth(); m_config.m_afBandwidth = cfg.getAFBandwidth(); - m_config.m_modFactor = cfg.getModFactor(); + m_config.m_fmDeviation = cfg.getFMDeviation(); m_config.m_volumeFactor = cfg.getVolumeFactor(); m_config.m_audioMute = cfg.getAudioMute(); m_config.m_playLoop = cfg.getPlayLoop(); apply(); - qDebug() << "NFMMod::handleMessage: MsgConfigureAMMod:" + qDebug() << "NFMMod::handleMessage: MsgConfigureNFMMod:" << " m_rfBandwidth: " << m_config.m_rfBandwidth << " m_afBandwidth: " << m_config.m_afBandwidth - << " m_modFactor: " << m_config.m_modFactor + << " m_fmDeviation: " << m_config.m_fmDeviation << " m_volumeFactor: " << m_config.m_volumeFactor << " m_audioMute: " << m_config.m_audioMute << " m_playLoop: " << m_config.m_playLoop; @@ -305,7 +305,7 @@ void NFMMod::apply() m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset; m_running.m_rfBandwidth = m_config.m_rfBandwidth; m_running.m_afBandwidth = m_config.m_afBandwidth; - m_running.m_modFactor = m_config.m_modFactor; + m_running.m_fmDeviation = m_config.m_fmDeviation; m_running.m_volumeFactor = m_config.m_volumeFactor; m_running.m_audioSampleRate = m_config.m_audioSampleRate; m_running.m_audioMute = m_config.m_audioMute; @@ -325,7 +325,7 @@ void NFMMod::openFileStream() m_sampleRate = 48000; // fixed rate m_recordLength = m_fileSize / (sizeof(Real) * m_sampleRate); - qDebug() << "AMMod::openFileStream: " << m_fileName.toStdString().c_str() + qDebug() << "NFMMod::openFileStream: " << m_fileName.toStdString().c_str() << " fileSize: " << m_fileSize << "bytes" << " length: " << m_recordLength << " seconds"; diff --git a/plugins/channeltx/modnfm/nfmmod.h b/plugins/channeltx/modnfm/nfmmod.h index 88a70939f..fe9259e40 100644 --- a/plugins/channeltx/modnfm/nfmmod.h +++ b/plugins/channeltx/modnfm/nfmmod.h @@ -174,7 +174,7 @@ public: NFMMod(); ~NFMMod(); - void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, float modFactor, int volumeFactor, bool audioMute, bool playLoop); + void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, float fmDeviation, int volumeFactor, bool audioMute, bool playLoop); virtual void pull(Sample& sample); virtual void start(); @@ -191,29 +191,29 @@ private: public: Real getRFBandwidth() const { return m_rfBandwidth; } Real getAFBandwidth() const { return m_afBandwidth; } - float getModFactor() const { return m_modFactor; } + float getFMDeviation() const { return m_fmDeviation; } int getVolumeFactor() const { return m_volumeFactor; } bool getAudioMute() const { return m_audioMute; } bool getPlayLoop() const { return m_playLoop; } - static MsgConfigureNFMMod* create(Real rfBandwidth, Real afBandwidth, float modFactor, int volumeFactor, bool audioMute, bool playLoop) + static MsgConfigureNFMMod* create(Real rfBandwidth, Real afBandwidth, float fmDeviation, int volumeFactor, bool audioMute, bool playLoop) { - return new MsgConfigureNFMMod(rfBandwidth, afBandwidth, modFactor, volumeFactor, audioMute, playLoop); + return new MsgConfigureNFMMod(rfBandwidth, afBandwidth, fmDeviation, volumeFactor, audioMute, playLoop); } private: Real m_rfBandwidth; Real m_afBandwidth; - float m_modFactor; + float m_fmDeviation; int m_volumeFactor; bool m_audioMute; bool m_playLoop; - MsgConfigureNFMMod(Real rfBandwidth, Real afBandwidth, float modFactor, int volumeFactor, bool audioMute, bool playLoop) : + MsgConfigureNFMMod(Real rfBandwidth, Real afBandwidth, float fmDeviation, int volumeFactor, bool audioMute, bool playLoop) : Message(), m_rfBandwidth(rfBandwidth), m_afBandwidth(afBandwidth), - m_modFactor(modFactor), + m_fmDeviation(fmDeviation), m_volumeFactor(volumeFactor), m_audioMute(audioMute), m_playLoop(playLoop) @@ -238,7 +238,7 @@ private: qint64 m_inputFrequencyOffset; Real m_rfBandwidth; Real m_afBandwidth; - float m_modFactor; + float m_fmDeviation; int m_volumeFactor; quint32 m_audioSampleRate; bool m_audioMute; @@ -249,7 +249,7 @@ private: m_inputFrequencyOffset(0), m_rfBandwidth(-1), m_afBandwidth(-1), - m_modFactor(0.2f), + m_fmDeviation(5.0f), m_volumeFactor(20), m_audioSampleRate(0), m_audioMute(false), diff --git a/plugins/channeltx/modnfm/nfmmodgui.cpp b/plugins/channeltx/modnfm/nfmmodgui.cpp index 69b56b110..3fcd04757 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.cpp +++ b/plugins/channeltx/modnfm/nfmmodgui.cpp @@ -38,6 +38,7 @@ const QString NFMModGUI::m_channelID = "sdrangel.channeltx.modnfm"; const int NFMModGUI::m_rfBW[] = { 3000, 4000, 5000, 6250, 8330, 10000, 12500, 15000, 20000, 25000, 40000 }; +const int NFMModGUI::m_nbRfBW = 11; NFMModGUI* NFMModGUI::create(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI) { @@ -73,9 +74,9 @@ void NFMModGUI::resetToDefaults() { blockApplySettings(true); - ui->rfBW->setValue(6); + ui->rfBW->setCurrentIndex(6); ui->afBW->setValue(3); - ui->modPercent->setValue(20); + ui->fmDev->setValue(50); ui->micVolume->setValue(50); ui->deltaFrequency->setValue(0); @@ -87,9 +88,9 @@ QByteArray NFMModGUI::serialize() const { SimpleSerializer s(1); s.writeS32(1, m_channelMarker.getCenterFrequency()); - s.writeS32(2, ui->rfBW->value()); + s.writeS32(2, ui->rfBW->currentIndex()); s.writeS32(3, ui->afBW->value()); - s.writeS32(4, ui->modPercent->value()); + s.writeS32(4, ui->fmDev->value()); s.writeU32(5, m_channelMarker.getColor().rgb()); return s.final(); } @@ -115,12 +116,12 @@ bool NFMModGUI::deserialize(const QByteArray& data) d.readS32(1, &tmp, 0); m_channelMarker.setCenterFrequency(tmp); - d.readS32(2, &tmp, 4); - ui->rfBW->setValue(tmp); + d.readS32(2, &tmp, 6); + ui->rfBW->setCurrentIndex(tmp); d.readS32(3, &tmp, 3); ui->afBW->setValue(tmp); - d.readS32(4, &tmp, 20); - ui->modPercent->setValue(tmp); + d.readS32(4, &tmp, 50); + ui->fmDev->setValue(tmp); if(d.readU32(5, &u32tmp)) { @@ -202,7 +203,6 @@ void NFMModGUI::on_deltaFrequency_changed(quint64 value) void NFMModGUI::on_rfBW_valueChanged(int value) { - ui->rfBWText->setText(QString("%1 kHz").arg(m_rfBW[value] / 1000.0)); m_channelMarker.setBandwidth(m_rfBW[value]); applySettings(); } @@ -215,7 +215,7 @@ void NFMModGUI::on_afBW_valueChanged(int value) void NFMModGUI::on_modPercent_valueChanged(int value) { - ui->modPercentText->setText(QString("%1").arg(value)); + ui->fmDevText->setText(QString("%1").arg(value / 10.0, 0, 'f', 1)); applySettings(); } @@ -329,6 +329,14 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI, QWidget* pa { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose, true); + + blockApplySettings(true); + ui->rfBW->clear(); + for (int i = 0; i < m_nbRfBW; i++) { + ui->rfBW->addItem(QString("%1").arg(m_rfBW[i] / 1000.0, 0, 'f', 2)); + } + blockApplySettings(false); + connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool))); connect(this, SIGNAL(menuDoubleClickEvent()), this, SLOT(onMenuDoubleClicked())); @@ -394,9 +402,9 @@ void NFMModGUI::applySettings() ui->deltaMinus->setChecked(m_channelMarker.getCenterFrequency() < 0); m_nfmMod->configure(m_nfmMod->getInputMessageQueue(), - m_rfBW[ui->rfBW->value()], + m_rfBW[ui->rfBW->currentIndex()], ui->afBW->value() * 1000.0, - ui->modPercent->value() / 100.0f, + ui->fmDev->value() / 100.0f, ui->micVolume->value(), ui->audioMute->isChecked(), ui->playLoop->isChecked()); diff --git a/plugins/channeltx/modnfm/nfmmodgui.h b/plugins/channeltx/modnfm/nfmmodgui.h index bf74fb9d5..f2dee39b4 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.h +++ b/plugins/channeltx/modnfm/nfmmodgui.h @@ -102,6 +102,7 @@ private: NFMMod::NFMModInputAF m_modAFInput; static const int m_rfBW[]; + static const int m_nbRfBW; explicit NFMModGUI(PluginAPI* pluginAPI, DeviceSinkAPI *deviceAPI, QWidget* parent = NULL); virtual ~NFMModGUI(); diff --git a/plugins/channeltx/modnfm/nfmmodgui.ui b/plugins/channeltx/modnfm/nfmmodgui.ui index f8bb8ca53..d62ed148c 100644 --- a/plugins/channeltx/modnfm/nfmmodgui.ui +++ b/plugins/channeltx/modnfm/nfmmodgui.ui @@ -6,8 +6,8 @@ 0 0 - 266 - 190 + 295 + 181 @@ -27,7 +27,7 @@ 10 10 - 251 + 271 161 @@ -164,55 +164,49 @@ - + - RF BW + RFBW - - - Demodulator (RF) bandwidth - - - 10 - - - 1 - - - 6 - - - Qt::Horizontal + + + + 60 + 16777215 + - + - 50 + 10 0 - 12.5kHz + k - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - + + + Qt::Vertical + + + + + - AF BW + AFBW @@ -242,12 +236,12 @@ - 50 + 25 0 - 3 kHz + 3k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -257,16 +251,16 @@ - + - + - Mod% + Dev - + 0 @@ -283,13 +277,13 @@ Modulation percentage - 100 + 250 1 - 20 + 50 Qt::Horizontal @@ -297,7 +291,7 @@ - + 30 @@ -305,7 +299,7 @@ - 20 + 5k Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter