@@ -29,51 +29,42 @@ void kalman_init(void)
2929#pragma GCC optimize("O3")
3030void update_kalman_covariance (volatile axisData_t * gyroRateData )
3131{
32- varStruct .xWindow [ varStruct .windex ] = gyroRateData -> x ;
33- varStruct .yWindow [ varStruct .windex ] = gyroRateData -> y ;
34- varStruct .zWindow [ varStruct .windex ] = gyroRateData -> z ;
32+ varStruct .xWindow [ varStruct .windex ] = gyroRateData -> x ;
33+ varStruct .yWindow [ varStruct .windex ] = gyroRateData -> y ;
34+ varStruct .zWindow [ varStruct .windex ] = gyroRateData -> z ;
3535
36- varStruct .xSumMean += varStruct .xWindow [ varStruct .windex ];
37- varStruct .ySumMean += varStruct .yWindow [ varStruct .windex ];
38- varStruct .zSumMean += varStruct .zWindow [ varStruct .windex ];
39- varStruct .xSumVar = varStruct .xSumVar + ( varStruct .xWindow [ varStruct .windex ] * varStruct .xWindow [ varStruct .windex ]);
40- varStruct .ySumVar = varStruct .ySumVar + ( varStruct .yWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
41- varStruct .zSumVar = varStruct .zSumVar + ( varStruct .zWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
42- varStruct .xySumCoVar = varStruct .xySumCoVar + ( varStruct .xWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
43- varStruct .xzSumCoVar = varStruct .xzSumCoVar + ( varStruct .xWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
44- varStruct .yzSumCoVar = varStruct .yzSumCoVar + ( varStruct .yWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
45- varStruct .windex ++ ;
36+ varStruct .xSumMean += varStruct .xWindow [ varStruct .windex ];
37+ varStruct .ySumMean += varStruct .yWindow [ varStruct .windex ];
38+ varStruct .zSumMean += varStruct .zWindow [ varStruct .windex ];
39+ varStruct .xSumVar = varStruct .xSumVar + ( varStruct .xWindow [ varStruct .windex ] * varStruct .xWindow [ varStruct .windex ]);
40+ varStruct .ySumVar = varStruct .ySumVar + ( varStruct .yWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
41+ varStruct .zSumVar = varStruct .zSumVar + ( varStruct .zWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
42+ varStruct .windex ++ ;
4643 if ( varStruct .windex >= filterConfig .w )
4744 {
4845 varStruct .windex = 0 ;
4946 }
50- varStruct .xSumMean -= varStruct .xWindow [ varStruct .windex ];
51- varStruct .ySumMean -= varStruct .yWindow [ varStruct .windex ];
52- varStruct .zSumMean -= varStruct .zWindow [ varStruct .windex ];
53- varStruct .xSumVar = varStruct .xSumVar - ( varStruct .xWindow [ varStruct .windex ] * varStruct .xWindow [ varStruct .windex ]);
54- varStruct .ySumVar = varStruct .ySumVar - ( varStruct .yWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
55- varStruct .zSumVar = varStruct .zSumVar - ( varStruct .zWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
56- varStruct .xySumCoVar = varStruct .xySumCoVar - ( varStruct .xWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
57- varStruct .xzSumCoVar = varStruct .xzSumCoVar - ( varStruct .xWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
58- varStruct .yzSumCoVar = varStruct .yzSumCoVar - ( varStruct .yWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
47+ varStruct .xSumMean -= varStruct .xWindow [ varStruct .windex ];
48+ varStruct .ySumMean -= varStruct .yWindow [ varStruct .windex ];
49+ varStruct .zSumMean -= varStruct .zWindow [ varStruct .windex ];
50+ varStruct .xSumVar = varStruct .xSumVar - ( varStruct .xWindow [ varStruct .windex ] * varStruct .xWindow [ varStruct .windex ]);
51+ varStruct .ySumVar = varStruct .ySumVar - ( varStruct .yWindow [ varStruct .windex ] * varStruct .yWindow [ varStruct .windex ]);
52+ varStruct .zSumVar = varStruct .zSumVar - ( varStruct .zWindow [ varStruct .windex ] * varStruct .zWindow [ varStruct .windex ]);
5953
60- varStruct .xMean = varStruct .xSumMean * varStruct .inverseN ;
61- varStruct .yMean = varStruct .ySumMean * varStruct .inverseN ;
62- varStruct .zMean = varStruct .zSumMean * varStruct .inverseN ;
54+ varStruct .xMean = varStruct .xSumMean * varStruct .inverseN ;
55+ varStruct .yMean = varStruct .ySumMean * varStruct .inverseN ;
56+ varStruct .zMean = varStruct .zSumMean * varStruct .inverseN ;
6357
64- varStruct .xVar = ABS (varStruct .xSumVar * varStruct .inverseN - ( varStruct .xMean * varStruct .xMean ));
65- varStruct .yVar = ABS (varStruct .ySumVar * varStruct .inverseN - ( varStruct .yMean * varStruct .yMean ));
66- varStruct .zVar = ABS (varStruct .zSumVar * varStruct .inverseN - ( varStruct .zMean * varStruct .zMean ));
67- varStruct .xyCoVar = ABS (varStruct .xySumCoVar * varStruct .inverseN - ( varStruct .xMean * varStruct .yMean ));
68- varStruct .xzCoVar = ABS (varStruct .xzSumCoVar * varStruct .inverseN - ( varStruct .xMean * varStruct .zMean ));
69- varStruct .yzCoVar = ABS (varStruct .yzSumCoVar * varStruct .inverseN - ( varStruct .yMean * varStruct .zMean ));
58+ varStruct .xVar = ABS (varStruct .xSumVar * varStruct .inverseN - ( varStruct .xMean * varStruct .xMean ));
59+ varStruct .yVar = ABS (varStruct .ySumVar * varStruct .inverseN - ( varStruct .yMean * varStruct .yMean ));
60+ varStruct .zVar = ABS (varStruct .zSumVar * varStruct .inverseN - ( varStruct .zMean * varStruct .zMean ));
7061
7162 float squirt ;
72- arm_sqrt_f32 (varStruct .xVar + varStruct . xyCoVar + varStruct . xzCoVar , & squirt );
63+ arm_sqrt_f32 (varStruct .xVar , & squirt );
7364 kalmanFilterStateRate [ROLL ].r = squirt * VARIANCE_SCALE ;
74- arm_sqrt_f32 (varStruct .yVar + varStruct . xyCoVar + varStruct . yzCoVar , & squirt );
65+ arm_sqrt_f32 (varStruct .yVar , & squirt );
7566 kalmanFilterStateRate [PITCH ].r = squirt * VARIANCE_SCALE ;
76- arm_sqrt_f32 (varStruct .zVar + varStruct . yzCoVar + varStruct . xzCoVar , & squirt );
67+ arm_sqrt_f32 (varStruct .zVar , & squirt );
7768 kalmanFilterStateRate [YAW ].r = squirt * VARIANCE_SCALE ;
7869}
7970
0 commit comments