mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-22 16:08:39 -05:00
Moving average cleanup
This commit is contained in:
parent
4cd6d5bd6e
commit
b0a97510e2
@ -196,8 +196,8 @@ void ChannelAnalyzerGUI::channelMarkerHighlightedByCursor()
|
||||
void ChannelAnalyzerGUI::tick()
|
||||
{
|
||||
Real powDb = CalcDb::dbPower(m_channelAnalyzer->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(QString::number((Real) m_channelPowerDbAvg, 'f', 1));
|
||||
}
|
||||
|
||||
void ChannelAnalyzerGUI::on_deltaMinus_toggled(bool minus)
|
||||
@ -331,8 +331,7 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceUISet *device
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_rate(6000),
|
||||
m_spanLog2(3),
|
||||
m_channelPowerDbAvg(40,0)
|
||||
m_spanLog2(3)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
@ -20,7 +20,8 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "dsp/dsptypes.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
class PluginAPI;
|
||||
@ -65,7 +66,7 @@ private:
|
||||
bool m_doApplySettings;
|
||||
int m_rate;
|
||||
int m_spanLog2;
|
||||
MovingAverage<Real> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<Real, double, 40> m_channelPowerDbAvg;
|
||||
|
||||
ChannelAnalyzer* m_channelAnalyzer;
|
||||
SpectrumScopeComboVis* m_spectrumScopeComboVis;
|
||||
|
@ -235,8 +235,8 @@ void ChannelAnalyzerNGGUI::channelMarkerHighlightedByCursor()
|
||||
void ChannelAnalyzerNGGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_channelAnalyzer->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg((Real) m_channelPowerDbAvg, 0, 'f', 1));
|
||||
}
|
||||
|
||||
void ChannelAnalyzerNGGUI::on_channelSampleRate_changed(quint64 value)
|
||||
@ -388,8 +388,7 @@ ChannelAnalyzerNGGUI::ChannelAnalyzerNGGUI(PluginAPI* pluginAPI, DeviceUISet *de
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_rate(6000),
|
||||
m_spanLog2(0),
|
||||
m_channelPowerDbAvg(40,0)
|
||||
m_spanLog2(0)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
@ -20,7 +20,8 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "dsp/dsptypes.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
class PluginAPI;
|
||||
@ -65,7 +66,7 @@ private:
|
||||
bool m_doApplySettings;
|
||||
int m_rate; //!< sample rate after final in-channel decimation (spanlog2)
|
||||
int m_spanLog2;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<Real, double, 40> m_channelPowerDbAvg;
|
||||
|
||||
ChannelAnalyzerNG* m_channelAnalyzer;
|
||||
SpectrumScopeNGComboVis* m_spectrumScopeComboVis;
|
||||
|
@ -45,7 +45,6 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_magsqSum(0.0f),
|
||||
m_magsqPeak(0.0f),
|
||||
m_magsqCount(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_volumeAGC(1200, 1.0),
|
||||
m_audioFifo(48000),
|
||||
m_settingsMutex(QMutex::Recursive)
|
||||
@ -55,7 +54,6 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_volumeAGC.resize(4096, 0.003, 0);
|
||||
m_magsq = 0.0;
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "channel/channelsinkapi.h"
|
||||
#include "dsp/nco.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/bandpass.h"
|
||||
#include "audio/audiofifo.h"
|
||||
@ -143,7 +143,7 @@ private:
|
||||
double m_magsqPeak;
|
||||
int m_magsqCount;
|
||||
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<Real, double, 16> m_movingAverage;
|
||||
SimpleAGC m_volumeAGC;
|
||||
Bandpass<Real> m_bandpass;
|
||||
|
||||
@ -164,8 +164,8 @@ private:
|
||||
Real re = ci.real() / SDR_RX_SCALED;
|
||||
Real im = ci.imag() / SDR_RX_SCALED;
|
||||
Real magsq = re*re + im*im;
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsq = m_movingAverage.average();
|
||||
m_movingAverage(magsq);
|
||||
m_magsq = m_movingAverage.asDouble();
|
||||
m_magsqSum += magsq;
|
||||
|
||||
if (magsq > m_magsqPeak)
|
||||
|
@ -60,7 +60,6 @@ ATVDemod::ATVDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_intRowIndex(0),
|
||||
m_intLineIndex(0),
|
||||
m_objAvgColIndex(3),
|
||||
m_objMagSqAverage(40, 0),
|
||||
m_bfoPLL(200/1000000, 100/1000000, 0.01),
|
||||
m_bfoFilter(200.0, 1000000.0, 0.9),
|
||||
m_interpolatorDistance(1.0f),
|
||||
@ -78,8 +77,6 @@ ATVDemod::ATVDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_intNumberOfLines=0;
|
||||
m_interleaved = true;
|
||||
|
||||
m_objMagSqAverage.resize(32, 1.0);
|
||||
|
||||
m_DSBFilter = new fftfilt((2.0f * m_rfConfig.m_fltRFBandwidth) / 1000000, 2 * m_ssbFftLen); // arbitrary 1 MS/s sample rate
|
||||
m_DSBFilterBuffer = new Complex[m_ssbFftLen];
|
||||
memset(m_DSBFilterBuffer, 0, sizeof(Complex)*(m_ssbFftLen));
|
||||
@ -281,7 +278,7 @@ void ATVDemod::demod(Complex& c)
|
||||
{
|
||||
//Amplitude FM
|
||||
magSq = fltI*fltI + fltQ*fltQ;
|
||||
m_objMagSqAverage.feed(magSq);
|
||||
m_objMagSqAverage(magSq);
|
||||
fltNorm = sqrt(magSq);
|
||||
fltNormI= fltI/fltNorm;
|
||||
fltNormQ= fltQ/fltNorm;
|
||||
@ -336,7 +333,7 @@ void ATVDemod::demod(Complex& c)
|
||||
{
|
||||
//Amplitude AM
|
||||
magSq = fltI*fltI + fltQ*fltQ;
|
||||
m_objMagSqAverage.feed(magSq);
|
||||
m_objMagSqAverage(magSq);
|
||||
fltNorm = sqrt(magSq);
|
||||
fltVal = fltNorm / SDR_RX_SCALEF;
|
||||
|
||||
@ -359,7 +356,7 @@ void ATVDemod::demod(Complex& c)
|
||||
else if ((m_rfRunning.m_enmModulation == ATV_USB) || (m_rfRunning.m_enmModulation == ATV_LSB))
|
||||
{
|
||||
magSq = fltI*fltI + fltQ*fltQ;
|
||||
m_objMagSqAverage.feed(magSq);
|
||||
m_objMagSqAverage(magSq);
|
||||
fltNorm = sqrt(magSq);
|
||||
|
||||
Real bfoValues[2];
|
||||
@ -398,13 +395,13 @@ void ATVDemod::demod(Complex& c)
|
||||
float rawDeviation;
|
||||
fltVal = m_objPhaseDiscri.phaseDiscriminatorDelta(c, magSq, rawDeviation) + 0.5f;
|
||||
//fltVal = fltVal < 0.0f ? 0.0f : fltVal > 1.0f ? 1.0f : fltVal;
|
||||
m_objMagSqAverage.feed(magSq);
|
||||
m_objMagSqAverage(magSq);
|
||||
fltNorm = sqrt(magSq);
|
||||
}
|
||||
else
|
||||
{
|
||||
magSq = fltI*fltI + fltQ*fltQ;
|
||||
m_objMagSqAverage.feed(magSq);
|
||||
m_objMagSqAverage(magSq);
|
||||
fltNorm = sqrt(magSq);
|
||||
fltVal = 0.0f;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "dsp/downchannelizer.h"
|
||||
#include "dsp/nco.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/fftfilt.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/phaselock.h"
|
||||
@ -234,7 +234,7 @@ public:
|
||||
void setATVScreen(ATVScreenInterface *objScreen);
|
||||
int getSampleRate();
|
||||
int getEffectiveSampleRate();
|
||||
double getMagSq() const { return m_objMagSqAverage.average(); } //!< Beware this is scaled to 2^30
|
||||
double getMagSq() const { return m_objMagSqAverage; } //!< Beware this is scaled to 2^30
|
||||
bool getBFOLocked();
|
||||
|
||||
static const QString m_channelIdURI;
|
||||
@ -457,7 +457,7 @@ private:
|
||||
|
||||
//*************** RF ***************
|
||||
|
||||
MovingAverage<double> m_objMagSqAverage;
|
||||
MovingAverageUtil<double, double, 32> m_objMagSqAverage;
|
||||
|
||||
NCO m_nco;
|
||||
SimplePhaseLock m_bfoPLL;
|
||||
|
@ -274,7 +274,6 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_blnDoApplySettings(true),
|
||||
m_objMagSqAverage(40, 0),
|
||||
m_intTickCount(0),
|
||||
m_inputSampleRate(48000)
|
||||
{
|
||||
@ -308,8 +307,6 @@ ATVDemodGUI::ATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Base
|
||||
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
||||
m_deviceUISet->addRollupWidget(this);
|
||||
|
||||
m_objMagSqAverage.resize(4, 1.0);
|
||||
|
||||
ui->scopeGUI->setBuddies(m_scopeVis->getInputMessageQueue(), m_scopeVis, ui->glScope);
|
||||
|
||||
resetToDefaults(); // does applySettings()
|
||||
@ -473,8 +470,8 @@ void ATVDemodGUI::tick()
|
||||
{
|
||||
if (m_atvDemod)
|
||||
{
|
||||
m_objMagSqAverage.feed(m_atvDemod->getMagSq());
|
||||
double magSqDB = CalcDb::dbPower(m_objMagSqAverage.average() / (SDR_RX_SCALED*SDR_RX_SCALED));
|
||||
m_objMagSqAverage(m_atvDemod->getMagSq());
|
||||
double magSqDB = CalcDb::dbPower(m_objMagSqAverage / (SDR_RX_SCALED*SDR_RX_SCALED));
|
||||
ui->channePowerText->setText(tr("%1 dB").arg(magSqDB, 0, 'f', 1));
|
||||
|
||||
if (m_atvDemod->getBFOLocked()) {
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
class PluginAPI;
|
||||
@ -67,7 +67,7 @@ private:
|
||||
|
||||
bool m_blnDoApplySettings;
|
||||
|
||||
MovingAverage<double> m_objMagSqAverage;
|
||||
MovingAverageUtil<double, double, 4> m_objMagSqAverage;
|
||||
int m_intTickCount;
|
||||
|
||||
ScopeVisNG* m_scopeVis;
|
||||
|
@ -330,7 +330,6 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_rdsTimerCount(0),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_rate(625000)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
@ -485,10 +484,6 @@ void BFMDemodGUI::tick()
|
||||
|
||||
ui->channelPower->setText(QString::number(powDbAvg, 'f', 1));
|
||||
|
||||
// Real powDb = CalcDb::dbPower(m_bfmDemod->getMagSq());
|
||||
// m_channelPowerDbAvg.feed(powDb);
|
||||
// ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1));
|
||||
|
||||
Real pilotPowDb = CalcDb::dbPower(m_bfmDemod->getPilotLevel());
|
||||
QString pilotPowDbStr;
|
||||
pilotPowDbStr.sprintf("%+02.1f", pilotPowDb);
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
#include "bfmdemodsettings.h"
|
||||
|
||||
@ -71,7 +70,6 @@ private:
|
||||
SpectrumVis* m_spectrumVis;
|
||||
|
||||
BFMDemod* m_bfmDemod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
int m_rate;
|
||||
std::vector<unsigned int> m_g14ComboIndex;
|
||||
MessageQueue m_inputMessageQueue;
|
||||
|
@ -17,6 +17,8 @@
|
||||
#ifndef PLUGINS_CHANNELRX_DEMODBFM_BFMDEMODSETTINGS_H_
|
||||
#define PLUGINS_CHANNELRX_DEMODBFM_BFMDEMODSETTINGS_H_
|
||||
|
||||
#include "dsp/dsptypes.h"
|
||||
|
||||
class Serializable;
|
||||
|
||||
struct BFMDemodSettings
|
||||
|
@ -51,7 +51,6 @@ DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_squelchGate(0),
|
||||
m_squelchLevel(1e-4),
|
||||
m_squelchOpen(false),
|
||||
m_movingAverage(40, 0),
|
||||
m_fmExcursion(24),
|
||||
m_audioFifo1(48000),
|
||||
m_audioFifo2(48000),
|
||||
@ -69,7 +68,6 @@ DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) :
|
||||
m_sampleBufferIndex = 0;
|
||||
m_scaleFromShort = SDR_RX_SAMP_SZ < sizeof(short)*8 ? 1 : 1<<(SDR_RX_SAMP_SZ - sizeof(short)*8);
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_magsq = 0.0f;
|
||||
m_magsqSum = 0.0f;
|
||||
m_magsqPeak = 0.0f;
|
||||
@ -133,7 +131,7 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
Real re = ci.real() / SDR_RX_SCALED;
|
||||
Real im = ci.imag() / SDR_RX_SCALED;
|
||||
Real magsq = re*re + im*im;
|
||||
m_movingAverage.feed(magsq);
|
||||
m_movingAverage(magsq);
|
||||
|
||||
m_magsqSum += magsq;
|
||||
|
||||
@ -149,7 +147,7 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
|
||||
// AF processing
|
||||
|
||||
if (m_movingAverage.average() > m_squelchLevel)
|
||||
if (m_movingAverage.asDouble() > m_squelchLevel)
|
||||
{
|
||||
if (m_squelchGate > 0)
|
||||
{
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "dsp/lowpass.h"
|
||||
#include "dsp/bandpass.h"
|
||||
#include "dsp/afsquelch.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/afsquelch.h"
|
||||
#include "audio/audiofifo.h"
|
||||
#include "util/message.h"
|
||||
@ -175,7 +175,7 @@ private:
|
||||
double m_squelchLevel;
|
||||
bool m_squelchOpen;
|
||||
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<Real, double, 16> m_movingAverage;
|
||||
double m_magsq;
|
||||
double m_magsqSum;
|
||||
double m_magsqPeak;
|
||||
|
@ -62,7 +62,6 @@ NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) :
|
||||
m_magsqSum(0.0f),
|
||||
m_magsqPeak(0.0f),
|
||||
m_magsqCount(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_afSquelch(2, afSqTones),
|
||||
m_fmExcursion(2400),
|
||||
m_audioFifo(48000),
|
||||
@ -74,7 +73,6 @@ NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) :
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_agcLevel = 1.0;
|
||||
m_movingAverage.resize(32, 0);
|
||||
|
||||
m_ctcssDetector.setCoefficients(3000, 6000.0); // 0.5s / 2 Hz resolution
|
||||
m_afSquelch.setCoefficients(24, 600, 48000.0, 200, 0); // 0.5ms test period, 300ms average span, 48kS/s SR, 100ms attack, no decay
|
||||
@ -162,7 +160,7 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
Real demod = m_phaseDiscri.phaseDiscriminatorDelta(ci, magsqRaw, deviation);
|
||||
|
||||
Real magsq = magsqRaw / (SDR_RX_SCALED*SDR_RX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_movingAverage(magsq);
|
||||
m_magsqSum += magsq;
|
||||
|
||||
if (magsq > m_magsqPeak)
|
||||
@ -198,7 +196,7 @@ void NFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_movingAverage.average() < m_squelchLevel)
|
||||
if ((Real) m_movingAverage < m_squelchLevel)
|
||||
{
|
||||
if (m_squelchCount > 0)
|
||||
{
|
||||
@ -464,7 +462,7 @@ void NFMDemod::applySettings(const NFMDemodSettings& settings, bool force)
|
||||
else
|
||||
{ // input is a value in centi-Bels
|
||||
m_squelchLevel = std::pow(10.0, settings.m_squelch / 100.0);
|
||||
m_movingAverage.fill(0.0);
|
||||
m_movingAverage.reset();
|
||||
}
|
||||
|
||||
m_squelchCount = 0; // reset squelch open counter
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "dsp/ctcssdetector.h"
|
||||
#include "audio/audiofifo.h"
|
||||
#include "util/message.h"
|
||||
#include "util/movingaverage.h"
|
||||
|
||||
#include "nfmdemodsettings.h"
|
||||
|
||||
@ -200,7 +201,7 @@ private:
|
||||
Real m_lastArgument;
|
||||
//Complex m_m1Sample;
|
||||
//Complex m_m2Sample;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<Real, double, 32> m_movingAverage;
|
||||
AFSquelch m_afSquelch;
|
||||
Real m_agcLevel; // AGC will aim to this level
|
||||
Real m_agcFloor; // AGC will not go below this level
|
||||
|
@ -47,7 +47,6 @@ WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
|
||||
m_magsqSum(0.0f),
|
||||
m_magsqPeak(0.0f),
|
||||
m_magsqCount(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_sampleSink(0),
|
||||
m_audioFifo(250000),
|
||||
m_settingsMutex(QMutex::Recursive)
|
||||
@ -60,8 +59,6 @@ WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
|
||||
m_audioBuffer.resize(16384);
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
|
||||
DSPEngine::instance()->addAudioSink(&m_audioFifo);
|
||||
m_udpBufferAudio = new UDPSink<qint16>(this, m_udpBlockSize, m_settings.m_udpPort);
|
||||
|
||||
@ -114,7 +111,7 @@ void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
demod = m_phaseDiscri.phaseDiscriminatorDelta(rf[i], msq, fmDev);
|
||||
Real magsq = msq / (SDR_RX_SCALED*SDR_RX_SCALED);
|
||||
|
||||
m_movingAverage.feed(magsq);
|
||||
m_movingAverage(magsq);
|
||||
m_magsqSum += magsq;
|
||||
|
||||
if (magsq > m_magsqPeak)
|
||||
@ -124,7 +121,7 @@ void WFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
|
||||
m_magsqCount++;
|
||||
|
||||
if(m_movingAverage.average() >= m_squelchLevel)
|
||||
if((Real) m_movingAverage >= m_squelchLevel)
|
||||
m_squelchState = m_settings.m_rfBandwidth / 20; // decay rate
|
||||
|
||||
if (m_squelchState > 0)
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "dsp/nco.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/lowpass.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/fftfilt.h"
|
||||
#include "dsp/phasediscri.h"
|
||||
#include "audio/audiofifo.h"
|
||||
@ -105,7 +105,7 @@ public:
|
||||
virtual QByteArray serialize() const;
|
||||
virtual bool deserialize(const QByteArray& data);
|
||||
|
||||
double getMagSq() const { return m_movingAverage.average(); }
|
||||
double getMagSq() const { return m_movingAverage.asDouble(); }
|
||||
bool getSquelchOpen() const { return m_squelchOpen; }
|
||||
|
||||
void getMagSqLevels(double& avg, double& peak, int& nbSamples)
|
||||
@ -151,7 +151,7 @@ private:
|
||||
int m_magsqCount;
|
||||
|
||||
Real m_lastArgument;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<Real, double, 16> m_movingAverage;
|
||||
Real m_fmExcursion;
|
||||
|
||||
AudioVector m_audioBuffer;
|
||||
|
@ -166,8 +166,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseban
|
||||
m_pluginAPI(pluginAPI),
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_basicSettingsShown(false),
|
||||
m_channelPowerDbAvg(20,0)
|
||||
m_basicSettingsShown(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
@ -290,10 +289,6 @@ void WFMDemodGUI::enterEvent(QEvent*)
|
||||
|
||||
void WFMDemodGUI::tick()
|
||||
{
|
||||
// Real powDb = CalcDb::dbPower(m_wfmDemod->getMagSq());
|
||||
// m_channelPowerDbAvg.feed(powDb);
|
||||
// ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1));
|
||||
|
||||
double magsqAvg, magsqPeak;
|
||||
int nbMagsqSamples;
|
||||
m_wfmDemod->getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples);
|
||||
|
@ -4,7 +4,6 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "wfmdemodsettings.h"
|
||||
@ -52,7 +51,6 @@ private:
|
||||
bool m_squelchOpen;
|
||||
|
||||
WFMDemod* m_wfmDemod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MessageQueue m_inputMessageQueue;
|
||||
|
||||
explicit WFMDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent = 0);
|
||||
|
@ -18,6 +18,8 @@
|
||||
#ifndef PLUGINS_CHANNELRX_DEMODWFM_WFMDEMODSETTINGS_H_
|
||||
#define PLUGINS_CHANNELRX_DEMODWFM_WFMDEMODSETTINGS_H_
|
||||
|
||||
#include "dsp/dsptypes.h"
|
||||
|
||||
class Serializable;
|
||||
|
||||
struct WFMDemodSettings
|
||||
|
@ -112,8 +112,8 @@ void TCPSrcGUI::channelMarkerHighlightedByCursor()
|
||||
void TCPSrcGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_tcpSrc->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(QString::number(m_channelPowerDbAvg.asDouble(), 'f', 1));
|
||||
}
|
||||
|
||||
TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel, QWidget* parent) :
|
||||
@ -123,7 +123,6 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_tcpSrc(0),
|
||||
m_channelMarker(this),
|
||||
m_channelPowerDbAvg(40,0),
|
||||
m_rfBandwidthChanged(false),
|
||||
m_doApplySettings(true)
|
||||
{
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "tcpsrc.h"
|
||||
@ -49,7 +49,7 @@ private:
|
||||
DeviceUISet* m_deviceUISet;
|
||||
TCPSrc* m_tcpSrc;
|
||||
ChannelMarker m_channelMarker;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<Real, double, 40> m_channelPowerDbAvg;
|
||||
|
||||
// settings
|
||||
TCPSrcSettings m_settings;
|
||||
|
@ -46,8 +46,6 @@ AMMod::AMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_basebandSampleRate(48000),
|
||||
m_outputSampleRate(48000),
|
||||
m_inputFrequencyOffset(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_volumeAGC(40, 0),
|
||||
m_audioFifo(4800),
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_fileSize(0),
|
||||
@ -63,8 +61,6 @@ AMMod::AMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_volumeAGC.resize(4096, 0.003, 0);
|
||||
m_magsq = 0.0;
|
||||
|
||||
m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate);
|
||||
@ -131,8 +127,8 @@ void AMMod::pull(Sample& sample)
|
||||
|
||||
double magsq = ci.real() * ci.real() + ci.imag() * ci.imag();
|
||||
magsq /= (SDR_TX_SCALED*SDR_TX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsq = m_movingAverage.average();
|
||||
m_movingAverage(magsq);
|
||||
m_magsq = m_movingAverage.asDouble();
|
||||
|
||||
sample.m_real = (FixReal) ci.real();
|
||||
sample.m_imag = (FixReal) ci.imag();
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "dsp/nco.h"
|
||||
#include "dsp/ncof.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/cwkeyer.h"
|
||||
#include "audio/audiofifo.h"
|
||||
@ -286,8 +286,7 @@ private:
|
||||
bool m_interpolatorConsumed;
|
||||
|
||||
double m_magsq;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
SimpleAGC m_volumeAGC;
|
||||
MovingAverageUtil<double, double, 16> m_movingAverage;
|
||||
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
|
@ -266,7 +266,6 @@ AMModGUI::AMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampl
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_recordLength(0),
|
||||
m_recordSampleRate(48000),
|
||||
m_samplesCount(0),
|
||||
@ -395,8 +394,8 @@ void AMModGUI::enterEvent(QEvent*)
|
||||
void AMModGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_amMod->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
if (((++m_tickCount & 0xf) == 0) && (m_modAFInput == AMMod::AMModInputFile))
|
||||
{
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "ammod.h"
|
||||
@ -66,7 +66,7 @@ private:
|
||||
bool m_doApplySettings;
|
||||
|
||||
AMMod* m_amMod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<double, double, 20> m_channelPowerDbAvg;
|
||||
|
||||
QString m_fileName;
|
||||
quint32 m_recordLength;
|
||||
|
@ -60,7 +60,6 @@ ATVMod::ATVMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_horizontalCount(0),
|
||||
m_lineCount(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_imageOK(false),
|
||||
m_videoFPSq(1.0f),
|
||||
m_videoFPSCount(0.0f),
|
||||
@ -90,8 +89,6 @@ ATVMod::ATVMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_interpolatorDistanceRemain = 0.0f;
|
||||
m_interpolatorDistance = 1.0f;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
|
||||
m_channelizer = new UpChannelizer(this);
|
||||
m_threadedChannelizer = new ThreadedBasebandSampleSource(m_channelizer, this);
|
||||
m_deviceAPI->addThreadedSource(m_threadedChannelizer);
|
||||
@ -165,7 +162,7 @@ void ATVMod::pullFinalize(Complex& ci, Sample& sample)
|
||||
|
||||
double magsq = ci.real() * ci.real() + ci.imag() * ci.imag();
|
||||
magsq /= (SDR_TX_SCALED*SDR_TX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_movingAverage(magsq);
|
||||
|
||||
sample.m_real = (FixReal) ci.real();
|
||||
sample.m_imag = (FixReal) ci.imag();
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include "channel/channelsourceapi.h"
|
||||
#include "dsp/nco.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/fftfilt.h"
|
||||
#include "util/message.h"
|
||||
|
||||
@ -412,7 +412,7 @@ public:
|
||||
virtual bool deserialize(const QByteArray& data);
|
||||
|
||||
int getEffectiveSampleRate() const { return m_tvSampleRate; };
|
||||
double getMagSq() const { return m_movingAverage.average(); }
|
||||
double getMagSq() const { return m_movingAverage.asDouble(); }
|
||||
void getCameraNumbers(std::vector<int>& numbers);
|
||||
|
||||
static void getBaseValues(int outputSampleRate, int linesPerSecond, int& sampleRateUnits, uint32_t& nbPointsPerRateUnit);
|
||||
@ -512,7 +512,7 @@ private:
|
||||
int m_lineCount; //!< current line index in frame
|
||||
float m_fps; //!< resulting frames per second
|
||||
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<double, double, 16> m_movingAverage;
|
||||
quint32 m_levelCalcCount;
|
||||
Real m_peakLevel;
|
||||
Real m_levelSum;
|
||||
|
@ -586,7 +586,6 @@ ATVModGUI::ATVModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_videoLength(0),
|
||||
m_videoFrameRate(48000),
|
||||
m_frameCount(0),
|
||||
@ -741,8 +740,8 @@ void ATVModGUI::enterEvent(QEvent*)
|
||||
void ATVModGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_atvMod->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
if (((++m_tickCount & 0xf) == 0) && (ui->inputSelect->currentIndex() == (int) ATVModSettings::ATVModInputVideo))
|
||||
{
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "atvmod.h"
|
||||
@ -65,7 +65,7 @@ private:
|
||||
bool m_doApplySettings;
|
||||
|
||||
ATVMod* m_atvMod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<double, double, 20> m_channelPowerDbAvg;
|
||||
|
||||
QString m_imageFileName;
|
||||
QString m_videoFileName;
|
||||
|
@ -52,8 +52,6 @@ NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_outputSampleRate(48000),
|
||||
m_inputFrequencyOffset(0),
|
||||
m_modPhasor(0.0f),
|
||||
m_movingAverage(40, 0),
|
||||
m_volumeAGC(40, 0),
|
||||
m_audioFifo(4800),
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_fileSize(0),
|
||||
@ -68,8 +66,6 @@ NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_volumeAGC.resize(4096, 0.003, 0);
|
||||
m_magsq = 0.0;
|
||||
|
||||
m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate);
|
||||
@ -137,8 +133,8 @@ void NFMMod::pull(Sample& sample)
|
||||
|
||||
double magsq = ci.real() * ci.real() + ci.imag() * ci.imag();
|
||||
magsq /= (SDR_TX_SCALED*SDR_TX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsq = m_movingAverage.average();
|
||||
m_movingAverage(magsq);
|
||||
m_magsq = m_movingAverage.asDouble();
|
||||
|
||||
sample.m_real = (FixReal) ci.real();
|
||||
sample.m_imag = (FixReal) ci.imag();
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/lowpass.h"
|
||||
#include "dsp/bandpass.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/cwkeyer.h"
|
||||
#include "audio/audiofifo.h"
|
||||
@ -281,8 +281,7 @@ private:
|
||||
Bandpass<Real> m_bandpass;
|
||||
|
||||
double m_magsq;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
SimpleAGC m_volumeAGC;
|
||||
MovingAverageUtil<double, double, 16> m_movingAverage;
|
||||
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
|
@ -294,7 +294,6 @@ NFMModGUI::NFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_recordLength(0),
|
||||
m_recordSampleRate(48000),
|
||||
m_samplesCount(0),
|
||||
@ -450,8 +449,8 @@ void NFMModGUI::enterEvent(QEvent*)
|
||||
void NFMModGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_nfmMod->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
if (((++m_tickCount & 0xf) == 0) && (m_settings.m_modAFInput == NFMModSettings::NFMModInputFile))
|
||||
{
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "nfmmod.h"
|
||||
@ -64,7 +64,7 @@ private:
|
||||
bool m_doApplySettings;
|
||||
|
||||
NFMMod* m_nfmMod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<double, double, 20> m_channelPowerDbAvg;
|
||||
|
||||
QString m_fileName;
|
||||
quint32 m_recordLength;
|
||||
|
@ -55,7 +55,6 @@ SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_SSBFilterBufferIndex(0),
|
||||
m_DSBFilterBufferIndex(0),
|
||||
m_sampleSink(0),
|
||||
m_movingAverage(40, 0),
|
||||
m_audioFifo(4800),
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_fileSize(0),
|
||||
@ -84,7 +83,6 @@ SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_undersampleCount = 0;
|
||||
m_sumCount = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_magsq = 0.0;
|
||||
|
||||
m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate);
|
||||
@ -166,8 +164,8 @@ void SSBMod::pull(Sample& sample)
|
||||
|
||||
double magsq = ci.real() * ci.real() + ci.imag() * ci.imag();
|
||||
magsq /= (SDR_TX_SCALED*SDR_TX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsq = m_movingAverage.average();
|
||||
m_movingAverage(magsq);
|
||||
m_magsq = m_movingAverage.asDouble();
|
||||
|
||||
sample.m_real = (FixReal) ci.real();
|
||||
sample.m_imag = (FixReal) ci.imag();
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "dsp/basebandsamplesink.h"
|
||||
#include "dsp/ncof.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/fftfilt.h"
|
||||
#include "dsp/cwkeyer.h"
|
||||
@ -303,7 +303,7 @@ private:
|
||||
int m_sumCount;
|
||||
|
||||
double m_magsq;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
MovingAverageUtil<double, double, 16> m_movingAverage;
|
||||
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
|
@ -352,7 +352,6 @@ SSBModGUI::SSBModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_spectrumRate(6000),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_recordLength(0),
|
||||
m_recordSampleRate(48000),
|
||||
m_samplesCount(0),
|
||||
@ -672,8 +671,8 @@ void SSBModGUI::enterEvent(QEvent*)
|
||||
void SSBModGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_ssbMod->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
if (((++m_tickCount & 0xf) == 0) && (m_modAFInput == SSBMod::SSBModInputFile))
|
||||
{
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "ssbmod.h"
|
||||
@ -69,7 +69,7 @@ private:
|
||||
|
||||
SpectrumVis* m_spectrumVis;
|
||||
SSBMod* m_ssbMod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<double, double, 20> m_channelPowerDbAvg;
|
||||
|
||||
QString m_fileName;
|
||||
quint32 m_recordLength;
|
||||
|
@ -51,8 +51,6 @@ WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_outputSampleRate(384000),
|
||||
m_inputFrequencyOffset(0),
|
||||
m_modPhasor(0.0f),
|
||||
m_movingAverage(40, 0),
|
||||
m_volumeAGC(40, 0),
|
||||
m_audioFifo(4800),
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_fileSize(0),
|
||||
@ -73,8 +71,6 @@ WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) :
|
||||
m_audioBuffer.resize(1<<14);
|
||||
m_audioBufferFill = 0;
|
||||
|
||||
m_movingAverage.resize(16, 0);
|
||||
m_volumeAGC.resize(4096, 0.003, 0);
|
||||
m_magsq = 0.0;
|
||||
|
||||
m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate);
|
||||
@ -159,8 +155,8 @@ void WFMMod::pull(Sample& sample)
|
||||
|
||||
double magsq = ci.real() * ci.real() + ci.imag() * ci.imag();
|
||||
magsq /= (SDR_TX_SCALED*SDR_TX_SCALED);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsq = m_movingAverage.average();
|
||||
m_movingAverage(magsq);
|
||||
m_magsq = m_movingAverage.asDouble();
|
||||
|
||||
sample.m_real = (FixReal) ci.real();
|
||||
sample.m_imag = (FixReal) ci.imag();
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "dsp/ncof.h"
|
||||
#include "dsp/interpolator.h"
|
||||
#include "dsp/fftfilt.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "dsp/agc.h"
|
||||
#include "dsp/cwkeyer.h"
|
||||
#include "audio/audiofifo.h"
|
||||
@ -294,8 +294,7 @@ private:
|
||||
int m_rfFilterBufferIndex;
|
||||
|
||||
double m_magsq;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
SimpleAGC m_volumeAGC;
|
||||
MovingAverageUtil<double, double, 16> m_movingAverage;
|
||||
|
||||
AudioVector m_audioBuffer;
|
||||
uint m_audioBufferFill;
|
||||
|
@ -272,7 +272,6 @@ WFMModGUI::WFMModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelMarker(this),
|
||||
m_doApplySettings(true),
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_recordLength(0),
|
||||
m_recordSampleRate(48000),
|
||||
m_samplesCount(0),
|
||||
@ -415,8 +414,8 @@ void WFMModGUI::enterEvent(QEvent*)
|
||||
void WFMModGUI::tick()
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_wfmMod->getMagSq());
|
||||
m_channelPowerDbAvg.feed(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.average(), 0, 'f', 1));
|
||||
m_channelPowerDbAvg(powDb);
|
||||
ui->channelPower->setText(tr("%1 dB").arg(m_channelPowerDbAvg.asDouble(), 0, 'f', 1));
|
||||
|
||||
if (((++m_tickCount & 0xf) == 0) && (m_modAFInput == WFMMod::WFMModInputFile))
|
||||
{
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <plugin/plugininstancegui.h>
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "dsp/movingaverage.h"
|
||||
#include "util/movingaverage.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
#include "wfmmod.h"
|
||||
@ -68,7 +68,7 @@ private:
|
||||
// ThreadedBasebandSampleSource* m_threadedChannelizer;
|
||||
// UpChannelizer* m_channelizer;
|
||||
WFMMod* m_wfmMod;
|
||||
MovingAverage<double> m_channelPowerDbAvg;
|
||||
MovingAverageUtil<double, double, 20> m_channelPowerDbAvg;
|
||||
|
||||
QString m_fileName;
|
||||
quint32 m_recordLength;
|
||||
|
@ -107,8 +107,6 @@ UDPSinkGUI::UDPSinkGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS
|
||||
ui(new Ui::UDPSinkGUI),
|
||||
m_pluginAPI(pluginAPI),
|
||||
m_deviceUISet(deviceUISet),
|
||||
m_channelPowerAvg(4, 1e-10),
|
||||
m_inPowerAvg(4, 1e-10),
|
||||
m_tickCount(0),
|
||||
m_channelMarker(this),
|
||||
m_rfBandwidthChanged(false),
|
||||
@ -454,14 +452,14 @@ void UDPSinkGUI::enterEvent(QEvent*)
|
||||
|
||||
void UDPSinkGUI::tick()
|
||||
{
|
||||
m_channelPowerAvg.feed(m_udpSink->getMagSq());
|
||||
m_inPowerAvg.feed(m_udpSink->getInMagSq());
|
||||
m_channelPowerAvg(m_udpSink->getMagSq());
|
||||
m_inPowerAvg(m_udpSink->getInMagSq());
|
||||
|
||||
if (m_tickCount % 4 == 0)
|
||||
{
|
||||
double powDb = CalcDb::dbPower(m_channelPowerAvg.average());
|
||||
double powDb = CalcDb::dbPower(m_channelPowerAvg.asDouble());
|
||||
ui->channelPower->setText(tr("%1 dB").arg(powDb, 0, 'f', 1));
|
||||
double inPowDb = CalcDb::dbPower(m_inPowerAvg.average());
|
||||
double inPowDb = CalcDb::dbPower(m_inPowerAvg.asDouble());
|
||||
ui->inputPower->setText(tr("%1").arg(inPowDb, 0, 'f', 1));
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "gui/rollupwidget.h"
|
||||
#include "dsp/channelmarker.h"
|
||||
#include "util/messagequeue.h"
|
||||
#include "util/movingaverage.h"
|
||||
|
||||
#include "udpsink.h"
|
||||
#include "udpsinksettings.h"
|
||||
@ -62,8 +63,8 @@ private:
|
||||
DeviceUISet* m_deviceUISet;
|
||||
SpectrumVis* m_spectrumVis;
|
||||
UDPSink* m_udpSink;
|
||||
MovingAverage<double> m_channelPowerAvg;
|
||||
MovingAverage<double> m_inPowerAvg;
|
||||
MovingAverageUtil<double, double, 4> m_channelPowerAvg;
|
||||
MovingAverageUtil<double, double, 4> m_inPowerAvg;
|
||||
uint32_t m_tickCount;
|
||||
ChannelMarker m_channelMarker;
|
||||
|
||||
|
@ -32,6 +32,13 @@ class MovingAverageUtil
|
||||
: m_num_samples(0), m_index(0), m_total(0)
|
||||
{ }
|
||||
|
||||
void reset()
|
||||
{
|
||||
m_num_samples = 0;
|
||||
m_index = 0;
|
||||
m_total = 0;
|
||||
}
|
||||
|
||||
void operator()(T sample)
|
||||
{
|
||||
if (m_num_samples < N) // fill up
|
||||
@ -42,14 +49,14 @@ class MovingAverageUtil
|
||||
else // roll
|
||||
{
|
||||
T& oldest = m_samples[m_index];
|
||||
m_index = (m_index + 1) % N;
|
||||
m_total += sample - oldest;
|
||||
oldest = sample;
|
||||
m_index = (m_index + 1) % N;
|
||||
}
|
||||
}
|
||||
|
||||
operator double() const { return m_num_samples > 0 ? m_total / std::min(m_num_samples, N) : 0.0d; }
|
||||
operator float() const { return m_num_samples > 0 ? m_total / std::min(m_num_samples, N) : 0.0f; }
|
||||
double asDouble() const { return m_total / N; }
|
||||
float asFloat() const { return m_total / N; }
|
||||
operator T() const { return m_total / N; }
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user