SDRdaemonFEC plugin: further improve stats display on GUI and updated readme accordingly

pull/27/head
f4exb 2016-07-28 04:49:33 +02:00
rodzic aa68c907fa
commit b157186b32
8 zmienionych plików z 48 dodań i 45 usunięć

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 32 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 32 KiB

Plik binarny nie jest wyświetlany.

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 6.1 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 6.7 KiB

Wyświetl plik

@ -63,39 +63,43 @@ The system tries to compensate read / write unbalance however at start or when a
![SDR Daemon FEC status1 GUI](../../../doc/img/SDRdaemonFEC_plugin_04.png)
<h4>4.1: Stream status</h4>
<h4>4.1: Minimum total number of blocks per frame</h4>
This is the minimum total number of blocks per frame during the last polling period. If all blocks were received for all frames then this number is the nominal number of original blocks plus FEC blocks and the background lits in green.
<h4>4.2: Average total number of blocks received by frame</h4>
Moving average over the last 10 frames of the total number of blocks received per frame.
<h4>4.3: Stream status</h4>
The color of the icon indicates stream status:
- Green: all original blocks have been received for all frames during the last polling timeframe
- Magenta/Pink: some original blocks were reconstructed from FEC blocks for some frames during the last polling timeframe
- Pink: some original blocks were reconstructed from FEC blocks for some frames during the last polling timeframe
- No color: some original blocks were definitely lost for some frames during the last polling timeframe
<h4>4.2: Minimum number of blocks received by frame</h4>
<h4>4.4: Minimum number of original blocks received by frame</h4>
Minimum number of blocks received by frame during the last polling timeframe. Ideally this should match the nominal number of blocks per frame (see 4.7) for no lost blocks (green lock icon).
Minimum number of original blocks received by frame during the last polling timeframe. Ideally this should match the nominal number of original blocks per frame which is 128 (green lock icon). Anything below the nominal number of original blocks minus FEC blocks means data loss (lock icon off). In betweem FEC is used to recover lost blocks (pink lock icon)
<h4>4.3: Average number of blocks received by frame</h4>
<h4>4.5: Maximum number of FEC blocks used by frame</h4>
Moving average over the last 10 frames of the number of blocks received per frame.
Maximum number of FEC blocks used for original blocks recovery during the last polling timeframe. Ideally this should be 0 when no blocks are lost but the system is able to correct lost blocks up to the nominal number of FEC blocks (Pink lock icon).
<h4>4.4: Maximum number of FEC blocks used by frame</h4>
Maximum number of FEC blocks used for original blocks recovery during the last polling timeframe. Ideally this should be 0 when no blocks are lost but the system is able to correct lost blocks up to the nominal number of FEC blocks (Magenta/Pink lock icon).
<h4>4.5: Average number of FEC blocks used for original blocks recovery by frame</h4>
<h4>4.6: Average number of FEC blocks used for original blocks recovery by frame</h4>
Moving average over the last 10 frames of the number of FEC blocks used for original blocks recovery per frame.
<h4>4.6: Receive buffer length</h4>
<h4>4.7: Receive buffer length</h4>
This is the main buffer (writes from UDP / reads from DSP engine) length in units of time (seconds). As read and write pointers are normally about half the buffer apart the nominal delay introduced by the buffer is the half of this value.
<h4>4.7: FEC nominal values</h4>
<h4>4.8: FEC nominal values</h4>
This is the nominal (Tx side) total number of blocks sent by frame (original blocks plus FEC blocks) and the nominal number of FEC blocks sent by frame separated by a slash (/)
<h4>4.8: Main buffer R/W pointers positions</h4>
<h4>4.9: Main buffer R/W pointers positions</h4>
Read and write pointers should always be a half buffer distance buffer apart. This is the difference in percent of the main buffer size from this ideal position.

Wyświetl plik

@ -288,6 +288,7 @@ bool SDRdaemonFECGui::handleMessage(const Message& message)
m_startingTimeStamp.tv_sec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_sec();
m_startingTimeStamp.tv_usec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_usec();
m_framesDecodingStatus = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getFramesDecodingStatus();
m_allBlocksReceived = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).allBlocksReceived();
m_bufferLengthInSecs = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferLengthInSecs();
m_bufferGauge = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferGauge();
m_minNbBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getMinNbBlocks();
@ -624,6 +625,12 @@ void SDRdaemonFECGui::updateWithStreamTime()
s = QString::number(m_minNbBlocks, 'f', 0);
ui->minNbBlocksText->setText(tr("%1").arg(s));
if (m_allBlocksReceived) {
ui->minNbBlocksText->setStyleSheet("QLabel { background-color : green; }");
} else {
ui->minNbBlocksText->setStyleSheet("QLabel { background:rgb(56,56,56); }");
}
s = QString::number(m_avgNbBlocks, 'f', 1);
ui->avgNbBlocksText->setText(tr("%1").arg(s));

Wyświetl plik

@ -65,6 +65,7 @@ private:
quint64 m_centerFrequency;
struct timeval m_startingTimeStamp;
int m_framesDecodingStatus;
bool m_allBlocksReceived;
float m_bufferLengthInSecs;
int32_t m_bufferGauge;
int m_minNbBlocks;

Wyświetl plik

@ -29,16 +29,7 @@
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>2</number>
</property>
<item>
@ -312,23 +303,6 @@
</item>
<item>
<layout class="QHBoxLayout" name="streamLayout">
<item>
<widget class="QToolButton" name="allFramesDecoded">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Frames status: green = all original received, pink = some recovered by FEC, none = some lost</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../sdrbase/resources/res.qrc">
<normaloff>:/locked.png</normaloff>:/locked.png</iconset>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="minNbBlocksText">
<property name="minimumSize">
@ -338,7 +312,7 @@
</size>
</property>
<property name="toolTip">
<string>Minimum number of blocks retrieved per frame</string>
<string>Minimum number of blocks retrieved per frame (green: all blocks received)</string>
</property>
<property name="text">
<string>000</string>
@ -368,9 +342,19 @@
</widget>
</item>
<item>
<widget class="Line" name="lineStream4">
<property name="orientation">
<enum>Qt::Vertical</enum>
<widget class="QToolButton" name="allFramesDecoded">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Frames status: green = all original received, pink = some recovered by FEC, none = some lost</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../sdrbase/resources/res.qrc">
<normaloff>:/locked.png</normaloff>:/locked.png</iconset>
</property>
</widget>
</item>

Wyświetl plik

@ -167,6 +167,7 @@ public:
uint32_t get_tv_sec() const { return m_tv_sec; }
uint32_t get_tv_usec() const { return m_tv_usec; }
int getFramesDecodingStatus() const { return m_framesDecodingStatus; }
bool allBlocksReceived() const { return m_allBlocksReceived; }
float getBufferLengthInSecs() const { return m_bufferLenSec; }
int32_t getBufferGauge() const { return m_bufferGauge; }
int getMinNbBlocks() const { return m_minNbBlocks; }
@ -183,6 +184,7 @@ public:
float bufferLenSec,
int32_t bufferGauge,
int framesDecodingStatus,
bool allBlocksReceived,
int minNbBlocks,
int minNbOriginalBlocks,
int maxNbRecovery,
@ -197,6 +199,7 @@ public:
bufferLenSec,
bufferGauge,
framesDecodingStatus,
allBlocksReceived,
minNbBlocks,
minNbOriginalBlocks,
maxNbRecovery,
@ -211,6 +214,7 @@ public:
uint32_t m_tv_sec;
uint32_t m_tv_usec;
int m_framesDecodingStatus;
bool m_allBlocksReceived;
float m_bufferLenSec;
int32_t m_bufferGauge;
int m_minNbBlocks;
@ -227,6 +231,7 @@ public:
float bufferLenSec,
int32_t bufferGauge,
int framesDecodingStatus,
bool allBlocksReceived,
int minNbBlocks,
int minNbOriginalBlocks,
int maxNbRecovery,
@ -239,6 +244,7 @@ public:
m_tv_sec(tv_sec),
m_tv_usec(tv_usec),
m_framesDecodingStatus(framesDecodingStatus),
m_allBlocksReceived(allBlocksReceived),
m_bufferLenSec(bufferLenSec),
m_bufferGauge(bufferGauge),
m_minNbBlocks(minNbBlocks),

Wyświetl plik

@ -238,6 +238,7 @@ void SDRdaemonFECUDPHandler::tick()
m_sdrDaemonBuffer.getBufferLengthInSecs(),
m_sdrDaemonBuffer.getBufferGauge(),
framesDecodingStatus,
minNbBlocks == nbOriginalBlocks + nbFECblocks,
minNbBlocks,
minNbOriginalBlocks,
m_sdrDaemonBuffer.getMaxNbRecovery(),