Master_Interface/Core/Src/util.c

28 lines
636 B
C

#include "util.h"
#include <stdint.h>
float interp(uint32_t n_points, const float* source_x, const float* source_y,
float target_x) {
uint32_t i;
for (i = 0; i < n_points; i++) {
if (source_x[i] > target_x) {
break;
}
}
if (i == 0) {
// target_x is smaller than the smallest value in source_x
i++;
}
if (i == n_points) {
// target_y is larger than the largest value in source_x
i--;
}
float x1 = source_x[i - 1];
float x2 = source_x[i];
float y1 = source_y[i - 1];
float y2 = source_y[i];
float slope = (y2 - y1) / (x2 - x1);
return y1 + slope * (target_x - x1);
}