From 076eeb7704e931337fe5702a4d632e2ccf3e97aa Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 22 Feb 2021 22:37:11 +0100 Subject: [PATCH] DATV demod: implemented CNR display --- plugins/channelrx/demoddatv/datvdemod.h | 1 + .../channelrx/demoddatv/datvdemodbaseband.h | 1 + plugins/channelrx/demoddatv/datvdemodgui.cpp | 1 + plugins/channelrx/demoddatv/datvdemodsink.cpp | 28 +++++++++++++++---- plugins/channelrx/demoddatv/datvdemodsink.h | 5 +++- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/plugins/channelrx/demoddatv/datvdemod.h b/plugins/channelrx/demoddatv/datvdemod.h index f17835a47..ee5029399 100644 --- a/plugins/channelrx/demoddatv/datvdemod.h +++ b/plugins/channelrx/demoddatv/datvdemod.h @@ -67,6 +67,7 @@ public: void SetTVScreen(TVScreen *objScreen) { m_basebandSink->setTVScreen(objScreen); } void setMERLabel(QLabel *merLabel) { m_basebandSink->setMERLabel(merLabel); } + void setCNRLabel(QLabel *cnrLabel) { m_basebandSink->setCNRLabel(cnrLabel); } DATVideostream *SetVideoRender(DATVideoRender *objScreen) { return m_basebandSink->SetVideoRender(objScreen); } bool audioActive() { return m_basebandSink->audioActive(); } bool audioDecodeOK() { return m_basebandSink->audioDecodeOK(); } diff --git a/plugins/channelrx/demoddatv/datvdemodbaseband.h b/plugins/channelrx/demoddatv/datvdemodbaseband.h index be59c705b..2a923ffc0 100644 --- a/plugins/channelrx/demoddatv/datvdemodbaseband.h +++ b/plugins/channelrx/demoddatv/datvdemodbaseband.h @@ -87,6 +87,7 @@ public: double getMagSq() const { return m_sink.getMagSq(); } void setTVScreen(TVScreen *tvScreen) { m_sink.setTVScreen(tvScreen); } void setMERLabel(QLabel *merLabel) { m_sink.setMERLabel(merLabel); } + void setCNRLabel(QLabel *cnrLabel) { m_sink.setCNRLabel(cnrLabel); } void setMessageQueueToGUI(MessageQueue *messageQueue) { m_sink.setMessageQueueToGUI(messageQueue); } void setBasebandSampleRate(int sampleRate); //!< To be used when supporting thread is stopped DATVideostream *SetVideoRender(DATVideoRender *objScreen) { return m_sink.SetVideoRender(objScreen); } diff --git a/plugins/channelrx/demoddatv/datvdemodgui.cpp b/plugins/channelrx/demoddatv/datvdemodgui.cpp index 6ca4a4f6d..7e9a58fb4 100644 --- a/plugins/channelrx/demoddatv/datvdemodgui.cpp +++ b/plugins/channelrx/demoddatv/datvdemodgui.cpp @@ -196,6 +196,7 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba m_objDATVDemod->SetTVScreen(ui->screenTV); m_objDATVDemod->setMERLabel(ui->merText); + m_objDATVDemod->setCNRLabel(ui->cnrText); connect(m_objDATVDemod->SetVideoRender(ui->screenTV_2), &DATVideostream::onDataPackets, this, &DATVDemodGUI::on_StreamDataAvailable); connect(ui->screenTV_2, &DATVideoRender::onMetaDataChanged, this, &DATVDemodGUI::on_StreamMetaDataChanged); diff --git a/plugins/channelrx/demoddatv/datvdemodsink.cpp b/plugins/channelrx/demoddatv/datvdemodsink.cpp index bcefe8d1e..4e36c05ac 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.cpp +++ b/plugins/channelrx/demoddatv/datvdemodsink.cpp @@ -38,6 +38,7 @@ DATVDemodSink::DATVDemodSink() : m_udpStream(leansdr::tspacket::SIZE), m_objRenderThread(nullptr), m_merLabel(nullptr), + m_cnrLabel(nullptr), m_audioFifo(48000), m_blnRenderingVideo(false), m_blnStartStopVideo(false), @@ -87,11 +88,14 @@ bool DATVDemodSink::setTVScreen(TVScreen *objScreen) return true; } -void DATVDemodSink::setMERLabel(QLabel *merLabel) -{ +void DATVDemodSink::setMERLabel(QLabel *merLabel) { m_merLabel = merLabel; } +void DATVDemodSink::setCNRLabel(QLabel *cnrLabel) { + m_cnrLabel = cnrLabel; +} + DATVideostream *DATVDemodSink::SetVideoRender(DATVideoRender *objScreen) { m_objRegisteredVideoRender = objScreen; @@ -350,6 +354,9 @@ void DATVDemodSink::CleanUpDATVFramework(bool blnRelease) if (r_merGauge != nullptr) { delete r_merGauge; } + if (r_cnrGauge != nullptr) { + delete r_cnrGauge; + } // INPUT //if(p_rawiq!=nullptr) delete p_rawiq; @@ -504,6 +511,7 @@ void DATVDemodSink::CleanUpDATVFramework(bool blnRelease) //CONSTELLATION r_scope_symbols = nullptr; r_merGauge = nullptr; + r_cnrGauge = nullptr; //DVB-S2 p_slots_dvbs2 = nullptr; @@ -650,7 +658,7 @@ void DATVDemodSink::InitDATVFramework() if (m_objCfg.cnr == true) { r_cnr = new leansdr::cnr_fft(m_objScheduler, *p_preprocessed, *p_cnr, m_objCfg.Fm/m_objCfg.Fs); - r_cnr->decimation = decimation(m_objCfg.Fs, 1); // 1 Hz + r_cnr->decimation = decimation(m_objCfg.Fs, 5); // 5 Hz } // FILTERING @@ -779,6 +787,10 @@ void DATVDemodSink::InitDATVFramework() r_merGauge = new leansdr::datvgaugelabel(m_objScheduler, *p_mer, m_merLabel); } + if (m_cnrLabel) { + r_cnrGauge = new leansdr::datvgaugelabel(m_objScheduler, *p_cnr, m_cnrLabel); + } + // DECONVOLUTION AND SYNCHRONIZATION p_bytes = new leansdr::pipebuf(m_objScheduler, "bytes", BUF_BYTES); @@ -972,15 +984,15 @@ void DATVDemodSink::InitDATVS2Framework() //******** -> if ( m_objCfg.Fderot>0 ) // CNR ESTIMATION - /** + p_cnr = new leansdr::pipebuf(m_objScheduler, "cnr", BUF_SLOW); if (m_objCfg.cnr == true) { r_cnr = new leansdr::cnr_fft(m_objScheduler, *p_preprocessed, *p_cnr, m_objCfg.Fm/m_objCfg.Fs); - r_cnr->decimation = decimation(m_objCfg.Fs, 1); // 1 Hz + r_cnr->decimation = decimation(m_objCfg.Fs, 5); // 5 Hz } - **/ + // FILTERING //******** -> if ( m_objCfg.resample ) @@ -1087,6 +1099,10 @@ void DATVDemodSink::InitDATVS2Framework() r_merGauge = new leansdr::datvgaugelabel(m_objScheduler, *p_mer, m_merLabel); } + if (m_cnrLabel) { + r_cnrGauge = new leansdr::datvgaugelabel(m_objScheduler, *p_cnr, m_cnrLabel); + } + // Bit-flipping mode. // Deinterleave into hard bits. diff --git a/plugins/channelrx/demoddatv/datvdemodsink.h b/plugins/channelrx/demoddatv/datvdemodsink.h index 6ead8553a..7d7ccffb0 100644 --- a/plugins/channelrx/demoddatv/datvdemodsink.h +++ b/plugins/channelrx/demoddatv/datvdemodsink.h @@ -59,6 +59,7 @@ public: bool setTVScreen(TVScreen *objScreen); void setMERLabel(QLabel *merLabel); + void setCNRLabel(QLabel *cnrLabel); DATVideostream * SetVideoRender(DATVideoRender *objScreen); bool audioActive(); bool audioDecodeOK(); @@ -114,7 +115,7 @@ private: Fs(2.4e6), Fderot(0), anf(0), - cnr(false), + cnr(true), decim(0), Fm(2e6), constellation(leansdr::cstln_lut::QPSK), @@ -275,6 +276,7 @@ private: leansdr::datvconstellation *r_scope_symbols; leansdr::datvdvbs2constellation *r_scope_symbols_dvbs2; leansdr::datvgaugelabel *r_merGauge; + leansdr::datvgaugelabel *r_cnrGauge; //*************** DATV PARAMETERS *************** TVScreen *m_objRegisteredTVScreen; @@ -283,6 +285,7 @@ private: DATVUDPStream m_udpStream; DATVideoRenderThread *m_objRenderThread; QLabel *m_merLabel; + QLabel *m_cnrLabel; // Audio AudioFifo m_audioFifo;