You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
62 lines
1.5 KiB
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- |
|
|
|
#include "Plane.h" |
|
|
|
#if 0 // currently unused |
|
|
|
struct DataPoint { |
|
unsigned long x; |
|
long y; |
|
}; |
|
|
|
DataPoint history[ALTITUDE_HISTORY_LENGTH]; // Collection of (x,y) points to regress a rate of change from |
|
unsigned char hindex; // Index in history for the current data point |
|
|
|
unsigned long xoffset; |
|
unsigned char n; |
|
|
|
// Intermediate variables for regression calculation |
|
long xi; |
|
long yi; |
|
long xiyi; |
|
unsigned long xi2; |
|
|
|
void add_altitude_data(unsigned long xl, long y) |
|
{ |
|
//Reset the regression if our X variable overflowed |
|
if (xl < xoffset) |
|
n = 0; |
|
|
|
//To allow calculation of sum(xi*yi), make sure X hasn't exceeded 2^32/2^15/length |
|
if (xl - xoffset > 131072/ALTITUDE_HISTORY_LENGTH) |
|
n = 0; |
|
|
|
if (n == ALTITUDE_HISTORY_LENGTH) { |
|
xi -= history[hindex].x; |
|
yi -= history[hindex].y; |
|
xiyi -= (long)history[hindex].x * history[hindex].y; |
|
xi2 -= history[hindex].x * history[hindex].x; |
|
} else { |
|
if (n == 0) { |
|
xoffset = xl; |
|
xi = 0; |
|
yi = 0; |
|
xiyi = 0; |
|
xi2 = 0; |
|
} |
|
n++; |
|
} |
|
|
|
history[hindex].x = xl - xoffset; |
|
history[hindex].y = y; |
|
|
|
xi += history[hindex].x; |
|
yi += history[hindex].y; |
|
xiyi += (long)history[hindex].x * history[hindex].y; |
|
xi2 += history[hindex].x * history[hindex].x; |
|
|
|
if (++hindex >= ALTITUDE_HISTORY_LENGTH) |
|
hindex = 0; |
|
} |
|
#endif |
|
|
|
|