From 8a16e99e48b6332f1e9d6d11300af92db31e930e Mon Sep 17 00:00:00 2001 From: f4exb Date: Sun, 20 Aug 2017 22:18:33 +0200 Subject: [PATCH] UDP source plugin: new AM mode with 300 Hz low cutoff bandpass filter --- plugins/channelrx/udpsrc/udpsrc.cpp | 19 +++++++++++++++++++ plugins/channelrx/udpsrc/udpsrc.h | 3 +++ plugins/channelrx/udpsrc/udpsrcgui.cpp | 4 ++++ plugins/channelrx/udpsrc/udpsrcgui.ui | 5 +++++ 4 files changed, 31 insertions(+) diff --git a/plugins/channelrx/udpsrc/udpsrc.cpp b/plugins/channelrx/udpsrc/udpsrc.cpp index 187fcbdbd..0bcea5780 100644 --- a/plugins/channelrx/udpsrc/udpsrc.cpp +++ b/plugins/channelrx/udpsrc/udpsrc.cpp @@ -286,6 +286,23 @@ void UDPSrc::feed(const SampleVector::const_iterator& begin, const SampleVector: m_udpBufferMono->write(0); m_outMovingAverage.feed(0); } + } + else if (m_running.m_sampleFormat == FormatAMBPFMono) + { + if (m_squelchOpen) + { + double demodf = sqrt(inMagSq); + demodf = m_bandpass.filter(demodf); + demodf /= 301.0; + FixReal demod = (FixReal) (demodf * agcFactor * m_running.m_gain); + m_udpBufferMono->write(demod); + m_outMovingAverage.feed((demod * demod) / 1073741824.0); + } + else + { + m_udpBufferMono->write(0); + m_outMovingAverage.feed(0); + } } else // Raw I/Q samples { @@ -437,6 +454,8 @@ void UDPSrc::apply(bool force) m_agc.setStepDownDelay( m_config.m_outputSampleRate * (m_config.m_squelchGate == 0 ? 0.01 : m_config.m_squelchGate)); m_agc.setGate(m_config.m_outputSampleRate * 0.02); + m_bandpass.create(301, m_config.m_outputSampleRate, 300.0, m_config.m_rfBandwidth / 2.0f); + m_inMovingAverage.resize(m_config.m_outputSampleRate * 0.01, 1e-10); // 10 ms m_amMovingAverage.resize(m_config.m_outputSampleRate * 0.005, 1e-10); // 5 ms m_outMovingAverage.resize(m_config.m_outputSampleRate * 0.01, 1e-10); // 10 ms diff --git a/plugins/channelrx/udpsrc/udpsrc.h b/plugins/channelrx/udpsrc/udpsrc.h index 1ff443dfc..3f5257274 100644 --- a/plugins/channelrx/udpsrc/udpsrc.h +++ b/plugins/channelrx/udpsrc/udpsrc.h @@ -27,6 +27,7 @@ #include "dsp/phasediscri.h" #include "dsp/movingaverage.h" #include "dsp/agc.h" +#include "dsp/bandpass.h" #include "util/udpsink.h" #include "util/message.h" #include "audio/audiofifo.h" @@ -49,6 +50,7 @@ public: FormatUSBMono, FormatAMMono, FormatAMNoDCMono, + FormatAMBPFMono, FormatNone }; @@ -341,6 +343,7 @@ protected: int m_squelchThreshold; //!< number of samples computed from given gate MagAGC m_agc; + Bandpass m_bandpass; QMutex m_settingsMutex; diff --git a/plugins/channelrx/udpsrc/udpsrcgui.cpp b/plugins/channelrx/udpsrc/udpsrcgui.cpp index 272f3ba88..6d44bdbf8 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.cpp +++ b/plugins/channelrx/udpsrc/udpsrcgui.cpp @@ -453,6 +453,10 @@ void UDPSrcGUI::applySettings(bool force) case 8: sampleFormat = UDPSrc::FormatAMNoDCMono; ui->fmDeviation->setEnabled(false); + break; + case 9: + sampleFormat = UDPSrc::FormatAMBPFMono; + ui->fmDeviation->setEnabled(false); break; default: sampleFormat = UDPSrc::FormatS16LE; diff --git a/plugins/channelrx/udpsrc/udpsrcgui.ui b/plugins/channelrx/udpsrc/udpsrcgui.ui index 8a22f117b..5daae8808 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.ui +++ b/plugins/channelrx/udpsrc/udpsrcgui.ui @@ -522,6 +522,11 @@ S16LE AM !DC Mono + + + S16LE AM BPF Mono + +