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:
parent
7e6267f41c
commit
06cd90e354
@ -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;
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user