The code I am using (copied from the apache commons page on the kalman
filter) is:
public class Kalman {
void main(){
System.out.println("BEGINNING");
double constantVoltage = 10d;
double measurementNoise = 0.1d;
double processNoise = 1e-5d;
// A = [ 1 ]
RealMatrix A = new Array2DRowRealMatrix(new double[] { 1d });
// B = null
RealMatrix B = null;
// H = [ 1 ]
RealMatrix H = new Array2DRowRealMatrix(new double[] { 1d });
// x = [ 10 ]
RealVector x = new ArrayRealVector(new double[]
{ constantVoltage });
// Q = [ 1e-5 ]
RealMatrix Q = new Array2DRowRealMatrix(new double[]
{ processNoise });
// P = [ 1 ]
RealMatrix P0 = new Array2DRowRealMatrix(new double[] { 1d });
// R = [ 0.1 ]
RealMatrix R = new Array2DRowRealMatrix(new double[]
{ measurementNoise });
System.out.println("anywhere");
ProcessModel pm = new DefaultProcessModel(A, B, Q, x, P0);
MeasurementModel mm = new DefaultMeasurementModel(H, R);
KalmanFilter filter = new KalmanFilter(pm, mm);
System.out.println("there");
// process and measurement noise vectors
RealVector pNoise = new ArrayRealVector(1);
RealVector mNoise = new ArrayRealVector(1);
System.out.println("here");
RandomGenerator rand = new JDKRandomGenerator();
// iterate 60 steps
for (int i = 0; i < 60; i++) {
System.out.println("beginning");
filter.predict();
System.out.println("after Predict");
// simulate the process
pNoise.setEntry(0, processNoise * rand.nextGaussian());
System.out.println("after setEntry");
// x = A * x + p_noise
x = A.operate(x).add(pNoise);
System.out.println("after adding pNoise");
// simulate the measurement
mNoise.setEntry(0, measurementNoise * rand.nextGaussian
());
System.out.println("after 2nd setEntry");
// z = H * x + m_noise
RealVector z = H.operate(x).add(mNoise);
System.out.println("after adding mNoise");
filter.correct(z);
System.out.println("after correct");
double voltage = filter.getStateEstimation()[0];
System.out.println("at the end");
}
}
}
Here is a (very small) sample of the output. full output is over 1100
lines.
EXP_INT_TABLE_A=
{
+0.0d,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
Double.NaN,
+1.2167807682331913E-308d,
+3.3075532478807267E-308d,
+8.990862214387203E-308d,
};
EXP_INT_TABLE_B=
{
+0.0d,
Double.NaN,
Double.NaN,
Double.NaN,
};
LN_MANT
{
{+0.0d, +0.0d, }, // 0
{+9.760860120877624E-4d, -3.903230345984362E-11d, }, // 1
{+0.0019512202125042677d, -8.124251825289188E-11d, }, // 2
{+0.0029254043474793434d, -1.8374207360194882E-11d,}, // 3
{+0.0038986406289041042d, -2.1324678121885073E-10d,}, // 4
{+0.004870930686593056d, -4.5199654318611534E-10d,}, // 5
{+0.00584227591753006d, -2.933016992001806E-10d, }, // 6
{+0.006812678650021553d, -2.325147219074669E-10d, }, // 7
{+0.007782140746712685d, -3.046577356838847E-10d, }, // 8
{+0.008750664070248604d, -5.500631513861575E-10d, }, // 9
{+0.6916812658309937d, -2.9535446262017846E-9d, }, // 1021
{+0.6921701431274414d, -2.2153227096187463E-9d, }, // 1022
{+0.6926587820053101d, -1.943473623641502E-9d, }, // 1023
};
SINE_TABLE_A=
{
+0.0d,
+0.1246747374534607d,
+0.24740394949913025d,
+0.366272509098053d,
The output contains A and B tables for sine, cosine, and tangent. The A
tables seem to be on the numerical scale of SINE_TABLE_A, and the B tables
are on the scale of E-8 or so.
From: Gilles Sadowski <[email protected]>
To: [email protected],
Date: 07/26/2012 11:54
Subject: Re: [MATH] Kalman Filter
On Thu, Jul 26, 2012 at 11:21:09AM -0400, Garrett Kane wrote:
>
>
> I am having trouble understanding the output of the Kalman Filter in math
> 3.0 is there anyone who can explain to me what the various trigonometric,
> exp, and lp_mant tables in the console output are used for? my eventual
> goal is to feed output from this filter into a graphing engine to compare
> real/predicted data but obviously I need to understand the output first.
> Thanks
> -Garrett
http://markmail.org/message/a2r45shfg7w2iw7f
Regards,
Gilles
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]