Non Linear Calibration Curve And Polynomial

Not all systems vary linearly. One very well known case is, of course, thermocouples. International standard curves are available for these so they present little difficulty. The issue discussed here is determining a non linear calibration curve and if appropriate reducing to a polynomial.

A very typical situation occurs with load-deflection tests such as non-linear springs, suspension systems, crush loading and so on. Usually it is straightforward to monitor the deflection, either directly or even if it means double integrating an accelerometer signal. The objective however is to determine the applied load. That is we need a non linear calibration curve of load versus displacement. As an illustration, consider a simple system of a load suspended by two opposing non-linear springs as illustrate below.

In the calibration laboratory, loads may be applied in each direction in turn. It is unlikely that we will have uniform load or uniform displacement steps. That is the acquired data will be load and displacement against ‘point number’. To form a complete calibration curve obviously needs one test in the +x direction and another in the -x direction. This will then give us two load versus point number curves and two displacement versus point number curves like those shown below.

Fig. 1 : Positive Loading

Fig. 2 : Positive Displacement

Fig. 3 : Negative Loading

Fig. 4 : Negative Displacement

By selecting force and the relevant displacement as the x axis then we can readily display the two force displacement curves. This then gives the following graphs.

Fig. 5 : Positive Loading v. Displacement

Fig. 6 : Negative Loading v. Displacement

These graphs are visualisations of the data and not the data itself. What we need is the signal of force versus displacement in constant displacement steps. This is readily achieved with a spline curve fit {Spline with x points}.The simplest way to proceed is to join the two load curves and the two displacement curves, both as functions of ‘point number’. This means looking carefully at the join point. In the example data neither pair of signals had a zero deflection point. In fact, both the positive and negative signals had 130 points, numbered from 1 to 130 and both started at a non-zero deflection.Clearly if we are to join the signals the negative direction signals should go from -130 to -1 and of course the amplitude needs to be negated. We do this by reversing the data {Reverse Signal}, multiplying by -1 {Signal*Constant} and then by changing the start value {Change Base}. This now gives us negative side signals as shown below.

Fig. 7 : Negative Load (Reversed)

Fig. 8 : Negative Displacement (Reversed)

Next we join the two load curves and the two displacement curves {Join Signals} to get

Fig. 9 : Raw Load

Fig. 10 : Raw Displacement

Now that we have 2 complete curves then we may apply a sliding Spline fit to generate a set of equi-spaced points by using the load curve as y and the deflection curve as x {Spline with x points}.The spline function used is a local cubic spline where it curve fits over 6 measured points and uses the central part of each section to extract the load value at constant displacement increments. When it needs values outside the central section the spline is advanced by one data point and resolved. This ensures accurate local tracking of the data. Using a spline function or other curve fit which attempts to fit the entire curve in one go leads to average behaviour.

Fig. 11 : Load v. displacement (Spline)

In the example data used neither the positive or the negative side signals had a zero point. Visual inspection of the data showed that zero deflection gave zero load. Hence a zero point was added to one of the measured signals before the spline fit.This was not necessary but as an inspection of the data clearly showed it must pass through the origin it was added to ensure we have a (0.0, 0.0) data point. The spline signal generation on the original 260 points was set to give 1001 output points.Sometimes a calibration curve is sufficient but often one needs to express the resultant curve as a power series. To do this we use the polynomial fit function. This will need an assessment of which powers to use. As an example a fit with odd and even powers up to x7 was formed. This fitted curve was added as an overlay to the measured data shows excellent agreement, in fact the difference cannot be seen!

Fig. 12 : Load v. displacement (Spline and polynomial)

The coefficients generated are listed below

0  5.4632e-5
1  7.06008
2  -0.00093
3  12.9184
4  0.00209
5  -19.2711
6  -0.001121
7  27.5107

In this case, the function is essentially odd and this is reflected in the relatively small values of the even powers. A repeat run using just the dc component (x0) and the odd powers gave coefficients of

0  2.6133e-06
1  7.06008
3  12.9184
5  -19.2711
7  25.5107

To assess the goodness of fit we determined the rms value of the difference between the fitted and original signals. The difference between the measured and fitted curves is shown below as a percentage of full scale load.

Fig. 13 : Percentage Error
Class Highest Power RMS Error
Odd 1 10.1736
Odd 3 3.67765
Odd 5 0.849849
Odd 7 0.244096
Odd & Even 7 0.244096
Odd 9 0.115849
Odd 11 0.11957
Odd 13 0.108928

The optimal choice would be to use up to x9 as adding above this only gives marginal improvement.

The following two tabs change content below.

Dr Colin Mercer

Chief Signal Processing Analyst (Retired) at Prosig
Dr Colin Mercer was formerly at the Institute of Sound and Vibration Research (ISVR), University of Southampton where he founded the Data Analysis Centre. He then went on to found Prosig in 1977. Colin retired as Chief Signal Processing Analyst at Prosig in December 2016. He is a Chartered Engineer and a Fellow of the British Computer Society.

Latest posts by Dr Colin Mercer (see all)

0 0 vote
Article Rating
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x