This lib is considered to be used as a sensor's calibration program. Calibration with Spline Interpolation might be useful in the case that you want some model expressing relationship such like between a value of physical quantity and your sensor's voltage, but you cannot estimate a model such as liner, square, cubic polynomial, or sine curve. This makes (Parametric) Cubic Spline Polynomial Model (Coefficients of the polynomial) from some sample plots(e.g. sets of (value, voltage)). The inverse function (x,y)->(y,x) has been implemented so as to get analog data (not stepping or leveled data).

Fork of TRP105F_Spline by Akifumi Takahashi

Committer:
aktk
Date:
Fri May 20 14:25:39 2016 +0000
Revision:
4:8db89b731133
Parent:
3:75f50dbedf1b
Child:
5:bfb6dbd37aa4
_makeSpline() might have been refactored.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 3:75f50dbedf1b 1 /**
aktk 3:75f50dbedf1b 2 * Spline_Cubic.h,.cpp
aktk 3:75f50dbedf1b 3 *
aktk 3:75f50dbedf1b 4 * Author: aktk, aktk.j.uec@gmail.com
aktk 3:75f50dbedf1b 5 * Tokyo, Japan.
aktk 3:75f50dbedf1b 6 *
aktk 3:75f50dbedf1b 7 * LOG:
aktk 3:75f50dbedf1b 8 * ver.0 2016/02.12 - 2016/02/16
aktk 3:75f50dbedf1b 9 * TRP105F_Spline.h,.cpp(Ver.2.1)
aktk 3:75f50dbedf1b 10 * ver.1 2016/05.12
aktk 3:75f50dbedf1b 11 */
aktk 3:75f50dbedf1b 12 #ifndef Cubic_Spline_H
aktk 3:75f50dbedf1b 13 #define Cubic_Spline_H
aktk 3:75f50dbedf1b 14
aktk 3:75f50dbedf1b 15 #include "mbed.h"
aktk 3:75f50dbedf1b 16
aktk 3:75f50dbedf1b 17
aktk 3:75f50dbedf1b 18 // Vector Element Type
aktk 3:75f50dbedf1b 19 typedef struct {
aktk 4:8db89b731133 20 double x; //
aktk 4:8db89b731133 21 double y; //
aktk 4:8db89b731133 22 double t; // use as pramameter of x,y.
aktk 4:8db89b731133 23 } Vxyt;
aktk 3:75f50dbedf1b 24
aktk 3:75f50dbedf1b 25 enum UseType{
aktk 3:75f50dbedf1b 26 AsDEBUG,
aktk 3:75f50dbedf1b 27 AsMODULE
aktk 3:75f50dbedf1b 28 };
aktk 3:75f50dbedf1b 29
aktk 4:8db89b731133 30 class CubicSpline2d
aktk 3:75f50dbedf1b 31 {
aktk 3:75f50dbedf1b 32 public:
aktk 3:75f50dbedf1b 33 // Constraction
aktk 4:8db89b731133 34 CubicSpline2d();
aktk 4:8db89b731133 35 CubicSpline2d(unsigned int);
aktk 4:8db89b731133 36 CubicSpline2d(unsigned int, UseType);
aktk 3:75f50dbedf1b 37 // Destraction
aktk 4:8db89b731133 38 ~CubicSpline2d();
aktk 3:75f50dbedf1b 39 // Functions
aktk 4:8db89b731133 40 double getX();
aktk 4:8db89b731133 41 double getY();
aktk 3:75f50dbedf1b 42 void calibrateSensor();
aktk 3:75f50dbedf1b 43 void saveSetting();
aktk 3:75f50dbedf1b 44 void saveSetting(const char *filename);
aktk 3:75f50dbedf1b 45 void loadSetting();
aktk 3:75f50dbedf1b 46 void loadSetting(const char *filename);
aktk 3:75f50dbedf1b 47 void printOutData();
aktk 3:75f50dbedf1b 48
aktk 3:75f50dbedf1b 49 private:
aktk 3:75f50dbedf1b 50 //
aktk 3:75f50dbedf1b 51 // Variables
aktk 3:75f50dbedf1b 52 //
aktk 3:75f50dbedf1b 53 UseType _useType;
aktk 4:8db89b731133 54 unsigned int _Sample_Num; // the number of samples for derive spline
aktk 4:8db89b731133 55 Vxyt* _Sample_Set;
aktk 4:8db89b731133 56 double* _C_x[4]; //x = Spline-fx(t) = _C_x[0] + _C_x[1]t + _C_x[2]t^2 + _C_x[3]t^3
aktk 4:8db89b731133 57 double* _C_y[4]; //y = Spline-fy(t) = _C_y[0] + _C_y[1]t + _C_y[2]t^2 + _C_y[3]t^3
aktk 4:8db89b731133 58 //double* _u_param_x;
aktk 4:8db89b731133 59 //double* _u_param_y;
aktk 4:8db89b731133 60 //
aktk 3:75f50dbedf1b 61 // For calibration
aktk 3:75f50dbedf1b 62 //
aktk 3:75f50dbedf1b 63 void _sampleData();
aktk 4:8db89b731133 64 void _makeModel(); // generate a vector of _u_params which is used for Cubic spline model
aktk 4:8db89b731133 65 enum
aktk 4:8db89b731133 66 unsigned short _get(double);
aktk 3:75f50dbedf1b 67 //
aktk 3:75f50dbedf1b 68 // For debug
aktk 3:75f50dbedf1b 69 //
aktk 3:75f50dbedf1b 70 void _printOutData(unsigned short *arg, int num, char* name);
aktk 4:8db89b731133 71 void _printOutData(Vxyt *arg, int num, char* name);
aktk 3:75f50dbedf1b 72 void _printOutData(double *arg, int num, char* name);
aktk 3:75f50dbedf1b 73 };
aktk 3:75f50dbedf1b 74 #endif