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
CubicSpline.h@4:8db89b731133, 2016-05-20 (annotated)
- 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?
User | Revision | Line number | New 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 |