| 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 | *************************************/ |
|---|
| 12 | |
|---|
| 13 | #define qAU 14 |
|---|
| 14 | #define qCU 15 |
|---|
| 15 | #define qD 13 |
|---|
| 16 | #define qCh 13 |
|---|
| 17 | |
|---|
| 18 | #define int16 short |
|---|
| 19 | #define int32 int |
|---|
| 20 | #define int64 long |
|---|
| 21 | |
|---|
| 22 | /* Matrix multiply Full matrix by upper diagonal matrix with unit diagonal; */ |
|---|
| 23 | extern void mmultAU(int16 *m1, int16 *up, int16 *result, unsigned int16 rows, unsigned int16 columns); |
|---|
| 24 | |
|---|
| 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 | |
|---|
| 28 | /* Matrix multiply Full matrix by upper diagonal matrix; */ |
|---|
| 29 | extern void mmultACh(int16 *m1, int16 *up, int16 *result, unsigned int16 rows, unsigned int16 columns); |
|---|
| 30 | |
|---|
| 31 | /* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/ |
|---|
| 32 | extern void thorton(int16 *U, int16 *D, int16 *PSIU, int16 *Q, int16 *G, int16 *Dold, unsigned int16 dimx); |
|---|
| 33 | |
|---|
| 34 | /* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/ |
|---|
| 35 | extern void bierman(int16 *difz, int16 *xp, int16 *U, int16 *D, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
|---|
| 36 | |
|---|
| 37 | /* perform Thorton update of UD matrix using PSI*U, Q, and temporaries G, Dold, for size dimx*/ |
|---|
| 38 | extern void thorton_fast(int16 *U, int16 *D, int16 *PSIU, int16 *Q, int16 *G, int16 *Dold, unsigned int16 dimx); |
|---|
| 39 | |
|---|
| 40 | /* perform Bierman update of UD matrix using difz, R and xp, for size dimx*/ |
|---|
| 41 | extern void bierman_fast(int16 *difz, int16 *xp, int16 *U, int16 *D, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
|---|
| 42 | |
|---|
| 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 | |
|---|
| 46 | /* perform Householder update of Ch matrix using PSI*Ch , Q, */ |
|---|
| 47 | extern void householder(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
|---|
| 48 | |
|---|
| 49 | /* perform Givens update of Ch matrix using PSI*Ch , Q, */ |
|---|
| 50 | extern void givens(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
|---|
| 51 | |
|---|
| 52 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx*/ |
|---|
| 53 | extern void carlson(int16 *difz, int16 *xp, int16 *Ch, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
|---|
| 54 | |
|---|
| 55 | /* perform Givens update of Ch matrix using PSI*Ch and Q, */ |
|---|
| 56 | extern void givens_fast(int16 *Ch /*= int16 *PSICh*/, int16 *Q, unsigned int16 dimx); |
|---|
| 57 | |
|---|
| 58 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx, asuming identity matrix C*/ |
|---|
| 59 | extern void carlson_fast(int16 *difz, int16 *xp, int16 *Ch, int16 *R, unsigned int16 dimy, unsigned int16 dimx ); |
|---|
| 60 | |
|---|
| 61 | /* perform Carlson update of Ch matrix using difz, R and xp, for size dimx*/ |
|---|
| 62 | extern void carlson_fastC(int16* difz, int16* xp, int16* Ch, int16* C, int16* R, unsigned int16 dimy, unsigned int16 dimx, int16* detS, int16* rem ); |
|---|