Change to scaled integer correction values

pull/4/head
erikkaashoek 6 years ago
parent 7afc7249d5
commit 442d69cced

@ -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);
}

Loading…
Cancel
Save

Powered by TurnKey Linux.