mirror of
https://github.com/g4klx/MMDVM.git
synced 2026-05-07 13:37:48 +00:00
Make whole FM chain RX level independant
This commit is contained in:
parent
eb9c0dfd93
commit
77e0deee76
4 changed files with 14 additions and 26 deletions
|
|
@ -86,15 +86,12 @@ m_threshold(0),
|
|||
m_count(0U),
|
||||
m_q0(0),
|
||||
m_q1(0),
|
||||
m_result(CTS_NONE),
|
||||
m_rxLevelInverse(1)
|
||||
m_result(CTS_NONE)
|
||||
{
|
||||
}
|
||||
|
||||
uint8_t CFMCTCSSRX::setParams(uint8_t frequency, uint8_t threshold, uint8_t level)
|
||||
uint8_t CFMCTCSSRX::setParams(uint8_t frequency, uint8_t threshold)
|
||||
{
|
||||
m_rxLevelInverse = q15Division(65535, q15_t(level * 128));
|
||||
|
||||
m_coeffDivTwo = 0;
|
||||
|
||||
for (uint8_t i = 0U; i < CTCSS_TABLE_DATA_LEN; i++) {
|
||||
|
|
@ -114,7 +111,8 @@ uint8_t CFMCTCSSRX::setParams(uint8_t frequency, uint8_t threshold, uint8_t leve
|
|||
|
||||
uint8_t CFMCTCSSRX::process(q15_t sample)
|
||||
{
|
||||
q31_t sample31 = q31_t(sample) * m_rxLevelInverse;
|
||||
//get more dynamic into the decoder by multiplying the sample by 1.5
|
||||
q31_t sample31 = q31_t(sample) + (q31_t(sample) >> 1);
|
||||
|
||||
m_result &= ~CTS_READY;
|
||||
|
||||
|
|
@ -174,16 +172,3 @@ void CFMCTCSSRX::reset()
|
|||
m_result = CTS_NONE;
|
||||
m_count = 0U;
|
||||
}
|
||||
|
||||
//Taken from https://en.wikipedia.org/wiki/Q_(number_format)#Division
|
||||
q15_t CFMCTCSSRX::q15Division(q15_t a, q15_t divisor)
|
||||
{
|
||||
q31_t a31 = q31_t(a) << 16;
|
||||
|
||||
if (((a >> 31) & 1) == ((divisor >> 15) & 1))
|
||||
a31 += divisor >> 1;
|
||||
else
|
||||
a31 -= divisor >> 1;
|
||||
|
||||
return a31 / divisor;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue