Calibration routines adapted
* Implement custom mean and std functions * Use standard deviation in calibration measurment instead of peak-peak noise.
This commit is contained in:
parent
7aa0b62012
commit
1166477a6c
@ -75,6 +75,71 @@ free_mem:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static float calculate_mean(float *values, uint32_t count)
|
||||||
|
{
|
||||||
|
uint32_t loop_cnt = (count + 7) / 8;
|
||||||
|
uint32_t remainder = count % 8;
|
||||||
|
float sum = 0;
|
||||||
|
|
||||||
|
switch (remainder) {
|
||||||
|
case 0: do { sum += *values++; /* FALLTHRU */
|
||||||
|
case 7: sum += *values++; /* FALLTHRU */
|
||||||
|
case 6: sum += *values++; /* FALLTHRU */
|
||||||
|
case 5: sum += *values++; /* FALLTHRU */
|
||||||
|
case 4: sum += *values++; /* FALLTHRU */
|
||||||
|
case 3: sum += *values++; /* FALLTHRU */
|
||||||
|
case 2: sum += *values++; /* FALLTHRU */
|
||||||
|
case 1: sum += *values++;
|
||||||
|
} while (--loop_cnt > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum/(float)count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float calculate_standard_deviation(float *values, uint32_t count, float mean)
|
||||||
|
{
|
||||||
|
uint32_t loop_cnt = (count + 7) / 8;
|
||||||
|
uint32_t remainder = count % 8;
|
||||||
|
float sum = 0;
|
||||||
|
float res;
|
||||||
|
|
||||||
|
switch (remainder) {
|
||||||
|
case 0: do { sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 7: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 6: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 5: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 4: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 3: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 2: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
case 1: sum += (*values - mean) * (*values - mean);
|
||||||
|
values++;
|
||||||
|
/* FALLTHRU */
|
||||||
|
} while (--loop_cnt > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sum /= (float)count;
|
||||||
|
/* Compute the square roor using the FPU.
|
||||||
|
* The constraint 't' tells GCC to use a floating point register
|
||||||
|
*/
|
||||||
|
__asm__ __volatile__("vsqrt.f32 %0, %1" : "=t"(res) : "t"(sum));
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int calibration_poll_data_acquisition(float *mem_array, uint32_t count, volatile int *flag, float *mu, float *max_dev)
|
static int calibration_poll_data_acquisition(float *mem_array, uint32_t count, volatile int *flag, float *mu, float *max_dev)
|
||||||
{
|
{
|
||||||
int ret_val = 0;
|
int ret_val = 0;
|
||||||
@ -99,10 +164,9 @@ static int calibration_poll_data_acquisition(float *mem_array, uint32_t count, v
|
|||||||
/* Convert the stream memory to Ohm readings */
|
/* Convert the stream memory to Ohm readings */
|
||||||
adc_pt1000_convert_raw_value_array_to_resistance(NULL, mem_array, count);
|
adc_pt1000_convert_raw_value_array_to_resistance(NULL, mem_array, count);
|
||||||
|
|
||||||
/* Do not compute std-deviation. Too imprecise
|
/* Do not compute std-deviation. Too imprecise */
|
||||||
* arm_std_f32(stream_mem, count, sigma);
|
*mu = calculate_mean(mem_array, count);
|
||||||
*/
|
*max_dev = calculate_standard_deviation(mem_array, count, *mu);
|
||||||
arm_mean_f32(mem_array, count, mu);
|
|
||||||
|
|
||||||
/* Find min and max values of array */
|
/* Find min and max values of array */
|
||||||
for (i = 0U; i < count; i++) {
|
for (i = 0U; i < count; i++) {
|
||||||
@ -111,7 +175,7 @@ static int calibration_poll_data_acquisition(float *mem_array, uint32_t count, v
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute maximum deviation range */
|
/* Compute maximum deviation range */
|
||||||
*max_dev = max_val - min_val;
|
//*max_dev = max_val - min_val;
|
||||||
|
|
||||||
ret_free_mem:
|
ret_free_mem:
|
||||||
free(mem_array);
|
free(mem_array);
|
||||||
|
Loading…
Reference in New Issue
Block a user