# Kalman fiter for accelerometer

Started by June 24, 2010
```Hi

The problem i'm trying to face is to filter the accelerometer noise using a
kalman filter without any other input. I'm new to kalman filter and i don't
know exactly how to model and develop such a filter. As a first attempt i
tried to describe the problem as follows:

(p = position, v = velocity, a = acceleration, dt = time delta)
|p|
xhat_k = |v|
|a|

|1   dt  dt^2/2|
phy_k = |0   1     dt  |   \\updated with the time delta
|0   0     1   |   \\between two sensor readings

H = |0  0  1|

Q = process model covariance matrix

R  = measerement covariance matrix

\\a priori estimate
xhat_k^- = phy_k-1 * xhat_k-1              \\a priori state
P_k^- = phy_k-1 * P_k-1 * phy_k-1^t + Q    \\a priori covariance matrix

\\measurement update
z_k = measured acceleration
K_k = P_k^- H^t (H P_k^- H^t + R)^-1

\\a posteriori estimate
xhat_k = xhat_k^- + K_k(z_k - Hxhat_k^-)
P_k = (I &ndash; K_k H)P_k^-

Using this model i got a result still affected by noise. Did i make some
mistakes in the model?

```
```On 06/24/2010 05:15 AM, raffaello wrote:
> Hi
>
> The problem i'm trying to face is to filter the accelerometer noise using a
> kalman filter without any other input. I'm new to kalman filter and i don't
> know exactly how to model and develop such a filter. As a first attempt i
> tried to describe the problem as follows:
>
> (p = position, v = velocity, a = acceleration, dt = time delta)
>           |p|
> xhat_k = |v|
>           |a|
>
>          |1   dt  dt^2/2|
> phy_k = |0   1     dt  |   \\updated with the time delta
>          |0   0     1   |   \\between two sensor readings

This is the model for a 3rd-order system, which presumably takes jerk as
an input.

> H = |0  0  1|

And acceleration as an output, with velocity and position being clearly
unobservable.

> Q = process model covariance matrix
>
> R  = measerement covariance matrix
>
> \\a priori estimate
> xhat_k^- = phy_k-1 * xhat_k-1              \\a priori state
> P_k^- = phy_k-1 * P_k-1 * phy_k-1^t + Q    \\a priori covariance matrix
>
> \\measurement update
> z_k = measured acceleration
> K_k = P_k^- H^t (H P_k^- H^t + R)^-1
>
>
> \\a posteriori estimate
> xhat_k = xhat_k^- + K_k(z_k - Hxhat_k^-)
> P_k = (I &ndash; K_k H)P_k^-
>
>
> Using this model i got a result still affected by noise. Did i make some
> mistakes in the model?

At best what you are going to get with this construction is a 1st-order
lowpass filter of your accelerometer output, that wastes a bunch of
computation time on two states that it never uses.

So back off a bit, and tell us more:  What are you _really_ doing?  Why
do you want to filter your accelerometer output?  What information do
you want to end up with?

--
Tim Wescott
Control system and signal processing consulting
www.wescottdesign.com
```
```Hi,

thanks for your reply. What i want to do is to track the position of a
smartphone. I have a Motorola Milestone(this is the model
http://developer.motorola.com/products/milestone/ ) which contains a
LIS331DLH 3-axes accelerometer.
I tried to use the pure accelerometers output to estimate the position of
the device but there is to much noise and, if i leave my phone motionless
on the table, the accelerometers give me a non zero value.

How should i use the sensors of the smartphone to track its position?
How should i correct my kalman filter to filter the accelerometers noise
and to estimate the correct position of the phone?

Thanks!

R. B.

```
```On 06/24/2010 11:32 AM, raffaello wrote:
> Hi,
>
> thanks for your reply. What i want to do is to track the position of a
> smartphone. I have a Motorola Milestone(this is the model
> http://developer.motorola.com/products/milestone/ ) which contains a
> LIS331DLH 3-axes accelerometer.
> I tried to use the pure accelerometers output to estimate the position of
> the device but there is to much noise and, if i leave my phone motionless
> on the table, the accelerometers give me a non zero value.
>
> How should i use the sensors of the smartphone to track its position?
> How should i correct my kalman filter to filter the accelerometers noise
> and to estimate the correct position of the phone?

There was a long thread on this topic recently; just replace "iPhone"
with "Motorola Milestone" and you'll get the gist of it.

http://www.dsprelated.com/showmessage/127160/1.php

I don't think you can get there from here with the sensors you have
available -- but all the arguments have already been hashed out there.

--
Tim Wescott
Control system and signal processing consulting
www.wescottdesign.com
```
```On Jun 24, 10:04&#2013266080;am, Tim Wescott <t...@seemywebsite.now> wrote:
> On 06/24/2010 05:15 AM, raffaello wrote:
>
> > Hi
>
> > The problem i'm trying to face is to filter the accelerometer noise using a
> > kalman filter without any other input. I'm new to kalman filter and i don't
> > know exactly how to model and develop such a filter. As a first attempt i
> > tried to describe the problem as follows:
>
> > (p = position, v = velocity, a = acceleration, dt = time delta)
> > &#2013266080; &#2013266080; &#2013266080; &#2013266080; &#2013266080; |p|
> > xhat_k = |v|
> > &#2013266080; &#2013266080; &#2013266080; &#2013266080; &#2013266080; |a|
>
> > &#2013266080; &#2013266080; &#2013266080; &#2013266080; &#2013266080;|1 &#2013266080; dt &#2013266080;dt^2/2|
> > phy_k = |0 &#2013266080; 1 &#2013266080; &#2013266080; dt &#2013266080;| &#2013266080; \\updated with the time delta
> > &#2013266080; &#2013266080; &#2013266080; &#2013266080; &#2013266080;|0 &#2013266080; 0 &#2013266080; &#2013266080; 1 &#2013266080; | &#2013266080; \\between two sensor readings
>
> This is the model for a 3rd-order system, which presumably takes jerk as
> an input.
This looks like a second order model to me.
Examples can be found in you Dan Simon book.

Peter Nachtwey
```
```On 06/24/2010 03:52 PM, pnachtwey wrote:
> On Jun 24, 10:04 am, Tim Wescott<t...@seemywebsite.now>  wrote:
>> On 06/24/2010 05:15 AM, raffaello wrote:
>>
>>> Hi
>>
>>> The problem i'm trying to face is to filter the accelerometer noise using a
>>> kalman filter without any other input. I'm new to kalman filter and i don't
>>> know exactly how to model and develop such a filter. As a first attempt i
>>> tried to describe the problem as follows:
>>
>>> (p = position, v = velocity, a = acceleration, dt = time delta)
>>>            |p|
>>> xhat_k = |v|
>>>            |a|
>>
>>>           |1   dt  dt^2/2|
>>> phy_k = |0   1     dt  |   \\updated with the time delta
>>>           |0   0     1   |   \\between two sensor readings
>>
>> This is the model for a 3rd-order system, which presumably takes jerk as
>> an input.

> This looks like a second order model to me.
> Examples can be found in you Dan Simon book.

It has three states, arranged as a cascade of three integrators.  If
you're modeling motion with an acceleration for an input then you
probably do want two states -- but that's not what this model has.

--
Tim Wescott
Control system and signal processing consulting
www.wescottdesign.com
```
```Tim Wescott <tim@seemywebsite.now> writes:

> On 06/24/2010 11:32 AM, raffaello wrote:
>> Hi,
>>
>> thanks for your reply. What i want to do is to track the position of a
>> smartphone. I have a Motorola Milestone(this is the model
>> http://developer.motorola.com/products/milestone/ ) which contains a
>> LIS331DLH 3-axes accelerometer.
>> I tried to use the pure accelerometers output to estimate the position of
>> the device but there is to much noise and, if i leave my phone motionless
>> on the table, the accelerometers give me a non zero value.
>>
>> How should i use the sensors of the smartphone to track its position?
>> How should i correct my kalman filter to filter the accelerometers noise
>> and to estimate the correct position of the phone?
>
> There was a long thread on this topic recently; just replace "iPhone"
> with "Motorola Milestone" and you'll get the gist of it.
>
> http://www.dsprelated.com/showmessage/127160/1.php
>
> I don't think you can get there from here with the sensors you have
> available -- but all the arguments have already been hashed out there.

Right - you need rate sensors as well as linear.
--
Randy Yates                      % "She has an IQ of 1001, she has a jumpsuit
Digital Signal Labs              %            on, and she's also a telephone."
mailto://yates@ieee.org          %
http://www.digitalsignallabs.com %        'Yours Truly, 2095', *Time*, ELO
```
```On 06/24/2010 07:09 PM, Randy Yates wrote:
> Tim Wescott<tim@seemywebsite.now>  writes:
>
>> On 06/24/2010 11:32 AM, raffaello wrote:
>>> Hi,
>>>
>>> thanks for your reply. What i want to do is to track the position of a
>>> smartphone. I have a Motorola Milestone(this is the model
>>> http://developer.motorola.com/products/milestone/ ) which contains a
>>> LIS331DLH 3-axes accelerometer.
>>> I tried to use the pure accelerometers output to estimate the position of
>>> the device but there is to much noise and, if i leave my phone motionless
>>> on the table, the accelerometers give me a non zero value.
>>>
>>> How should i use the sensors of the smartphone to track its position?
>>> How should i correct my kalman filter to filter the accelerometers noise
>>> and to estimate the correct position of the phone?
>>
>> There was a long thread on this topic recently; just replace "iPhone"
>> with "Motorola Milestone" and you'll get the gist of it.
>>
>> http://www.dsprelated.com/showmessage/127160/1.php
>>
>> I don't think you can get there from here with the sensors you have
>> available -- but all the arguments have already been hashed out there.
>
> Right - you need rate sensors as well as linear.

And -- unless you're going to subject the thing to some pretty odd
gyrations -- much better rate sensors than you'll find in a cruddy old
phone.

--
Tim Wescott
Control system and signal processing consulting
www.wescottdesign.com
```
```
"raffaello" <rbrondi@n_o_s_p_a_m.gmail.com> schrieb im Newsbeitrag
news:xYidndsSFurZ0b7RnZ2dnUVZ_t6dnZ2d@giganews.com...
> Hi
>
> The problem i'm trying to face is to filter the accelerometer noise using
> a
> kalman filter without any other input. I'm new to kalman filter and i
> don't
> know exactly how to model and develop such a filter. As a first attempt i
> tried to describe the problem as follows:
>
> (p = position, v = velocity, a = acceleration, dt = time delta)
>         |p|
> xhat_k = |v|
>         |a|
>
>        |1   dt  dt^2/2|
> phy_k = |0   1     dt  |   \\updated with the time delta
>        |0   0     1   |   \\between two sensor readings
>
> H = |0  0  1|
>
> Q = process model covariance matrix
>
> R  = measerement covariance matrix
>
> \\a priori estimate
> xhat_k^- = phy_k-1 * xhat_k-1              \\a priori state
> P_k^- = phy_k-1 * P_k-1 * phy_k-1^t + Q    \\a priori covariance matrix
>
> \\measurement update
> z_k = measured acceleration
> K_k = P_k^- H^t (H P_k^- H^t + R)^-1
>
>
> \\a posteriori estimate
> xhat_k = xhat_k^- + K_k(z_k - Hxhat_k^-)
> P_k = (I &ndash; K_k H)P_k^-
>
>
> Using this model i got a result still affected by noise. Did i make some
> mistakes in the model?
>

Maybe this could solve your problem:

a = acceleration
v = velocity
p = position

a = dp^2/dt^2

Numerically change to difference equation

a_i = (p_i+1 - 2 * p_i + p_i-1) / h ^ 2
h = dt

EXAMPLE

<< Solved by Gaussian Method >>

8 Equations:

((p_2 - 2 * p_1 + p_0) / h ^ 2) - a_1 = 0
((p_3 - 2 * p_2 + p_1) / h ^ 2) - a_2 = 0
((p_4 - 2 * p_3 + p_2) / h ^ 2) - a_3 = 0
((p_5 - 2 * p_4 + p_3) / h ^ 2) - a_4 = 0
((p_6 - 2 * p_5 + p_4) / h ^ 2) - a_5 = 0
((p_7 - 2 * p_6 + p_5) / h ^ 2) - a_6 = 0
((p_8 - 2 * p_7 + p_6) / h ^ 2) - a_7 = 0
((p_1 -  p_0) / h) - v_0 = 0

Known Values

a_1 =           10
a_2 =           50
a_3 =           70
a_4 =          -90
a_5 =          -45
a_6 =          -30
a_7 =           80

h   =            1

p_0 =            0 'Start Values
v_0 =            0

Solution

p_1 =            0
p_2 =           10
p_3 =           70
p_4 =          200
p_5 =          240
p_6 =          235
p_7 =          200
p_8 =          245

JCH

```