mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2025-12-06 05:32:00 +01:00
Adding tail bits to improve Viterbi decoding + puncture lists fix
This commit is contained in:
parent
885562539e
commit
d4fbc8f7ec
|
|
@ -42,7 +42,8 @@ const unsigned int INTERLEAVE_TABLE[] = {
|
||||||
const unsigned int PUNCTURE_LIST[] = { 1U, 5U, 9U, 13U, 17U, 21U, 25U, 29U, 33U, 37U,
|
const unsigned int PUNCTURE_LIST[] = { 1U, 5U, 9U, 13U, 17U, 21U, 25U, 29U, 33U, 37U,
|
||||||
41U, 45U, 49U, 53U, 57U, 61U, 65U, 69U, 73U, 77U,
|
41U, 45U, 49U, 53U, 57U, 61U, 65U, 69U, 73U, 77U,
|
||||||
81U, 85U, 89U, 93U, 97U, 101U, 105U, 109U, 113U, 117U,
|
81U, 85U, 89U, 93U, 97U, 101U, 105U, 109U, 113U, 117U,
|
||||||
121U, 125U, 129U, 133U, 137U, 141U};
|
121U, 125U, 129U, 133U, 137U, 141U, 145U, 149U, 153U, 157U,
|
||||||
|
161U, 165U, 169U, 173U, 177U, 181U, 185U, 189U };
|
||||||
|
|
||||||
const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
|
const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
|
||||||
|
|
||||||
|
|
@ -83,7 +84,7 @@ bool CNXDNFACCH1::decode(const unsigned char* data, unsigned int offset)
|
||||||
|
|
||||||
// CUtils::dump("NXDN, FACCH1 de-interleaved", temp1, 18U);
|
// CUtils::dump("NXDN, FACCH1 de-interleaved", temp1, 18U);
|
||||||
|
|
||||||
uint8_t temp2[192U];
|
uint8_t temp2[210U];
|
||||||
|
|
||||||
unsigned int n = 0U;
|
unsigned int n = 0U;
|
||||||
unsigned int index = 0U;
|
unsigned int index = 0U;
|
||||||
|
|
@ -97,18 +98,22 @@ bool CNXDNFACCH1::decode(const unsigned char* data, unsigned int offset)
|
||||||
temp2[n++] = b ? 2U : 0U;
|
temp2[n++] = b ? 2U : 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned int i = 0U; i < 8U; i++) {
|
||||||
|
temp2[n++] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
CNXDNConvolution conv;
|
CNXDNConvolution conv;
|
||||||
conv.start();
|
conv.start();
|
||||||
|
|
||||||
n = 0U;
|
n = 0U;
|
||||||
for (unsigned int i = 0U; i < 96U; i++) {
|
for (unsigned int i = 0U; i < 100U; i++) {
|
||||||
uint8_t s0 = temp2[n++];
|
uint8_t s0 = temp2[n++];
|
||||||
uint8_t s1 = temp2[n++];
|
uint8_t s1 = temp2[n++];
|
||||||
|
|
||||||
conv.decode(s0, s1);
|
conv.decode(s0, s1);
|
||||||
}
|
}
|
||||||
|
|
||||||
conv.chainback(m_data, 92U);
|
conv.chainback(m_data, 96U);
|
||||||
|
|
||||||
CUtils::dump("NXDN, FACCH1 decoded", m_data, 12U);
|
CUtils::dump("NXDN, FACCH1 decoded", m_data, 12U);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ bool CNXDNSACCH::decode(const unsigned char* data)
|
||||||
|
|
||||||
// CUtils::dump("NXDN, SACCH de-interleaved", temp1, 8U);
|
// CUtils::dump("NXDN, SACCH de-interleaved", temp1, 8U);
|
||||||
|
|
||||||
uint8_t temp2[72U];
|
uint8_t temp2[90U];
|
||||||
|
|
||||||
unsigned int n = 0U;
|
unsigned int n = 0U;
|
||||||
unsigned int index = 0U;
|
unsigned int index = 0U;
|
||||||
|
|
@ -91,18 +91,22 @@ bool CNXDNSACCH::decode(const unsigned char* data)
|
||||||
temp2[n++] = b ? 2U : 0U;
|
temp2[n++] = b ? 2U : 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned int i = 0U; i < 8U; i++) {
|
||||||
|
temp2[n++] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
CNXDNConvolution conv;
|
CNXDNConvolution conv;
|
||||||
conv.start();
|
conv.start();
|
||||||
|
|
||||||
n = 0U;
|
n = 0U;
|
||||||
for (unsigned int i = 0U; i < 36U; i++) {
|
for (unsigned int i = 0U; i < 40U; i++) {
|
||||||
uint8_t s0 = temp2[n++];
|
uint8_t s0 = temp2[n++];
|
||||||
uint8_t s1 = temp2[n++];
|
uint8_t s1 = temp2[n++];
|
||||||
|
|
||||||
conv.decode(s0, s1);
|
conv.decode(s0, s1);
|
||||||
}
|
}
|
||||||
|
|
||||||
conv.chainback(m_data, 32U);
|
conv.chainback(m_data, 36U);
|
||||||
|
|
||||||
CUtils::dump("NXDN, SACCH decoded", m_data, 4U);
|
CUtils::dump("NXDN, SACCH decoded", m_data, 4U);
|
||||||
|
|
||||||
|
|
|
||||||
19
NXDNUDCH.cpp
19
NXDNUDCH.cpp
|
|
@ -63,7 +63,8 @@ const unsigned int PUNCTURE_LIST[] = { 3U, 11U, 17U, 25U, 31U, 39U, 45U,
|
||||||
73U, 81U, 87U, 95U, 101U, 109U, 115U, 123U, 129U, 137U,
|
73U, 81U, 87U, 95U, 101U, 109U, 115U, 123U, 129U, 137U,
|
||||||
143U, 151U, 157U, 165U, 171U, 179U, 185U, 193U, 199U, 207U,
|
143U, 151U, 157U, 165U, 171U, 179U, 185U, 193U, 199U, 207U,
|
||||||
213U, 221U, 227U, 235U, 241U, 249U, 255U, 263U, 269U, 277U,
|
213U, 221U, 227U, 235U, 241U, 249U, 255U, 263U, 269U, 277U,
|
||||||
283U, 291U, 297U, 305U, 311U, 319U, 325U, 333U, 339U, 347U };
|
283U, 291U, 297U, 305U, 311U, 319U, 325U, 333U, 339U, 347U,
|
||||||
|
353U, 361U, 367U, 375U, 381U, 389U, 395U, 403U };
|
||||||
|
|
||||||
const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
|
const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
|
||||||
|
|
||||||
|
|
@ -73,14 +74,14 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04
|
||||||
CNXDNUDCH::CNXDNUDCH(const CNXDNUDCH& udch) :
|
CNXDNUDCH::CNXDNUDCH(const CNXDNUDCH& udch) :
|
||||||
m_data(NULL)
|
m_data(NULL)
|
||||||
{
|
{
|
||||||
m_data = new unsigned char[23U + 2U];
|
m_data = new unsigned char[23U + 3U];
|
||||||
::memcpy(m_data, udch.m_data, 23U + 2U);
|
::memcpy(m_data, udch.m_data, 23U + 3U);
|
||||||
}
|
}
|
||||||
|
|
||||||
CNXDNUDCH::CNXDNUDCH() :
|
CNXDNUDCH::CNXDNUDCH() :
|
||||||
m_data(NULL)
|
m_data(NULL)
|
||||||
{
|
{
|
||||||
m_data = new unsigned char[23U + 2U];
|
m_data = new unsigned char[23U + 3U];
|
||||||
}
|
}
|
||||||
|
|
||||||
CNXDNUDCH::~CNXDNUDCH()
|
CNXDNUDCH::~CNXDNUDCH()
|
||||||
|
|
@ -104,7 +105,7 @@ bool CNXDNUDCH::decode(const unsigned char* data)
|
||||||
|
|
||||||
CUtils::dump("NXDN, UDCH/FACCH2 de-interleaved", temp1, 44U);
|
CUtils::dump("NXDN, UDCH/FACCH2 de-interleaved", temp1, 44U);
|
||||||
|
|
||||||
uint8_t temp2[406U];
|
uint8_t temp2[420U];
|
||||||
|
|
||||||
unsigned int n = 0U;
|
unsigned int n = 0U;
|
||||||
unsigned int index = 0U;
|
unsigned int index = 0U;
|
||||||
|
|
@ -118,18 +119,22 @@ bool CNXDNUDCH::decode(const unsigned char* data)
|
||||||
temp2[n++] = b ? 2U : 0U;
|
temp2[n++] = b ? 2U : 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned int i = 0U; i < 8U; i++) {
|
||||||
|
temp2[n++] = 0U;
|
||||||
|
}
|
||||||
|
|
||||||
CNXDNConvolution conv;
|
CNXDNConvolution conv;
|
||||||
conv.start();
|
conv.start();
|
||||||
|
|
||||||
n = 0U;
|
n = 0U;
|
||||||
for (unsigned int i = 0U; i < 203U; i++) {
|
for (unsigned int i = 0U; i < 207U; i++) {
|
||||||
uint8_t s0 = temp2[n++];
|
uint8_t s0 = temp2[n++];
|
||||||
uint8_t s1 = temp2[n++];
|
uint8_t s1 = temp2[n++];
|
||||||
|
|
||||||
conv.decode(s0, s1);
|
conv.decode(s0, s1);
|
||||||
}
|
}
|
||||||
|
|
||||||
conv.chainback(m_data, 199U);
|
conv.chainback(m_data, 203U);
|
||||||
|
|
||||||
CUtils::dump("NXDN, UDCH/FACCH2 decoded", m_data, 25U);
|
CUtils::dump("NXDN, UDCH/FACCH2 decoded", m_data, 25U);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue