DATV: added LDPC max bit flip control and future soft LDPC control. Updated documentation
| 
		 Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 60 KiB  | 
| 
		 Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 52 KiB  | 
| 
		 Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 28 KiB  | 
| 
		 Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 27 KiB  | 
@ -281,6 +281,8 @@ void DATVDemodGUI::displaySettings()
 | 
			
		||||
    ui->chkHardMetric->setChecked(m_settings.m_hardMetric);
 | 
			
		||||
    ui->chkFastlock->setChecked(m_settings.m_fastLock);
 | 
			
		||||
    ui->chkViterbi->setChecked(m_settings.m_viterbi);
 | 
			
		||||
    ui->softLDPC->setChecked(m_settings.m_softLDPC);
 | 
			
		||||
    ui->maxBitflips->setValue(m_settings.m_maxBitflips);
 | 
			
		||||
 | 
			
		||||
    if (m_settings.m_standard == DATVDemodSettings::dvb_version::DVB_S)
 | 
			
		||||
    {
 | 
			
		||||
@ -288,10 +290,15 @@ void DATVDemodGUI::displaySettings()
 | 
			
		||||
        ui->chkHardMetric->setEnabled(true);
 | 
			
		||||
        ui->chkFastlock->setEnabled(true);
 | 
			
		||||
        ui->chkViterbi->setEnabled(true);
 | 
			
		||||
        ui->softLDPC->setEnabled(false);
 | 
			
		||||
        ui->maxBitflips->setEnabled(false);
 | 
			
		||||
        ui->chkAllowDrift->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkHardMetric->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkFastlock->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkViterbi->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->softLDPC->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->maxBitflips->setStyleSheet("QSpinBox { color: gray }");
 | 
			
		||||
        ui->maxBitflipsLabel->setStyleSheet("QLabel { color: gray }");
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
@ -299,10 +306,15 @@ void DATVDemodGUI::displaySettings()
 | 
			
		||||
        ui->chkHardMetric->setEnabled(false);
 | 
			
		||||
        ui->chkFastlock->setEnabled(false);
 | 
			
		||||
        ui->chkViterbi->setEnabled(false);
 | 
			
		||||
        ui->softLDPC->setEnabled(true);
 | 
			
		||||
        ui->maxBitflips->setEnabled(true);
 | 
			
		||||
        ui->chkAllowDrift->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkHardMetric->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkFastlock->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkViterbi->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->softLDPC->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->maxBitflips->setStyleSheet("QSpinBox { color: white }");
 | 
			
		||||
        ui->maxBitflipsLabel->setStyleSheet("QLabel { color: white }");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (m_settings.m_standard == DATVDemodSettings::dvb_version::DVB_S) {
 | 
			
		||||
@ -508,10 +520,15 @@ void DATVDemodGUI::on_cmbStandard_currentIndexChanged(int index)
 | 
			
		||||
        ui->chkHardMetric->setEnabled(true);
 | 
			
		||||
        ui->chkFastlock->setEnabled(true);
 | 
			
		||||
        ui->chkViterbi->setEnabled(true);
 | 
			
		||||
        ui->softLDPC->setEnabled(false);
 | 
			
		||||
        ui->maxBitflips->setEnabled(false);
 | 
			
		||||
        ui->chkAllowDrift->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkHardMetric->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkFastlock->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->chkViterbi->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->softLDPC->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->maxBitflips->setStyleSheet("QSpinBox { color: gray }");
 | 
			
		||||
        ui->maxBitflipsLabel->setStyleSheet("QLabel { color: gray }");
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
@ -519,10 +536,15 @@ void DATVDemodGUI::on_cmbStandard_currentIndexChanged(int index)
 | 
			
		||||
        ui->chkHardMetric->setEnabled(false);
 | 
			
		||||
        ui->chkFastlock->setEnabled(false);
 | 
			
		||||
        ui->chkViterbi->setEnabled(false);
 | 
			
		||||
        ui->softLDPC->setEnabled(true);
 | 
			
		||||
        ui->maxBitflips->setEnabled(true);
 | 
			
		||||
        ui->chkAllowDrift->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkHardMetric->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkFastlock->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->chkViterbi->setStyleSheet("QCheckBox { color: gray }");
 | 
			
		||||
        ui->softLDPC->setStyleSheet("QCheckBox { color: white }");
 | 
			
		||||
        ui->maxBitflips->setStyleSheet("QSpinBox { color: white }");
 | 
			
		||||
        ui->maxBitflipsLabel->setStyleSheet("QLabel { color: white }");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (m_settings.m_standard == DATVDemodSettings::dvb_version::DVB_S) {
 | 
			
		||||
@ -560,6 +582,18 @@ void DATVDemodGUI::on_cmbFEC_currentIndexChanged(const QString &arg1)
 | 
			
		||||
    applySettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DATVDemodGUI::on_softLDPC_clicked()
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_softLDPC = ui->softLDPC->isChecked();
 | 
			
		||||
    applySettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DATVDemodGUI::on_maxBitflips_valueChanged(int value)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_maxBitflips = value;
 | 
			
		||||
    applySettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DATVDemodGUI::on_chkViterbi_clicked()
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_viterbi = ui->chkViterbi->isChecked();
 | 
			
		||||
 | 
			
		||||
@ -67,6 +67,8 @@ private slots:
 | 
			
		||||
    void on_cmbStandard_currentIndexChanged(int index);
 | 
			
		||||
    void on_cmbModulation_currentIndexChanged(const QString &arg1);
 | 
			
		||||
    void on_cmbFEC_currentIndexChanged(const QString &arg1);
 | 
			
		||||
    void on_softLDPC_clicked();
 | 
			
		||||
    void on_maxBitflips_valueChanged(int value);
 | 
			
		||||
    void on_chkViterbi_clicked();
 | 
			
		||||
    void on_chkHardMetric_clicked();
 | 
			
		||||
    void on_resetDefaults_clicked();
 | 
			
		||||
 | 
			
		||||
@ -216,7 +216,7 @@
 | 
			
		||||
       <x>0</x>
 | 
			
		||||
       <y>0</y>
 | 
			
		||||
       <width>496</width>
 | 
			
		||||
       <height>250</height>
 | 
			
		||||
       <height>281</height>
 | 
			
		||||
      </rect>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="minimumSize">
 | 
			
		||||
@ -225,12 +225,6 @@
 | 
			
		||||
       <height>250</height>
 | 
			
		||||
      </size>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="maximumSize">
 | 
			
		||||
      <size>
 | 
			
		||||
       <width>496</width>
 | 
			
		||||
       <height>250</height>
 | 
			
		||||
      </size>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="title">
 | 
			
		||||
      <string>DATV Settings</string>
 | 
			
		||||
     </property>
 | 
			
		||||
@ -286,7 +280,7 @@
 | 
			
		||||
        <x>230</x>
 | 
			
		||||
        <y>20</y>
 | 
			
		||||
        <width>261</width>
 | 
			
		||||
        <height>221</height>
 | 
			
		||||
        <height>251</height>
 | 
			
		||||
       </rect>
 | 
			
		||||
      </property>
 | 
			
		||||
      <property name="frameShape">
 | 
			
		||||
@ -451,7 +445,7 @@
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>10</x>
 | 
			
		||||
         <y>120</y>
 | 
			
		||||
         <width>111</width>
 | 
			
		||||
         <width>121</width>
 | 
			
		||||
         <height>20</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
       </property>
 | 
			
		||||
@ -524,7 +518,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>70</x>
 | 
			
		||||
         <y>200</y>
 | 
			
		||||
         <y>230</y>
 | 
			
		||||
         <width>181</width>
 | 
			
		||||
         <height>20</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -540,7 +534,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>10</x>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <y>210</y>
 | 
			
		||||
         <width>111</width>
 | 
			
		||||
         <height>16</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -594,7 +588,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>130</x>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <y>210</y>
 | 
			
		||||
         <width>121</width>
 | 
			
		||||
         <height>16</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -610,7 +604,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>10</x>
 | 
			
		||||
         <y>200</y>
 | 
			
		||||
         <y>230</y>
 | 
			
		||||
         <width>61</width>
 | 
			
		||||
         <height>15</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -623,7 +617,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>10</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <width>91</width>
 | 
			
		||||
         <height>22</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -651,7 +645,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>140</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <width>41</width>
 | 
			
		||||
         <height>23</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -673,7 +667,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>106</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <width>28</width>
 | 
			
		||||
         <height>23</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -686,7 +680,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>180</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <width>28</width>
 | 
			
		||||
         <height>23</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -699,7 +693,7 @@
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>210</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <y>180</y>
 | 
			
		||||
         <width>41</width>
 | 
			
		||||
         <height>23</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
@ -730,13 +724,67 @@
 | 
			
		||||
        <string>...</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
      <widget class="QCheckBox" name="softLDPC">
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>10</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <width>111</width>
 | 
			
		||||
         <height>20</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="toolTip">
 | 
			
		||||
        <string>Soft LDPC decoder (LDPC tool)</string>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>SOFT LDPC</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
      <widget class="QLabel" name="maxBitflipsLabel">
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>140</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <width>61</width>
 | 
			
		||||
         <height>21</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="text">
 | 
			
		||||
        <string>MAX BFL</string>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
      <widget class="QSpinBox" name="maxBitflips">
 | 
			
		||||
       <property name="geometry">
 | 
			
		||||
        <rect>
 | 
			
		||||
         <x>200</x>
 | 
			
		||||
         <y>150</y>
 | 
			
		||||
         <width>51</width>
 | 
			
		||||
         <height>20</height>
 | 
			
		||||
        </rect>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="toolTip">
 | 
			
		||||
        <string>LDPC maximum bitflips (hard decoder)</string>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="alignment">
 | 
			
		||||
        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="minimum">
 | 
			
		||||
        <number>0</number>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="maximum">
 | 
			
		||||
        <number>500</number>
 | 
			
		||||
       </property>
 | 
			
		||||
       <property name="value">
 | 
			
		||||
        <number>0</number>
 | 
			
		||||
       </property>
 | 
			
		||||
      </widget>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
    <widget class="QWidget" name="horizontalLayoutWidget">
 | 
			
		||||
     <property name="geometry">
 | 
			
		||||
      <rect>
 | 
			
		||||
       <x>0</x>
 | 
			
		||||
       <y>310</y>
 | 
			
		||||
       <x>10</x>
 | 
			
		||||
       <y>350</y>
 | 
			
		||||
       <width>481</width>
 | 
			
		||||
       <height>33</height>
 | 
			
		||||
      </rect>
 | 
			
		||||
@ -828,16 +876,13 @@
 | 
			
		||||
    <widget class="QWidget" name="horizontalLayoutWidget_2">
 | 
			
		||||
     <property name="geometry">
 | 
			
		||||
      <rect>
 | 
			
		||||
       <x>0</x>
 | 
			
		||||
       <y>250</y>
 | 
			
		||||
       <x>10</x>
 | 
			
		||||
       <y>290</y>
 | 
			
		||||
       <width>481</width>
 | 
			
		||||
       <height>31</height>
 | 
			
		||||
      </rect>
 | 
			
		||||
     </property>
 | 
			
		||||
     <layout class="QHBoxLayout" name="merLayout">
 | 
			
		||||
      <property name="leftMargin">
 | 
			
		||||
       <number>6</number>
 | 
			
		||||
      </property>
 | 
			
		||||
      <item>
 | 
			
		||||
       <widget class="QLabel" name="merLabel">
 | 
			
		||||
        <property name="text">
 | 
			
		||||
@ -891,16 +936,13 @@
 | 
			
		||||
    <widget class="QWidget" name="horizontalLayoutWidget_3">
 | 
			
		||||
     <property name="geometry">
 | 
			
		||||
      <rect>
 | 
			
		||||
       <x>0</x>
 | 
			
		||||
       <y>280</y>
 | 
			
		||||
       <x>10</x>
 | 
			
		||||
       <y>320</y>
 | 
			
		||||
       <width>481</width>
 | 
			
		||||
       <height>31</height>
 | 
			
		||||
      </rect>
 | 
			
		||||
     </property>
 | 
			
		||||
     <layout class="QHBoxLayout" name="cnrLayout">
 | 
			
		||||
      <property name="leftMargin">
 | 
			
		||||
       <number>6</number>
 | 
			
		||||
      </property>
 | 
			
		||||
      <item>
 | 
			
		||||
       <widget class="QLabel" name="cnrLabel">
 | 
			
		||||
        <property name="text">
 | 
			
		||||
 | 
			
		||||
@ -42,6 +42,8 @@ void DATVDemodSettings::resetToDefaults()
 | 
			
		||||
    m_standard = DVB_S;
 | 
			
		||||
    m_modulation = BPSK;
 | 
			
		||||
    m_fec = FEC12;
 | 
			
		||||
    m_softLDPC = false;
 | 
			
		||||
    m_maxBitflips = 0;
 | 
			
		||||
    m_symbolRate = 250000;
 | 
			
		||||
    m_notchFilters = 0;
 | 
			
		||||
    m_allowDrift = false;
 | 
			
		||||
@ -103,6 +105,8 @@ QByteArray DATVDemodSettings::serialize() const
 | 
			
		||||
    s.writeU32(29, m_reverseAPIPort);
 | 
			
		||||
    s.writeU32(30, m_reverseAPIDeviceIndex);
 | 
			
		||||
    s.writeU32(31, m_reverseAPIChannelIndex);
 | 
			
		||||
    s.writeBool(32, m_softLDPC);
 | 
			
		||||
    s.writeS32(33, m_maxBitflips);
 | 
			
		||||
 | 
			
		||||
    return s.final();
 | 
			
		||||
}
 | 
			
		||||
@ -185,6 +189,9 @@ bool DATVDemodSettings::deserialize(const QByteArray& data)
 | 
			
		||||
        d.readU32(31, &utmp, 0);
 | 
			
		||||
        m_reverseAPIChannelIndex = utmp > 99 ? 99 : utmp;
 | 
			
		||||
 | 
			
		||||
        d.readBool(32, &m_softLDPC, false);
 | 
			
		||||
        d.readS32(33, &m_maxBitflips, 0);
 | 
			
		||||
 | 
			
		||||
        validateSystemConfiguration();
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
@ -209,6 +216,8 @@ void DATVDemodSettings::debug(const QString& msg) const
 | 
			
		||||
        << " m_rollOff: " << m_rollOff
 | 
			
		||||
        << " m_viterbi: " << m_viterbi
 | 
			
		||||
        << " m_fec: " << m_fec
 | 
			
		||||
        << " m_softLDPC: " << m_softLDPC
 | 
			
		||||
        << " m_maxBitflips: " << m_maxBitflips
 | 
			
		||||
        << " m_modulation: " << m_modulation
 | 
			
		||||
        << " m_standard: " << m_standard
 | 
			
		||||
        << " m_notchFilters: " << m_notchFilters
 | 
			
		||||
@ -229,6 +238,8 @@ bool DATVDemodSettings::isDifferent(const DATVDemodSettings& other)
 | 
			
		||||
        || (m_rollOff != other.m_rollOff)
 | 
			
		||||
        || (m_viterbi != other.m_viterbi)
 | 
			
		||||
        || (m_fec != other.m_fec)
 | 
			
		||||
        || (m_softLDPC != other.m_softLDPC)
 | 
			
		||||
        || (m_maxBitflips != other.m_maxBitflips)
 | 
			
		||||
        || (m_modulation != other.m_modulation)
 | 
			
		||||
        || (m_standard != other.m_standard)
 | 
			
		||||
        || (m_notchFilters != other.m_notchFilters)
 | 
			
		||||
 | 
			
		||||
@ -80,6 +80,8 @@ struct DATVDemodSettings
 | 
			
		||||
    dvb_version m_standard;
 | 
			
		||||
    DATVModulation m_modulation;
 | 
			
		||||
    DATVCodeRate m_fec;
 | 
			
		||||
    bool m_softLDPC;
 | 
			
		||||
    int m_maxBitflips;
 | 
			
		||||
    bool m_audioMute;
 | 
			
		||||
    QString m_audioDeviceName;
 | 
			
		||||
    int m_symbolRate;
 | 
			
		||||
 | 
			
		||||
@ -1137,7 +1137,7 @@ void DATVDemodSink::InitDATVS2Framework()
 | 
			
		||||
    );
 | 
			
		||||
    leansdr::s2_fecdec<bool, leansdr::hard_sb> *fecdec = (leansdr::s2_fecdec<bool, leansdr::hard_sb> * ) r_fecdec;
 | 
			
		||||
 | 
			
		||||
    fecdec->bitflips=0;
 | 
			
		||||
    fecdec->bitflips=m_settings.m_maxBitflips;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    fecdec->bitflips = cfg.ldpc_bf; //int TODO
 | 
			
		||||
@ -1217,12 +1217,12 @@ void DATVDemodSink::feed(const SampleVector::const_iterator& begin, const Sample
 | 
			
		||||
 | 
			
		||||
            if(m_settings.m_standard==DATVDemodSettings::DVB_S2)
 | 
			
		||||
            {
 | 
			
		||||
                printf("SWITCHING TO DVBS-2\r\n");
 | 
			
		||||
                qDebug("DATVDemodSink::feed: init DVBS-2");
 | 
			
		||||
                InitDATVS2Framework();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                printf("SWITCHING TO DVBS\r\n");
 | 
			
		||||
                qDebug("DATVDemodSink::feed: init DVBS");
 | 
			
		||||
                InitDATVFramework();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -40,15 +40,23 @@ Power of signal received in the channel (dB)
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
<h4>B.3: Output transport stream to UDP</h4>
 | 
			
		||||
<h4>B.3: MER estimation</h4>
 | 
			
		||||
 | 
			
		||||
This gauge gives the MER estimation. The averaged value appears on the right.
 | 
			
		||||
 | 
			
		||||
<h4>B.3: CNR estimation</h4>
 | 
			
		||||
 | 
			
		||||
This gauge gives the CNR estimation. The averaged value appears on the right.
 | 
			
		||||
 | 
			
		||||
<h4>B.5: Output transport stream to UDP</h4>
 | 
			
		||||
 | 
			
		||||
Activate output of transport stream to UDP with 7 TS blocks per UDP frame
 | 
			
		||||
 | 
			
		||||
<h4>B.4: UDP address</h4>
 | 
			
		||||
<h4>B.6: UDP address</h4>
 | 
			
		||||
 | 
			
		||||
This is the address of the TS UDP
 | 
			
		||||
 | 
			
		||||
<h4>B.5: UDP port</h4>
 | 
			
		||||
<h4>B.7: UDP port</h4>
 | 
			
		||||
 | 
			
		||||
This is the port of the TS UDP
 | 
			
		||||
 | 
			
		||||
@ -155,6 +163,20 @@ The mode and rate selection can be done manually but if a discrepancy in the num
 | 
			
		||||
 | 
			
		||||
The controls specific to DVB-S are disabled and greyed out. These are: Fast Lock, Allow Drift, Hard Metric and Viterbi.
 | 
			
		||||
 | 
			
		||||
<h5>B.2b.6: DVB-S2 specific - Soft LDPC decoder</h5>
 | 
			
		||||
 | 
			
		||||
Not implemented yet
 | 
			
		||||
 | 
			
		||||
<h5>B.2b.7: DVB-S2 specific - LDPC maximum number of bit flips allowed</h5>
 | 
			
		||||
 | 
			
		||||
May vary between 0 and 500. On strong signals (17 dB SNR or more) you may set it to 0 thus saving processing on occasional bit flips that will not cause significant degradation. When SNR decreases you may set it to a medium value of about 200 allowing bit flips corrections to take place and decoding of signals down to about 10dB MER. A higher value towards the maximum (500) will not make a significant difference and is allowed mostly for experimentation.
 | 
			
		||||
 | 
			
		||||
If you have enough processing power it is fine to always leave it at 200.
 | 
			
		||||
 | 
			
		||||
Comparatively:
 | 
			
		||||
  - with max = 0 you need ~15 dB MER which corresponds to ~16 dB CNR
 | 
			
		||||
  - with max = 200 you need ~10 dB MER which corresponds to ~13 dB CNR
 | 
			
		||||
 | 
			
		||||
<h3>C: DATV video stream</h3>
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||