From 3d74ac9ed83d5100318e9c822fb414dde2dd40b4 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 6 Nov 2017 02:12:44 +0100 Subject: [PATCH] Various small corrections --- plugins/channelrx/demodnfm/nfmdemod.cpp | 302 ++++++++---------- plugins/channelrx/demodnfm/nfmdemodgui.cpp | 8 - plugins/channeltx/modnfm/nfmmod.cpp | 3 +- plugins/channeltx/modnfm/nfmmodplugin.cpp | 2 +- .../bladerfinput/bladerfinput.cpp | 8 +- .../bladerfinput/bladerfinputgui.cpp | 2 + .../bladerfinput/bladerfinputplugin.cpp | 2 +- .../samplesource/hackrfinput/hackrfinput.cpp | 8 +- .../hackrfinput/hackrfinputplugin.cpp | 2 +- 9 files changed, 145 insertions(+), 192 deletions(-) diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index e4823d28d..a1d1fdbb9 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -126,192 +126,159 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto for (SampleVector::const_iterator it = begin; it != end; ++it) { - //Complex c(it->real() / 32768.0f, it->imag() / 32768.0f); Complex c(it->real(), it->imag()); c *= m_nco.nextIQ(); - { - if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci)) - { + if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci)) + { - qint16 sample; + qint16 sample; - //m_AGC.feed(ci); + double magsqRaw; // = ci.real()*ci.real() + c.imag()*c.imag(); + Real deviation; - //double magsqRaw = m_AGC.getMagSq(); - double magsqRaw; // = ci.real()*ci.real() + c.imag()*c.imag(); - Real deviation; + Real demod = m_phaseDiscri.phaseDiscriminatorDelta(ci, magsqRaw, deviation); - Real demod = m_phaseDiscri.phaseDiscriminatorDelta(ci, magsqRaw, deviation); + Real magsq = magsqRaw / (1<<30); + m_movingAverage.feed(magsq); + m_magsqSum += magsq; - Real magsq = magsqRaw / (1<<30); - m_movingAverage.feed(magsq); - m_magsqSum += magsq; + if (magsq > m_magsqPeak) + { + m_magsqPeak = magsq; + } - if (magsq > m_magsqPeak) - { - m_magsqPeak = magsq; + m_magsqCount++; + m_sampleCount++; + + // AF processing + + if (m_settings.m_deltaSquelch) + { + if (m_afSquelch.analyze(demod)) { + m_afSquelchOpen = m_afSquelch.evaluate() ? m_squelchGate + 480 : 0; } - m_magsqCount++; - - //m_m2Sample = m_m1Sample; - //m_m1Sample = ci; - m_sampleCount++; - - // AF processing - - if (m_settings.m_deltaSquelch) - { - if (m_afSquelch.analyze(demod)) { - m_afSquelchOpen = m_afSquelch.evaluate() ? m_squelchGate + 480 : 0; - } - - if (m_afSquelchOpen) + if (m_afSquelchOpen) + { + if (m_squelchCount < m_squelchGate + 480) { - if (m_squelchCount < m_squelchGate + 480) + m_squelchCount++; + } + } + else + { + if (m_squelchCount > 0) + { + m_squelchCount--; + } + } + } + else + { + if (m_movingAverage.average() < m_squelchLevel) + { + if (m_squelchCount > 0) + { + m_squelchCount--; + } + } + else + { + if (m_squelchCount < m_squelchGate + 480) + { + m_squelchCount++; + } + } + } + + m_squelchOpen = (m_squelchCount > m_squelchGate); + + if ((m_squelchOpen) && !m_settings.m_audioMute) + { + if (m_settings.m_ctcssOn) + { + Real ctcss_sample = m_lowpass.filter(demod); + + if ((m_sampleCount & 7) == 7) // decimate 48k -> 6k + { + if (m_ctcssDetector.analyze(&ctcss_sample)) { - m_squelchCount++; + int maxToneIndex; + + if (m_ctcssDetector.getDetectedTone(maxToneIndex)) + { + if (maxToneIndex+1 != m_ctcssIndex) + { + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(m_ctcssDetector.getToneSet()[maxToneIndex]); + getMessageQueueToGUI()->push(msg); + } + m_ctcssIndex = maxToneIndex+1; + } + } + else + { + if (m_ctcssIndex != 0) + { + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); + getMessageQueueToGUI()->push(msg); + } + m_ctcssIndex = 0; + } + } } } - else - { - if (m_squelchCount > 0) - { - m_squelchCount--; - } + } + + if (m_settings.m_ctcssOn && m_ctcssIndexSelected && (m_ctcssIndexSelected != m_ctcssIndex)) + { + sample = 0; + if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(0); + } + else + { + demod = m_bandpass.filter(demod); + Real squelchFactor = StepFunctions::smootherstep((Real) (m_squelchCount - m_squelchGate) / 480.0f); + sample = demod * m_settings.m_volume * squelchFactor; + if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(demod * 5.0f * squelchFactor); + } + } + else + { + if (m_ctcssIndex != 0) + { + if (getMessageQueueToGUI()) { + MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); + getMessageQueueToGUI()->push(msg); } - } - else - { - if (m_movingAverage.average() < m_squelchLevel) - { - if (m_squelchCount > 0) - { - m_squelchCount--; - } - } - else - { - if (m_squelchCount < m_squelchGate + 480) - { - m_squelchCount++; - } - } - } -// if ( (m_settings.m_deltaSquelch && ((deviation > m_squelchLevel) || (deviation < -m_squelchLevel))) || -// (!m_settings.m_deltaSquelch && (m_movingAverage.average() < m_squelchLevel)) ) -// { -// if (m_squelchCount > 0) -// { -// m_squelchCount--; -// } -// } -// else -// { -// if (m_squelchCount < m_squelchGate + 480) -// { -// m_squelchCount++; -// } -// } + m_ctcssIndex = 0; + } - //squelchOpen = (getMag() > m_squelchLevel); - m_squelchOpen = (m_squelchCount > m_squelchGate); + sample = 0; + if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(0); + } - /* - if (m_afSquelch.analyze(demod)) - { - squelchOpen = m_afSquelch.evaluate(); - }*/ + m_audioBuffer[m_audioBufferFill].l = sample; + m_audioBuffer[m_audioBufferFill].r = sample; + ++m_audioBufferFill; - if ((m_squelchOpen) && !m_settings.m_audioMute) - //if (m_AGC.getAverage() > m_squelchLevel) - { - if (m_settings.m_ctcssOn) - { - Real ctcss_sample = m_lowpass.filter(demod); + if (m_audioBufferFill >= m_audioBuffer.size()) + { + uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10); - if ((m_sampleCount & 7) == 7) // decimate 48k -> 6k - { - if (m_ctcssDetector.analyze(&ctcss_sample)) - { - int maxToneIndex; + if (res != m_audioBufferFill) + { + qDebug("NFMDemod::feed: %u/%u audio samples written", res, m_audioBufferFill); + } - if (m_ctcssDetector.getDetectedTone(maxToneIndex)) - { - if (maxToneIndex+1 != m_ctcssIndex) - { - if (getMessageQueueToGUI()) { - MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(m_ctcssDetector.getToneSet()[maxToneIndex]); - getMessageQueueToGUI()->push(msg); - } - m_ctcssIndex = maxToneIndex+1; - } - } - else - { - if (m_ctcssIndex != 0) - { - if (getMessageQueueToGUI()) { - MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); - getMessageQueueToGUI()->push(msg); - } - m_ctcssIndex = 0; - } - } - } - } - } + m_audioBufferFill = 0; + } - if (m_settings.m_ctcssOn && m_ctcssIndexSelected && (m_ctcssIndexSelected != m_ctcssIndex)) - { - sample = 0; - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(0); - } - else - { - demod = m_bandpass.filter(demod); - Real squelchFactor = StepFunctions::smootherstep((Real) (m_squelchCount - m_squelchGate) / 480.0f); - sample = demod * m_settings.m_volume * squelchFactor; - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(demod * 5.0f * squelchFactor); - } - } - else - { - if (m_ctcssIndex != 0) - { - if (getMessageQueueToGUI()) { - MsgReportCTCSSFreq *msg = MsgReportCTCSSFreq::create(0); - getMessageQueueToGUI()->push(msg); - } - - m_ctcssIndex = 0; - } - - sample = 0; - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(0); - } - - m_audioBuffer[m_audioBufferFill].l = sample; - m_audioBuffer[m_audioBufferFill].r = sample; - ++m_audioBufferFill; - - if (m_audioBufferFill >= m_audioBuffer.size()) - { - uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10); - - if (res != m_audioBufferFill) - { - qDebug("NFMDemod::feed: %u/%u audio samples written", res, m_audioBufferFill); - } - - m_audioBufferFill = 0; - } - - m_interpolatorDistanceRemain += m_interpolatorDistance; - } - } + m_interpolatorDistanceRemain += m_interpolatorDistance; + } } if (m_audioBufferFill > 0) @@ -414,17 +381,18 @@ void NFMDemod::applySettings(const NFMDemodSettings& settings, bool force) } if ((settings.m_inputSampleRate != m_settings.m_inputSampleRate) || - (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || + (settings.m_audioSampleRate != m_settings.m_audioSampleRate) || force) { m_settingsMutex.lock(); m_interpolator.create(16, settings.m_inputSampleRate, settings.m_rfBandwidth / 2.2); m_interpolatorDistanceRemain = 0; m_interpolatorDistance = (Real) settings.m_inputSampleRate / (Real) settings.m_audioSampleRate; - m_phaseDiscri.setFMScaling((8.0f*settings.m_rfBandwidth) / (float) settings.m_fmDeviation); // integrate 4x factor m_settingsMutex.unlock(); } - if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || force) + if ((settings.m_fmDeviation != m_settings.m_fmDeviation) || + (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) { m_phaseDiscri.setFMScaling((8.0f*settings.m_rfBandwidth) / (float) settings.m_fmDeviation); // integrate 4x factor } @@ -460,8 +428,6 @@ void NFMDemod::applySettings(const NFMDemodSettings& settings, bool force) } m_squelchCount = 0; // reset squelch open counter - //m_squelchLevel *= m_squelchLevel; - //m_afSquelch.setThreshold(m_squelchLevel); } if ((settings.m_udpAddress != m_settings.m_udpAddress) diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index e21a71430..edb2e2fc0 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -271,15 +271,8 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, QWidget ui->deltaFrequency->setValueRange(false, 7, -9999999, 9999999); ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue); - //m_channelMarker = new ChannelMarker(this); -// m_channelMarker.setColor(Qt::red); -// m_channelMarker.setBandwidth(12500); -// m_channelMarker.setCenterFrequency(0); m_channelMarker.setVisible(true); m_channelMarker.setTitle("NFM Demodulator"); -// m_channelMarker.setUDPAddress("127.0.0.1"); -// m_channelMarker.setUDPSendPort(9999); -// setTitleColor(m_channelMarker.getColor()); m_settings.setChannelMarker(&m_channelMarker); connect(&m_channelMarker, SIGNAL(changed()), this, SLOT(channelMarkerChanged())); @@ -301,7 +294,6 @@ NFMDemodGUI::~NFMDemodGUI() { m_deviceUISet->removeRxChannelInstance(this); delete m_nfmDemod; - //delete m_channelMarker; delete ui; } diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 1aebc616c..77ea92898 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -417,7 +417,8 @@ void NFMMod::applySettings(const NFMModSettings& settings, bool force) } if((settings.m_outputSampleRate != m_settings.m_outputSampleRate) || - (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || force) + (settings.m_rfBandwidth != m_settings.m_rfBandwidth) || + (settings.m_audioSampleRate != m_settings.m_audioSampleRate) || force) { m_settingsMutex.lock(); m_interpolatorDistanceRemain = 0; diff --git a/plugins/channeltx/modnfm/nfmmodplugin.cpp b/plugins/channeltx/modnfm/nfmmodplugin.cpp index 4fe27d9af..d17b2b026 100644 --- a/plugins/channeltx/modnfm/nfmmodplugin.cpp +++ b/plugins/channeltx/modnfm/nfmmodplugin.cpp @@ -23,7 +23,7 @@ const PluginDescriptor NFMModPlugin::m_pluginDescriptor = { QString("NFM Modulator"), - QString("3.8.0"), + QString("3.8.2"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/samplesource/bladerfinput/bladerfinput.cpp b/plugins/samplesource/bladerfinput/bladerfinput.cpp index 443399c45..b050df35a 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinput.cpp @@ -254,14 +254,10 @@ bool BladerfInput::applySettings(const BladeRFInputSettings& settings, bool forc qDebug() << "BladerfInput::applySettings: m_dev: " << m_dev; - if (m_settings.m_dcBlock != settings.m_dcBlock) + if ((m_settings.m_dcBlock != settings.m_dcBlock) || + (m_settings.m_iqCorrection != settings.m_iqCorrection) || force) { m_settings.m_dcBlock = settings.m_dcBlock; - m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection); - } - - if (m_settings.m_iqCorrection != settings.m_iqCorrection) - { m_settings.m_iqCorrection = settings.m_iqCorrection; m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection); } diff --git a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp index ef205e89f..13b8b5b5c 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputgui.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputgui.cpp @@ -62,6 +62,8 @@ BladerfInputGui::BladerfInputGui(DeviceUISet *deviceUISet, QWidget* parent) : displaySettings(); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); + + sendSettings(); } BladerfInputGui::~BladerfInputGui() diff --git a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp index 0a5420174..edf769473 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp @@ -27,7 +27,7 @@ const PluginDescriptor BlderfInputPlugin::m_pluginDescriptor = { QString("BladerRF Input"), - QString("3.8.0"), + QString("3.8.2"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true, diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index 768e5aff8..1a7e0350b 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -255,14 +255,10 @@ bool HackRFInput::applySettings(const HackRFInputSettings& settings, bool force) qDebug() << "HackRFInput::applySettings"; - if (m_settings.m_dcBlock != settings.m_dcBlock) + if ((m_settings.m_dcBlock != settings.m_dcBlock) || + (m_settings.m_iqCorrection != settings.m_iqCorrection) || force) { m_settings.m_dcBlock = settings.m_dcBlock; - m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection); - } - - if (m_settings.m_iqCorrection != settings.m_iqCorrection) - { m_settings.m_iqCorrection = settings.m_iqCorrection; m_deviceAPI->configureCorrections(m_settings.m_dcBlock, m_settings.m_iqCorrection); } diff --git a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp index 26a08c707..728f3e0c1 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputplugin.cpp @@ -29,7 +29,7 @@ const PluginDescriptor HackRFInputPlugin::m_pluginDescriptor = { QString("HackRF Input"), - QString("3.8.0"), + QString("3.8.2"), QString("(c) Edouard Griffiths, F4EXB"), QString("https://github.com/f4exb/sdrangel"), true,