1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-27 15:26:33 -04:00

AM demod: use buffered delay squelch

This commit is contained in:
f4exb 2018-04-22 10:23:11 +02:00
parent 7e6267f41c
commit 06cd90e354
3 changed files with 29 additions and 7 deletions

View File

@ -49,6 +49,7 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) :
m_inputFrequencyOffset(0), m_inputFrequencyOffset(0),
m_running(false), m_running(false),
m_squelchOpen(false), m_squelchOpen(false),
m_squelchDelayLine(12000),
m_magsqSum(0.0f), m_magsqSum(0.0f),
m_magsqPeak(0.0f), m_magsqPeak(0.0f),
m_magsqCount(0), m_magsqCount(0),
@ -231,6 +232,7 @@ void AMDemod::applyAudioSampleRate(int sampleRate)
m_interpolatorDistance = (Real) m_inputSampleRate / (Real) sampleRate; m_interpolatorDistance = (Real) m_inputSampleRate / (Real) sampleRate;
m_bandpass.create(301, sampleRate, 300.0, m_settings.m_rfBandwidth / 2.0f); m_bandpass.create(301, sampleRate, 300.0, m_settings.m_rfBandwidth / 2.0f);
m_audioFifo.setSize(sampleRate); m_audioFifo.setSize(sampleRate);
m_squelchDelayLine.resize(sampleRate/4);
m_settingsMutex.unlock(); m_settingsMutex.unlock();
m_audioSampleRate = sampleRate; m_audioSampleRate = sampleRate;

View File

@ -29,6 +29,8 @@
#include "dsp/bandpass.h" #include "dsp/bandpass.h"
#include "audio/audiofifo.h" #include "audio/audiofifo.h"
#include "util/message.h" #include "util/message.h"
#include "util/doublebufferfifo.h"
#include "amdemodsettings.h" #include "amdemodsettings.h"
class DeviceSourceAPI; class DeviceSourceAPI;
@ -155,6 +157,7 @@ private:
Real m_squelchLevel; Real m_squelchLevel;
uint32_t m_squelchCount; uint32_t m_squelchCount;
bool m_squelchOpen; bool m_squelchOpen;
DoubleBufferFIFO<Real> m_squelchDelayLine;
double m_magsq; double m_magsq;
double m_magsqSum; double m_magsqSum;
double m_magsqPeak; double m_magsqPeak;
@ -194,26 +197,43 @@ private:
m_magsqCount++; m_magsqCount++;
// if (m_magsq >= m_squelchLevel)
// {
// if (m_squelchCount <= m_audioSampleRate / 10)
// {
// m_squelchCount++;
// }
// }
// else
// {
// if (m_squelchCount > 1)
// {
// m_squelchCount -= 2;
// }
// }
if (m_magsq >= m_squelchLevel) if (m_magsq >= m_squelchLevel)
{ {
if (m_squelchCount <= m_audioSampleRate / 10) if (m_squelchCount < m_audioSampleRate / 10) {
{
m_squelchCount++; m_squelchCount++;
} }
m_squelchDelayLine.write(magsq);
} }
else else
{ {
if (m_squelchCount > 1) if (m_squelchCount > 0) {
{ m_squelchCount--;
m_squelchCount -= 2;
} }
m_squelchDelayLine.write(0);
} }
qint16 sample; qint16 sample;
if ((m_squelchCount >= m_audioSampleRate / 20) && !m_settings.m_audioMute) if ((m_squelchCount >= m_audioSampleRate / 20) && !m_settings.m_audioMute)
{ {
Real demod = sqrt(magsq); Real demod = sqrt(m_squelchDelayLine.readBack(m_audioSampleRate / 20));
m_volumeAGC.feed(demod); m_volumeAGC.feed(demod);
demod = (demod - m_volumeAGC.getValue()) / m_volumeAGC.getValue(); demod = (demod - m_volumeAGC.getValue()) / m_volumeAGC.getValue();

View File

@ -9,7 +9,7 @@
const PluginDescriptor AMDemodPlugin::m_pluginDescriptor = { const PluginDescriptor AMDemodPlugin::m_pluginDescriptor = {
QString("AM Demodulator"), QString("AM Demodulator"),
QString("3.14.2"), QString("3.14.4"),
QString("(c) Edouard Griffiths, F4EXB"), QString("(c) Edouard Griffiths, F4EXB"),
QString("https://github.com/f4exb/sdrangel"), QString("https://github.com/f4exb/sdrangel"),
true, true,