From a31cf3d6f8a99162432c0d73508218dc7a783e19 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 26 Apr 2020 12:07:10 +0100 Subject: [PATCH] Convert the CTCSS TX tones to Q31 from Q15. --- FMCTCSSTX.cpp | 109 ++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 56 deletions(-) diff --git a/FMCTCSSTX.cpp b/FMCTCSSTX.cpp index 754612a..37241f9 100644 --- a/FMCTCSSTX.cpp +++ b/FMCTCSSTX.cpp @@ -23,59 +23,58 @@ const struct TX_CTCSS_TABLE { uint8_t frequency; uint16_t length; - q15_t increment; + q31_t increment; } TX_CTCSS_TABLE_DATA[] = { - { 67U, 358U, 92}, - { 69U, 346U, 95}, - { 71U, 334U, 99}, - { 74U, 323U, 102}, - { 77U, 312U, 106}, - { 79U, 301U, 109}, - { 82U, 291U, 113}, - { 85U, 281U, 117}, - { 88U, 271U, 121}, - { 91U, 262U, 125}, - { 94U, 253U, 130}, - { 97U, 246U, 133}, - {100U, 240U, 137}, - {103U, 232U, 142}, - {107U, 224U, 147}, - {110U, 216U, 152}, - {114U, 209U, 157}, - {118U, 202U, 163}, - {123U, 195U, 168}, - {127U, 189U, 174}, - {131U, 182U, 180}, - {136U, 176U, 187}, - {141U, 170U, 193}, - {146U, 164U, 200}, - {151U, 159U, 207}, - {156U, 153U, 214}, - {159U, 150U, 219}, - {162U, 148U, 222}, - {165U, 145U, 226}, - {167U, 143U, 230}, - {171U, 140U, 234}, - {173U, 138U, 238}, - {177U, 135U, 243}, - {179U, 133U, 246}, - {183U, 131U, 251}, - {186U, 129U, 255}, - {189U, 126U, 260}, - {192U, 124U, 264}, - {196U, 122U, 269}, - {199U, 120U, 273}, - {203U, 118U, 278}, - {206U, 116U, 282}, - {210U, 114U, 288}, - {218U, 110U, 298}, - {225U, 106U, 309}, - {229U, 105U, 313}, - {233U, 103U, 319}, - {241U, 99U, 331}, - {250U, 96U, 342}, - {254U, 94U, 347} -}; + { 67U, 358U, 5995059}, + { 69U, 346U, 6200860}, + { 71U, 334U, 6433504}, + { 74U, 323U, 6657200}, + { 77U, 312U, 6889844}, + { 79U, 301U, 7131436}, + { 82U, 291U, 7381976}, + { 85U, 281U, 7641463}, + { 88U, 271U, 7918846}, + { 91U, 262U, 8187282}, + { 94U, 253U, 8482561}, + { 97U, 246U, 8715205}, + {100U, 240U, 8947849}, + {103U, 232U, 9261024}, + {107U, 224U, 9592094}, + {110U, 216U, 9923165}, + {114U, 209U, 10272131}, + {118U, 202U, 10630045}, + {123U, 195U, 11005854}, + {127U, 189U, 11390612}, + {131U, 182U, 11793265}, + {136U, 176U, 12213814}, + {141U, 170U, 12643310}, + {146U, 164U, 13081755}, + {151U, 159U, 13547043}, + {156U, 153U, 14021279}, + {159U, 150U, 14298662}, + {162U, 148U, 14513411}, + {165U, 145U, 14808690}, + {167U, 143U, 15023438}, + {171U, 140U, 15327665}, + {173U, 138U, 15551361}, + {177U, 135U, 15864536}, + {179U, 133U, 16097180}, + {183U, 131U, 16419303}, + {186U, 129U, 16660894}, + {189U, 126U, 16991965}, + {192U, 124U, 17251452}, + {196U, 122U, 17591471}, + {199U, 120U, 17850958}, + {203U, 118U, 18208872}, + {206U, 116U, 18477308}, + {210U, 114U, 18853117}, + {218U, 110U, 19515258}, + {225U, 106U, 20195295}, + {229U, 105U, 20499521}, + {233U, 103U, 20902175}, + {241U, 99U, 21635898}, + {250U, 96U, 22396465}, + {254U, 94U, 22736484}}; const uint8_t CTCSS_TABLE_DATA_LEN = 50U; @@ -105,14 +104,12 @@ uint8_t CFMCTCSSTX::setParams(uint8_t frequency, uint8_t level) delete[] m_values; m_values = new q15_t[m_length]; - q15_t arg = 0; + q31_t arg = 0; for (uint16_t i = 0U; i < m_length; i++) { - q31_t value = ::arm_sin_q15(arg) * q15_t(level * 13); + q31_t value = ::arm_sin_q31(arg) * q15_t(level * 13); m_values[i] = q15_t(__SSAT((value >> 15), 16)); arg += entry->increment; - if(arg < 0)//did we exceed max value of q15_t and flip over ? - arg += 32768;//bring arg back to valid values for ::arm_sin_q15, as per doc it needs to be in the range 0 to 0.99999999 (aka 0 - 32767) } return 0U;