diff --git a/sa_core.c b/sa_core.c index 5671e19..a8a0aca 100644 --- a/sa_core.c +++ b/sa_core.c @@ -865,14 +865,17 @@ static const float correction_value[CORRECTION_POINTS] = #define SCALE_FACTOR 14 // min scaled correction = 2^15, max scaled correction = 256 * 2^15 // min scaled f = 6, max scaled f = 1024 -static int32_t correction_factor[CORRECTION_POINTS]; +static int32_t scaled_correction_multi[CORRECTION_POINTS]; +static int32_t scaled_correction_value[CORRECTION_POINTS]; void calculate_correction(void) { + scaled_correction_value[0] = config.correction_value[0] * (1 << (SCALE_FACTOR)); for (int i = 1; i < CORRECTION_POINTS; i++) { - int32_t m = (config.correction_value[i] - config.correction_value[i-1]) * (1 << (SCALE_FACTOR)); + scaled_correction_value[i] = config.correction_value[i] * (1 << (SCALE_FACTOR)); + int32_t m = scaled_correction_value[i] - scaled_correction_value[i-1]; int32_t d = (config.correction_frequency[i] - config.correction_frequency[i-1]) >> SCALE_FACTOR; - correction_factor[i] = (int32_t) ( m / d ); + scaled_correction_multi[i] = (int32_t) ( m / d ); } } @@ -894,7 +897,7 @@ float get_frequency_correction(uint32_t f) // Frequency dependent RSSI corr float cv = config.correction_value[i-1] + ((f >> SCALE_FACTOR) * multi) / (float)(1 << (SCALE_FACTOR -1)) ; #else int32_t scaled_f = f >> SCALE_FACTOR; - float cv = config.correction_value[i-1] + ((float)(scaled_f * correction_factor[i]))/(float)(1 << (SCALE_FACTOR)) ; + float cv = ((float)(scaled_correction_value[i-1] + (scaled_f * scaled_correction_multi[i])))/(float)(1 << (SCALE_FACTOR)) ; #endif return(cv); }