- Due date for Tracking 1

*We measure to build a calibration.**The calibration is used to predict the future.**The calibration needs only to be as precise as our need for future knowledge.*- Building a calibration table that is not precise enough is an error.
- Building a calibration table that is overly precise is also an error.

- Determine how you want to collapse the table, using
- Measurement
- Intuition

- Determine how you want to fill the table, using a combination of
- Pre-measurement and off-line calculation
- On-line measurement and calculation

Each measurement produces a data record

Train | Speed | Section | Previous Speed | Time since speed change (seconds) | Time since locomotive maintenance (hours) | Time since track cleaning (hours) | Section type | Velocity (cm/sec) |

25 | 8 | 31 | 10 | 23 | 76 | 36 | curved | 8.9 |

The basic method of data handling is simple.

- Gather together all measurements that have the same dependent variables.
- Calculate the mean and standard deviation of the measurements.
- Use the mean when estimating how far the train travels in a given time.
- Use the standard deviation to calculate how far away from your estimate the train might be.
- The more measurements in your collection the smaller the standard deviation.

The basic method in its full implementation is not feasible!

- Why?

To make it more reasonable we sort the dependent variables into two categories:

- the ones that matter, and
- the ones that don't matter.

We omit the variables that don't matter. There are two ways of `not mattering'.

- Error. Some independent variables have effects that are smaller than the standard deviation measured above.
- Effect on your project. Sometimes the effect greated by an independent variable is too small to change the results of your project.

In either case the table is collapsed across the independent variable.

We do the following off-line.

- We measure using as many different values of each independent variable as possible.
- On the measurements we do an analysis of variance (ANOVA), including interactions.
- We collapse the analysis across the variables that have no statistically significant effect
- We then get the estimated values for each cell, and look at differences across different values of a variable
- The differences map into differences of estimated position.
- Differences in estimated position that are smaller than what you need for your project are used as a criterion for dropping more independent variables.

This provides a reasonable initial calibration table.

At the beginning of each run of the project, we run the locomotives we will be using all over the track for a while

- we drive the locomotives all over the track for a while to update the static calibration.

To update

- In each cell of the table have
- the average velocity
- the variance of the average velocity

- After each measurement calculate
- new average velocity = \alpha * old average velocity + (1 - \alpha) * measurement
- new variance = \alpha * old variance + (1 - \alpha) * measurement * measurement
- 0.0 < \alpha < 1.0
- \alpha near 0.0 ignores old measurements
- \alpha near 1.0 makes old measurements dominant

Alternatively, you could average in a circular buffer.

While the project continues to run,

- use every measurement you make to update the table.

You might want to consider

- Using floating point for calculation. The easiest way to do this is to
have a single calibration task that
- receives measurements in fixed point,
- calculates internally in floating point, and
- provides current calibration parameters in fixed point.

If more than one task uses fixed point you must change your context switch if any access to the floating point processor is non-atomic.

- Turning on optimization, but be careful .
- There are places where you have done register allocation by hand.
- Previously undiscovered critical races could appear, and even critical races associated with bus clocks.

- Size & align calibration tables by size & alignment of cache
lines
- linker command scripts

but only if access speed is a problem.

Each train has a built-in velocity profile used when the train slows or stops.

- Calibrating this correctly is essential.
- Calibrating this correctly is hard, or at least arduous.

You can create your own profile by a succession of speed commands.

Return to: