Kalman Filter to track sine wave

4 views (last 30 days)
FixedFilip
FixedFilip on 2 Jan 2017

Hi everyone,

currently I'm measuring the skin temperature to track it over time and get more information about the circadian rhythm, which follows a sine function and can be seen in the following plot for a 48h-period:

To get more reliable data I applied an Extended Kalman Filter (EKF) with following parameters:

    % Dynamic state transition matrix in continous-time domain.
    F = [0 1 0 0;
         0 0 0 0;
         0 0 0 0;
         0 0 0 0];
    % Noise effect matrix in continous-time domain.
    L = [0 0 0;
         1 0 0;
         0 1 0;
         0 0 1];
    % Spectral power density of the white noise.
    q1 = 0.2;
    q2 = 0.1;
    q3 = 0.2;
    Qc = diag([q1 q2 q3]);

where my state vector contains the sine curve's argument, it's angular velocity, amplitude and I also tried to tie in it's offset. In this case, the measurement model is

    Y = a.*sin(f) + m;
    % The Jacobian of the measure model
    dY = [(a.*cos(f))' 0 (sin(f))' 1];

and here's a plot of the estimated parameters:

I am using the Matlab toolbox EKF/UKF (see <http://becs.aalto.fi>) to process the model.

For me, only the offset (m; like Mesor) looks correctly estimated. Does anybody can say whether my model is wrong or whats my mistake? Thanks in advance!

Filip

In addition to this: without the fourth state the offset would be modeled as Gaussian white noise with zero mean. Therefore, to model the offset I added it as the fourth state variable. Is this approach right?

Answers (2)

FixedFilip
FixedFilip on 13 Jan 2017
Does anybody know how to solve this issue?

Ernest Beltran Prades
Ernest Beltran Prades on 19 Nov 2021
Hello,
Could you solve this problem? I'm working on it for another application.
Thanks

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!