mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -05:00
WFM Demod: implemented the signal gauge
This commit is contained in:
parent
2c8374bd9e
commit
6b97d9ea59
@ -31,7 +31,13 @@ MESSAGE_CLASS_DEFINITION(WFMDemod::MsgConfigureWFMDemod, Message)
|
||||
WFMDemod::WFMDemod(BasebandSampleSink* sampleSink) :
|
||||
m_sampleSink(sampleSink),
|
||||
m_audioFifo(4, 250000),
|
||||
m_settingsMutex(QMutex::Recursive)
|
||||
m_settingsMutex(QMutex::Recursive),
|
||||
m_squelchOpen(false),
|
||||
m_magsq(0.0f),
|
||||
m_magsqSum(0.0f),
|
||||
m_magsqPeak(0.0f),
|
||||
m_magsqCount(0)
|
||||
|
||||
{
|
||||
setObjectName("WFMDemod");
|
||||
|
||||
@ -90,16 +96,26 @@ void WFMDemod::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() / 32768.0f, it->imag() / 32768.0f);
|
||||
Complex c(it->real(), it->imag());
|
||||
c *= m_nco.nextIQ();
|
||||
|
||||
rf_out = m_rfFilter->runFilt(c, &rf); // filter RF before demod
|
||||
|
||||
for (int i =0 ; i <rf_out; i++)
|
||||
for (int i = 0 ; i < rf_out; i++)
|
||||
{
|
||||
demod = m_phaseDiscri.phaseDiscriminatorDelta(rf[i], msq, fmDev);
|
||||
Real magsq = msq / (1<<30);
|
||||
|
||||
m_movingAverage.feed(msq);
|
||||
m_movingAverage.feed(magsq);
|
||||
m_magsqSum += magsq;
|
||||
|
||||
if (magsq > m_magsqPeak)
|
||||
{
|
||||
m_magsqPeak = magsq;
|
||||
}
|
||||
|
||||
m_magsqCount++;
|
||||
|
||||
if(m_movingAverage.average() >= m_squelchLevel)
|
||||
m_squelchState = m_running.m_rfBandwidth / 20; // decay rate
|
||||
|
@ -53,6 +53,17 @@ public:
|
||||
Real getMagSq() const { return m_movingAverage.average(); }
|
||||
bool getSquelchOpen() const { return m_squelchOpen; }
|
||||
|
||||
void getMagSqLevels(Real& avg, Real& peak, int& nbSamples)
|
||||
{
|
||||
avg = m_magsqSum / m_magsqCount;
|
||||
m_magsq = avg;
|
||||
peak = m_magsqPeak;
|
||||
nbSamples = m_magsqCount;
|
||||
m_magsqSum = 0.0f;
|
||||
m_magsqPeak = 0.0f;
|
||||
m_magsqCount = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
class MsgConfigureWFMDemod : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
@ -131,6 +142,10 @@ private:
|
||||
Real m_squelchLevel;
|
||||
int m_squelchState;
|
||||
bool m_squelchOpen;
|
||||
Real m_magsq; //!< displayed averaged value
|
||||
Real m_magsqSum;
|
||||
Real m_magsqPeak;
|
||||
int m_magsqCount;
|
||||
|
||||
Real m_lastArgument;
|
||||
MovingAverage<double> m_movingAverage;
|
||||
|
@ -224,6 +224,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceSourceAPI *deviceAPI, QWidg
|
||||
ui->setupUi(this);
|
||||
ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold));
|
||||
ui->deltaFrequency->setValueRange(7, 0U, 9999999U);
|
||||
ui->channelPowerMeter->setColorTheme(LevelMeterSignalDB::ColorGreenAndBlue);
|
||||
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
@ -314,9 +315,21 @@ 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));
|
||||
// Real powDb = CalcDb::dbPower(m_wfmDemod->getMagSq());
|
||||
// m_channelPowerDbAvg.feed(powDb);
|
||||
// ui->channelPower->setText(QString::number(m_channelPowerDbAvg.average(), 'f', 1));
|
||||
|
||||
Real magsqAvg, magsqPeak;
|
||||
int nbMagsqSamples;
|
||||
m_wfmDemod->getMagSqLevels(magsqAvg, magsqPeak, nbMagsqSamples);
|
||||
Real powDbAvg = CalcDb::dbPower(magsqAvg);
|
||||
Real powDbPeak = CalcDb::dbPower(magsqPeak);
|
||||
|
||||
ui->channelPower->setText(QString::number(powDbAvg, 'f', 1));
|
||||
ui->channelPowerMeter->levelChanged(
|
||||
(100.0f + powDbAvg) / 100.0f,
|
||||
(100.0f + powDbPeak) / 100.0f,
|
||||
nbMagsqSamples);
|
||||
|
||||
bool squelchOpen = m_wfmDemod->getSquelchOpen();
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
const PluginDescriptor WFMPlugin::m_pluginDescriptor = {
|
||||
QString("WFM Demodulator"),
|
||||
QString("3.1.0"),
|
||||
QString("3.4.1"),
|
||||
QString("(c) Edouard Griffiths, F4EXB"),
|
||||
QString("https://github.com/f4exb/sdrangel"),
|
||||
true,
|
||||
|
Loading…
Reference in New Issue
Block a user