[1174] | 1 | /************************************ |
---|
| 2 | Extended Kalman Filter |
---|
| 3 | Matrix operations |
---|
| 4 | |
---|
| 5 | V. Smidl |
---|
| 6 | |
---|
| 7 | Rev. 30.8.2010 |
---|
| 8 | |
---|
| 9 | 30.8.2010 Prvni verze |
---|
| 10 | |
---|
| 11 | *************************************/ |
---|
[1225] | 12 | |
---|
[1228] | 13 | #define qAU 14 |
---|
[1313] | 14 | #define qCU 15 |
---|
[1340] | 15 | #define qD 13 |
---|
[1465] | 16 | #define qCh 13 |
---|
[1225] | 17 | |
---|
[1329] | 18 | #define int16 short |
---|
| 19 | #define int32 int |
---|
[1465] | 20 | #define int64 long |
---|
[1240] | 21 | |
---|
[1225] | 22 | /* Matrix multiply Full matrix by upper diagonal matrix with unit diagonal; */ |
---|
[1240] | 23 | extern void mmultAU(int16 *m1, int16 *up, int16 *result, unsigned int16 rows, unsigned int16 columns); |
---|
[1174] | 24 | |
---|
[1313] | 25 | /* Matrix multiply Full matrix by upper diagonal matrix with unit diagonal; */ |
---|
| 26 | extern void mmultCU(int16 *m1, int16 *up, int16 *result, unsigned int16 rows, unsigned int16 columns); |
---|
| 27 | |
---|
[1225] | 28 | /* Matrix multiply Full matrix by upper diagonal matrix; */ |
---|
[1240] | 29 | extern void mmultACh(int16 *m1, int16 *up, int16 *result, unsigned int16 rows, unsigned int16 columns); |
---|
[1225] | 30 | |
---|
[1174] | 31 | /* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/ |
---|
[1240] | 32 | extern void thorton(int16 *U, int16 *D, int16 *PSIU, int16 *Q, int16 *G, int16 *Dold, unsigned int16 dimx); |
---|
[1174] | 33 | |
---|
| 34 | /* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/ |
---|
[1240] | 35 | extern void bierman(int16 *difz, int16 *xp, int16 *U, int16 *D, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
---|
[1179] | 36 | |
---|
| 37 | /* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/ |
---|
[1240] | 38 | extern void thorton_fast(int16 *U, int16 *D, int16 *PSIU, int16 *Q, int16 *G, int16 *Dold, unsigned int16 dimx); |
---|
[1179] | 39 | |
---|
| 40 | /* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/ |
---|
[1240] | 41 | extern void bierman_fast(int16 *difz, int16 *xp, int16 *U, int16 *D, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
---|
[1225] | 42 | |
---|
[1313] | 43 | /* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/ |
---|
| 44 | extern void bierman_fastC(int16 *difz, int16 *xp, int16 *U, int16 *D, int16 *C, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
---|
| 45 | |
---|
[1225] | 46 | /* perform Householder update of Ch matrix using PSI*Ch , Q, */ |
---|
[1240] | 47 | extern void householder(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
---|
[1225] | 48 | |
---|
[1230] | 49 | /* perform Givens update of Ch matrix using PSI*Ch , Q, */ |
---|
[1240] | 50 | extern void givens(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
---|
[1230] | 51 | |
---|
[1225] | 52 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx*/ |
---|
[1240] | 53 | extern void carlson(int16 *difz, int16 *xp, int16 *Ch, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
---|
[1294] | 54 | |
---|
[1464] | 55 | /* perform Givens update of Ch matrix using PSI*Ch and Q, */ |
---|
[1294] | 56 | extern void givens_fast(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
---|
| 57 | |
---|
[1464] | 58 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx, asuming identity matrix C*/ |
---|
[1294] | 59 | extern void carlson_fast(int16 *difz, int16 *xp, int16 *Ch, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
---|
[1321] | 60 | |
---|
| 61 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx*/ |
---|
[1468] | 62 | extern void carlson_fastC(int16* difz, int16* xp, int16* Ch, int16* C, int16* R, unsigned int16 dimy, unsigned int16 dimx, int32* detS, int16* rem ); |
---|