<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Mech. Eng.</journal-id>
<journal-title>Frontiers in Mechanical Engineering</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Mech. Eng.</abbrev-journal-title>
<issn pub-type="epub">2297-3079</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fmech.2019.00074</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Mechanical Engineering</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Adaptive Step Size Control of Extended/Unscented Kalman Filter Using Event Handling Concept</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Bakhshande</surname> <given-names>Fateme</given-names></name>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/808659/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>S&#x000F6;ffker</surname> <given-names>Dirk</given-names></name>
<uri xlink:href="http://loop.frontiersin.org/people/137535/overview"/>
</contrib>
</contrib-group>
<aff><institution>Chair of Dynamics and Control, University of Duisburg-Essen</institution>, <addr-line>Duisburg</addr-line>, <country>Germany</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Hamid Reza Karimi, Politecnico di Milano, Italy</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Eleni N. Chatzi, ETH Z&#x000FC;rich, Switzerland; Mingyang Xie, Nanjing University of Aeronautics and Astronautics, China; Yueying Wang, Shanghai University of Engineering Sciences, China; Baoping Jiang, Suzhou University of Science and Technology, China</p></fn>
<corresp id="c001">&#x0002A;Correspondence: Fateme Bakhshande <email>fateme.bakhshande&#x00040;uni-due.de</email></corresp>
<fn fn-type="other" id="fn001"><p>This article was submitted to Mechatronics, a section of the journal Frontiers in Mechanical Engineering</p></fn></author-notes>
<pub-date pub-type="epub">
<day>28</day>
<month>01</month>
<year>2020</year>
</pub-date>
<pub-date pub-type="collection">
<year>2019</year>
</pub-date>
<volume>5</volume>
<elocation-id>74</elocation-id>
<history>
<date date-type="received">
<day>13</day>
<month>09</month>
<year>2019</year>
</date>
<date date-type="accepted">
<day>31</day>
<month>12</month>
<year>2019</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2020 Bakhshande and S&#x000F6;ffker.</copyright-statement>
<copyright-year>2020</copyright-year>
<copyright-holder>Bakhshande and S&#x000F6;ffker</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract><p>This paper presents a novel (Extended/Unscented) Kalman Filter by augmenting the event handling procedure of Ordinary Differential Equation (ODE) solvers with the predictor-corrector scheme of Extended/Unscented discrete Kalman Filter (EKF/UKF) introducing a variable step size Kalman Filter. This innovation allows a new quality of precision while operating Kalman Filters. The original Kalman Filter is based on a time-discrete predictor-corrector scheme considering fixed step size. The main new idea is to introduce and control step size handling not introduced before. Step size control of EKF/UKF will increase the performance when applied to switching/stiff systems. The step size is controlled based on the current performance (EKF/UKF innovation) and is adapted during the estimation procedure based on an event handling algorithm. The proposed event handling algorithm consists of two parts: relaxing sample time and restricting sample time (ST). Relaxing procedure is used to avoid high computational time when no rapid change exists in system dynamics. Restricting procedure is considered to improve the estimation performance by decreasing the EKF/UKF step size in the case of fast dynamical behavior (switching/stiff behavior). Effectiveness of the proposed approach is verified considering the well-known Van der Pol oscillator as a common example of stiff systems.</p></abstract>
<kwd-group>
<kwd>Kalman Filter</kwd>
<kwd>extended Kalman filter</kwd>
<kwd>step size control</kwd>
<kwd>event handling</kwd>
<kwd>switching systems</kwd>
<kwd>stiff ODEs</kwd>
<kwd>Van der Pol system</kwd>
<kwd>zero crossing</kwd>
</kwd-group>
<counts>
<fig-count count="9"/>
<table-count count="2"/>
<equation-count count="14"/>
<ref-count count="26"/>
<page-count count="13"/>
<word-count count="6942"/>
</counts>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1. Introduction and Problem Definition</title>
<p>Step size control normally contains event handling procedure to detect the moment in time of specific event. Event handling and zero crossing detection are well-known and well established approaches to handle numerical simulation (Watts, <xref ref-type="bibr" rid="B24">1984</xref>; Zhang et al., <xref ref-type="bibr" rid="B26">2008</xref>). The idea of improving the performance by detecting the moment in time at which events take place is known in the field of ODE solvers. In Esposito and Kumar (<xref ref-type="bibr" rid="B11">2007</xref>) an event detection algorithm is introduced for non-smooth differential equations. In this paper an extrapolation polynomial is used for selection of the integration step size to detect potential future events. This approaches has advantages especially in the neighborhood of model singularities where the derivative function is undefined in state space. Singular systems can be modeled as Markovian jump singular systems. Investigation of stability, stabilization, control, and filtering of these systems are more complicated compared to the systems modeled in state space (Wang et al., <xref ref-type="bibr" rid="B23">2017</xref>).</p>
<p>In Bernal (<xref ref-type="bibr" rid="B7">1991</xref>) the author addressed calculation of time-step sizes to prevent interstep events in multilinear problems. In this work an approach is introduced to locate the moment in time when the stiffness changes in a non-linear system. This approach can be considered as an interpolation scheme of the time when events occur by using computed responses at the end of corresponding linear step. In Wright and Pei (<xref ref-type="bibr" rid="B25">2012</xref>) an explicit numerical method is proposed to solve differential algebraic equations (DAE) considering low-order discontinuities in the restoring force algebraic equations. The effectiveness of this approach is verified for a specific class of problems namely non-smooth DAE with discontinuities. The algorithm is able to automatically detect each state event location.</p>
<p>In reality the system dynamics is modeled by linear or non-linear ordinary differential equations. For example in Bakhshande and S&#x000F6;ffker (<xref ref-type="bibr" rid="B4">2015</xref>) an elastic beam is modeled as a linear ODE. A high gain Proportional-Integral-Observer (PIO) introduced in S&#x000F6;ffker et al. (<xref ref-type="bibr" rid="B18">1995</xref>) is used to estimate the node displacements of the elastic beam system as well as the disturbance force affects the system dynamics. The dynamics of system and observer are augmented and described in one linear ODE form. The aforementioned example can be described by a suitable initial value problem (IVP). In this case stiff solvers able to handle stiff problems are used to avoid high computational time by relaxing the integration step size when no rapid change exists in system states and disturbance dynamics, as well as to improve the estimation results by decreasing the integration step size in the case of fast dynamical behavior related to disturbances (stiff behavior). In Bakhshande and S&#x000F6;ffker (<xref ref-type="bibr" rid="B4">2015</xref>) simulation results are achieved using stiff ODE solver in Matlab (ode15s) considering event handling and zero crossing procedures.</p>
<p>Kalman Filter and its extensions (EKF and UKF) has the same functionality as observers for discontinuous systems and measurements containing statistical noise and other inaccuracies. Different approaches have been introduced to improve the performance of KF and EKF/UKF. For example iterated extended Kalman filter (IEKF) (Bell and Cathey, <xref ref-type="bibr" rid="B6">1993</xref>) linearizes the system non-linear equations iteratively to compensate the significant non-linearities. In this algorithm an iterative procedure is considered for measurements update (correction part). The iterative procedure is stopped if the maximum number of iterations is reached or the difference between two iterations results is less than a pre-specified threshold. In Skoglund et al. (<xref ref-type="bibr" rid="B17">2015</xref>) by assuming the EKF as an optimization problem, different optimization algorithms (e.g., Line Search, Quasi-Newton, and Levenberg-Marquardt) are considered to improve the performance and robustness of estimation. In Havl&#x000ED;k and Straka (<xref ref-type="bibr" rid="B13">2015</xref>) an iterated extended Kalman filter with variable step-length is introduced. In this approach the sample time is considered as a fixed value. The measurement update step is calculated based on the Gauss-Newton algorithm or Line Search optimization procedure with variable step length. Here the step size is considered as step size of optimization procedure to ensure the convergence of a predefined criteria.</p>
<p>In Wang and Li (<xref ref-type="bibr" rid="B21">2008</xref>) an event-based Kalman Filter observer is proposed to control the angular position of a rotary high speed on/off valve. Measurements obtained at irregular time instants and detected by an encoder. The uncertainty on transition event occurrence time is considered as zero mean random measurement noise acting on rotary position. This measurement noise affected by the sampling time, is considered as part of the system model to be used for Kalman Filter estimation. In Chatzis and Chatzi (<xref ref-type="bibr" rid="B9">2017</xref>) a discontinuous Unscented Kalman Filter (DUKF) is proposed as an modified version of the UKF. This approach adapts the state space formulation, evaluates the observability within each time step, and selects the suitable sub-space that can be used by UKF. Consequently the unidentifiable parameters (related to non-smooth behaviors) are detected and excluded from the problem formulation.</p>
<p>An event triggered continuous discrete Kalman Filter is introduced in Niu et al. (<xref ref-type="bibr" rid="B16">2018</xref>). The MSE of estimation is controlled by detecting the event and taking a new measurement. This approach decreases the sample time at each step to reach the desired estimation error at the current sample time. The next estimation starts by reinitializing the sample time to the original one.</p>
<p>In all aforementioned approaches the sample time of estimation results is defined constant (based on the measurements) or is just reduced at the current step and is reinitialized for the next time step. The goal is to achieve a suitable estimation performance (in the case of event). None of the mentioned approaches focus of sample time control considering event detection by increasing and reducing the sample time during the estimation procedure (like ODE solvers). In this contribution the sample time is controlled based on the estimation performance. It decreases in the case that estimation error increases to achieve the desired performance. Correspondingly it increases when the performance is suitable enough to reduce the computational effort.</p>
<p>Event handling and zero crossing procedures have been used and improved over the previous years for solving stiff ODEs. The main objective of this paper is to integrate the benefits of event handling and zero crossing procedures into the discrete predictor-corrector scheme of Extended/Unscented Kalman Filter to adaptively control the step size. Procedure of KF starts from an initial set of Kalman parameters and system states. The next estimation step is realized based on the current step information (same concept as IVP). Generally the predictor-corrector approaches are based on a pre-specified tolerance. To use the KF for switching/stiff problems the algorithm should be able to look back, execute the solution with smaller step size (stiff problems), execute the solution at precisely defined moments in time (switching problems), and reach the predefined tolerance. Therefore, in this contribution a novel Extended/Unscented Kalman filter is proposed by augmenting the variable step size control in the predictor-corrector scheme for the stiff/switching systems. The proposed variable step size Extended/Unscented Kalman Filter is able to solve the state estimation of stiff problems in discrete time to avoid unnecessary high computational load if required and to increase estimation performance. Using the proposed variable step size Extended/Unscented Kalman Filter allows step size control inside the predictor-corrector procedure. Sample time is adapted based on current estimation performance (EKF/UKF innovation) of system states.</p>
<p>This contribution is based on the previously published initial research paper (Bakhshande and S&#x000F6;ffker, <xref ref-type="bibr" rid="B5">2018</xref>). In Bakhshande and S&#x000F6;ffker (<xref ref-type="bibr" rid="B5">2018</xref>) the first idea is presented for linear systems and correspondingly Kalman Filter. Extending and detailing the initial work, in this contribution an extended and improved version of step size control is proposed for non-linear dynamical behavior considering EKF and UKF. Furthermore, adjustment of design parameters is investigated in this contribution to get a suitable convergence rate and estimation error.</p>
<p>Unscented Kalman Filter is used here as a non-linear discrete filter which can be replaced by any other discrete filter for linear or non-linear systems. The main contributions of this paper can be summarized as follows:
<list list-type="bullet">
<list-item><p>Introducing a novel event-triggered discrete EKF/UKF for stiff/switching non-linear systems based on the event handling procedure in ODE solvers.</p></list-item>
<list-item><p>Adaptation of time step in EKF/UKF (discrete world) based on the Kalman innovation as key contribution of this paper (step size control in discrete world).</p></list-item>
<list-item><p>Controlling the innovation of estimation error for EKF/UKF and computational effort under designable thresholds (&#x003B1; and &#x003B2;).</p></list-item>
</list></p>
<p>The paper is organized as follows: First a general definition of stiff/switching systems is provided besides the common solutions to solve stiff ODEs. In the second part main aspects of (Matlab-based) ODE solvers are introduced e.g., zero crossing and event handling procedures with the purpose of integration into the structure of Extended/Unscented Kalman Filter. Subsequently, the proposed variable step size Extended/Unscented Kalman Filter is detailed considering the structure and procedure of well-known discrete EKF/UKF. Furthermore, the proposed method is evaluated using simulation results of the Van der Pol oscillator (common example of switching/stiff system). The last section finalizes the paper with a summary and conclusions.</p></sec>
<sec id="s2">
<title>2. Stiff/Switching System</title>
<p>Ordinary Differential Equation (ODE) contains derivative(s) of a dependent variable (usually denoting as <italic>x</italic> and corresponding derivative(s) as <italic>&#x01E8B;</italic>, <italic>&#x01E8D;</italic>, &#x02026;) with respect to a single independent variable (usually referring to time <italic>t</italic>). The initial Value Problems (IVP) are iteratively solved by assuming an initial condition <italic>x</italic>(<italic>t</italic><sub>0</sub>) &#x0003D; <italic>x</italic><sub>0</sub> and the time period of interest <italic>t</italic> &#x0003D; [<italic>t</italic><sub>0</sub>, <italic>t</italic><sub><italic>f</italic></sub>]. At each step the solver uses the results of previous step considering a particular algorithm (Euler&#x00027;s method, RungeKutta methods, etc.). The final result is given as a vector of time steps <italic>t</italic> &#x0003D; [<italic>t</italic><sub>0</sub>, <italic>t</italic><sub>1</sub>, &#x02026;, <italic>t</italic><sub><italic>f</italic></sub>] and corresponding sequence of values for the dependent variable <italic>x</italic> &#x0003D; [<italic>x</italic><sub>0</sub>, <italic>x</italic><sub>1</sub>, &#x02026;, <italic>x</italic><sub><italic>f</italic></sub>]. Higher-order differential equations can be reformulated at each step of iterative solving procedure of IVP as a system of first-order equations:</p>
<disp-formula id="E1"><label>(1)</label><mml:math id="M1"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mover><mml:mi>x</mml:mi><mml:mo>.</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02264;</mml:mo><mml:mi>t</mml:mi><mml:mo>&#x02264;</mml:mo><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with step size:</p>
<disp-formula id="E2"><label>(2)</label><mml:math id="M2"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>and corresponding solution:</p>
<disp-formula id="E3"><label>(3)</label><mml:math id="M3"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle displaystyle="true"><mml:msubsup><mml:mrow><mml:mo>&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msubsup></mml:mstyle><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>&#x003C4;</mml:mi><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mi>d</mml:mi><mml:mi>&#x003C4;</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Generally even if function <italic>f</italic> is a continuous function there is no guarantee that the IVP provides a unique solution. Considering Picard&#x00027;s theorem according to S&#x000FC;li (<xref ref-type="bibr" rid="B20">2001</xref>) and considering Lipschitz condition for function <italic>f</italic>, it can be stated that a unique solution exists for Equation (1).</p>
<p>In Atkinson et al. (<xref ref-type="bibr" rid="B3">2011</xref>) a linear approximation of the general ODE (Equation 1) is introduced as:</p>
<disp-formula id="E4"><label>(4)</label><mml:math id="M4"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mover><mml:mi>x</mml:mi><mml:mo>.</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>A</mml:mi><mml:mi>x</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with <italic>A</italic> &#x0003D; <italic>f</italic><sub><italic>x</italic></sub>(<italic>t</italic><sub>0</sub>, <italic>x</italic><sub>0</sub>) as <italic>m</italic> &#x000D7; <italic>m</italic> Jacobian matrix of <italic>f</italic> evaluated at (<italic>t</italic><sub>0</sub>, <italic>x</italic><sub>0</sub>).</p>
<p><bold>Definition</bold> 1. [According to Hairer and Wanner (<xref ref-type="bibr" rid="B12">1987</xref>)]: <italic>The system &#x01E8B;</italic>(<italic>t</italic>) &#x0003D; <italic>f</italic>(<italic>t, x</italic>(<italic>t</italic>)) <italic>is called separably stiff at a position</italic> (<italic>t</italic><sub>0</sub>, <italic>x</italic><sub>0</sub>) <italic>if the Jacobian</italic> <inline-formula><mml:math id="M5"><mml:mi>J</mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> <italic>possesses</italic> <italic>k</italic> &#x0003C; <italic>n eigenvalues</italic> &#x003BB;<sub>1</sub>, &#x003BB;<sub>2</sub>, &#x02026;, &#x003BB;<sub><italic>k</italic></sub> <italic>such that,</italic></p>
<disp-formula id="E5"><label>(5)</label><mml:math id="M6"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mo>&#x003BB;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x02264;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x02264;</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0003E;</mml:mo><mml:mo>&#x0003E;</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mo>&#x003BB;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x02264;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x02264;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p><italic>The eigenvalues</italic> &#x003BB;<sub>1</sub>, &#x003BB;<sub>2</sub>, &#x02026;, &#x003BB;<sub><italic>k</italic></sub> <italic>are called the stiff eigenvalues and,</italic></p>
<disp-formula id="E6"><label>(6)</label><mml:math id="M7"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mi>&#x003BC;</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mo>&#x003BB;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>&#x02264;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x02264;</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi><mml:mi>a</mml:mi><mml:mi>x</mml:mi><mml:mo>|</mml:mo><mml:msub><mml:mrow><mml:mo>&#x003BB;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn><mml:mo>&#x02264;</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x02264;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p><italic>the relative separation</italic>.</p>
<p>Stiff/switching system equations contain some terms that produce a fast variation in the solution. According to Hairer and Wanner (<xref ref-type="bibr" rid="B12">1987</xref>) relative separation can define the stiffness level. In other words, the eigenvalue responsible for the slowest rates of change should be compared to those leading to the fastest rates of change.</p>
<p>Considering non-linear systems the complexity increases because in this case stiffness becomes a global property and therefore cannot be reduced to a local problem by using a solution in the neighborhood of single points. The non-linear problem may start with non-stiff behavior and become stiff, or vice versa. It may contain stiff and non-stiff intervals. In Ashino et al. (<xref ref-type="bibr" rid="B2">2000</xref>) a comprehensive definition of stiff system is introduced for linear and non-liner systems as the following.</p>
<p><bold>Definition</bold> 2. <italic>If a numerical method is forced to use, in a certain interval of integration, a step length which is excessively small in relation to the smoothness of the exact solution in that interval, then the problem is said to be stiff in that interval</italic>.</p>
<p>To solve the numerical integration of stiff ordinary differential (Equation 1) a suitable small step size <italic>h</italic><sub><italic>n</italic></sub> is required in the case of fast variation in the solution and correspondingly the step size has to be relatively large (relaxed) when the solution is smooth. Consequently a perfect numerical solution is able to solve the stiff and non-stiff ODEs denoted as step size control (Watts, <xref ref-type="bibr" rid="B24">1984</xref>). Stiff numerical methods have the ability to change the step size during solving procedure. They take small steps to obtain satisfactory results nearby solutions that vary rapidly. The main advantage of stiff solvers is the low computational time compared to non-stiff solvers. Non-stiff solutions can be used for stiff problems with a proper small step size but it takes more time to achieve the final solution because the step size is constant and can not be adapted according to the actual results.</p></sec>
<sec id="s3">
<title>3. Zero Crossing and Event Handling Procedures</title>
<p>In this section the main ideas of zero crossing and event handling are repeated to be used later introducing the proposed algorithm. Here they are briefly repeated because exactly these ideas will be transferred to the finite difference scheme of calculation digital filters like Kalman Filter.</p>
<p>As discussed in section 1, variable step size solvers increases or decreases the step size to achieve error tolerances and required or given performance. Selection of fixed or variable step size depends on the dynamical model and implementation issues. The fixed step size solver uses one step size for the whole simulation time and consequently the step size has to be small enough to achieve the accuracy requirements.</p>
<p>Implicit variable step size solvers (stiff solvers) can be used to solve stiff problems. The non-stiff solvers are ineffective on intervals where the solution changes slowly because they use time steps small enough to resolve the fastest possible change for the whole estimation time. Furthermore, the step size of non-stiff solvers has to be defined at the initialization level and can not be changed during the solving procedure.</p>
<p>Event handling and zero crossing procedures are usually considered in ODE solvers. Detecting the moment in time of specific events in ODEs is referred to event handling procedure. For example the exact time a ball hits the ground or the time that the ODE solutions reaches a specific value is a very specific moment. The event is detected from time step <italic>t</italic><sub><italic>n</italic></sub> to <italic>t</italic><sub><italic>n</italic>&#x0002B;1</sub> if the conditional statement (event) becomes true. The zero crossing detection algorithm is a procedure to capture and locate events accurately. In the case of zero crossing for a predefined event, the ODE solver can be terminated or continued with different conditions according to demand. Event detection of ODE solvers contains two functions <italic>f</italic>(<italic>t, x</italic>) and <italic>g</italic>(<italic>t, x</italic>), and an initial condition (<italic>t</italic><sub>0</sub>, <italic>x</italic><sub>0</sub>). Using event handling procedure in the structure of ODE solver means to numerically define the moment in time <italic>t</italic><sup>&#x0002A;</sup> so that:</p>
<disp-formula id="E7"><label>(7)</label><mml:math id="M8"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mover><mml:mi>x</mml:mi><mml:mo>.</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Here <italic>g</italic>(<italic>t, x</italic>) denotes the event condition which has to be defined by the programmer according to the requirements.</p></sec>
<sec id="s4">
<title>4. Extended/Unscented Kalman Filter</title>
<p>Filtering is an important and fundamental problem in the discrete-time control field. For example in Wang et al. (<xref ref-type="bibr" rid="B22">2019</xref>) a fuzzy filter is designed for discrete-time fuzzy descriptor systems considering the limited unreliable communication links. One of the most important filter structures in the field of control is Kalman Filter. Principally, Kalman Filter can be used (i) for system state estimation when it can not be directly measured or (ii) for fusion of sensors information when measurements are available from various sensors but might be subject to noise. Although many applications can be considered for this filter, these are two of the most important tasks and applications of this filter.</p>
<p>The main goal of this filter is to achieve final estimation with zero bias and minimum variance compared to the real value and considering noisy measurements. Kalman filter is the optimal linear filter in sense of minimizing the variance estimate of states with the assumptions that the system model perfectly matches the real system, the entering noise is white (uncorrelated), and the covariances of the noise are exactly known (Anderson and Moore, <xref ref-type="bibr" rid="B1">2012</xref>). In other words, for systems fulfilling the requirements, KF is the best choice. Kalman Filter is firstly introduced in Kalman (<xref ref-type="bibr" rid="B14">1960</xref>) to formulate and solve the Wiener Filter problem which is proper for filtering, smoothing, and prediction of wide-sense stationary signals. It is worth noting that Kalman Filter in discrete or continuous form and its extensions (Bishop and Welch, <xref ref-type="bibr" rid="B8">2001</xref>) are introduced as a fundamental algorithm to solve a broad range of estimation problems.</p>
<p>Extended Kalman Filter (EKF) has been introduced for non-linear systems by linearizing the estimation around the current estimation and using partial derivatives of the system/measurement equation (Sorenson, <xref ref-type="bibr" rid="B19">1960</xref>; Costa, <xref ref-type="bibr" rid="B10">1994</xref>). In the presence of strong non-linearities, Extended Kalman filter leads to poor estimation results because of propagation of covariance from one measurement sample time to the next through the linearization (Bishop and Welch, <xref ref-type="bibr" rid="B8">2001</xref>). In other words using of Jacobians, representing all partial derivatives of the non-linear system (model), may lead to sub-optimal performance and sometimes divergence of the extended Kalman Filter. Therefore, Unscented Kalman Filter (UKF) is introduced in Costa (<xref ref-type="bibr" rid="B10">1994</xref>) to improve the estimation performance as well as to remove the requirement of Jacobians calculations. The UKF exactly addresses the problem of EKF by using a deterministic sampling approach. The UKF approximates the state distribution by a GRV (Gaussian Random Variable) as well as EKF, but it is represented by using a minimal set of carefully chosen sample points.</p>
<p>The Extended Kalman Filter assumes that the state at time step <italic>k</italic> is calculated from the previous state step <italic>x</italic><sub><italic>k</italic>&#x02212;1</sub> according to:</p>
<disp-formula id="E8"><label>(8)</label><mml:math id="M9"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>In a general system either the state transition function <italic>f</italic> or the measurement function <italic>h</italic> or both may be non-linear. Here the process and measurement noises (<italic>w</italic><sub><italic>k</italic></sub> and <italic>v</italic><sub><italic>k</italic></sub>) enter the system linearly but there may be systems for which the noise can not be assumed as additive. They are assumed to be zero mean Gaussian noises with covariance <italic>Q</italic> and <italic>R</italic> respectively. In the procedure of EKF the non-linear functions are linearized around the mean of current state estimation as:</p>
<disp-formula id="E9"><label>(9)</label><mml:math id="M10"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>F</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mi>x</mml:mi></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>At each time step the linearization is performed locally and the resulting Jacobian matrices <italic>J</italic><sub><italic>F</italic></sub> and <italic>J</italic><sub><italic>H</italic></sub> are then used in the prediction and correction steps of the KF algorithm. The system and measurement noise respectively <italic>w</italic><sub><italic>k</italic></sub> and <italic>v</italic><sub><italic>k</italic></sub> are assumed to be independent, white, and with normal probability distributions as:</p>
<disp-formula id="E10"><label>(10)</label><mml:math id="M11"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mi>p</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0007E;</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>Q</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>p</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0007E;</mml:mo><mml:mi>N</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>R</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>In practice, the noise covariance matrices might change during the time, however they are often assumed to be constant. There are two sets of equations for prediction and correction process. The time update projects the current state estimation ahead in time while the measurement update adjusts the projected estimation by an actual measurement at that time. The procedure of Extended Kalman Filter can be summarized as follows:</p>
<p><bold>Prediction (time update)</bold></p>
<p>(1) Project the state ahead</p>
<p><inline-formula><mml:math id="M12"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula></p>
<p>(2) Project the error covariance ahead</p>
<p><inline-formula><mml:math id="M13"><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>F</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>F</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:mi>Q</mml:mi></mml:math></inline-formula></p>
<p><bold>Correction (measurement update)</bold></p>
<p>(1) Compute the Kalman gain</p>
<p><inline-formula><mml:math id="M14"><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:mi>R</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></p>
<p>(2) Update the estimation with measurement</p>
<p><inline-formula><mml:math id="M15"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mi>h</mml:mi><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula></p>
<p>(3) Update the error covariance</p>
<p><inline-formula><mml:math id="M16"><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>I</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula></p>
<p>When the system is non-linear and can be well approximated by linearization then the EKF is a good option for state estimation. However it has the following drawbacks:</p>
<list list-type="order">
<list-item><p>It may be difficult to calculate the Jacobians if they need to be calculated numerically.</p></list-item>
<list-item><p>There are high computational costs when the Jacobians are calculated numerically.</p></list-item>
<list-item><p>The EKF only works on systems that have a differentiable model.</p></list-item>
<list-item><p>The EKF is not optimal if the system is highly non-linear (linearization does not provide a good approximation for highly non-linear systems).</p></list-item>
</list>
<p>Unscented Kalman Filter (UKF) can be used to overcome the last disadvantage of the EKF by approximating the probability distribution instead of approximating the non-linear function. A brief comparison of KF, EKF, and UKF is presented in <xref ref-type="table" rid="T1">Table 1</xref> considering the main principles of filtering. The computational cost of Kalman Filter depends also on the sample time of the measurements which is the main focus of this paper.</p>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p>Comparison of KF, EKF, and UKF considering the main principles of filtering.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Method</bold></th>
<th valign="top" align="left"><bold>Model</bold></th>
<th valign="top" align="left"><bold>Assumed distribution</bold></th>
<th valign="top" align="left"><bold>Computational cost</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">KF</td>
<td valign="top" align="left">Linear</td>
<td valign="top" align="left">Gaussian</td>
<td valign="top" align="left">Low</td>
</tr>
<tr>
<td valign="top" align="left">EKF</td>
<td valign="top" align="left">Locally linear</td>
<td valign="top" align="left">Gaussian</td>
<td valign="top" align="left">Low (if the Jacobians be computed analytically)</td>
</tr>
<tr>
<td/>
<td/>
<td/>
<td valign="top" align="left">Medium (if the Jacobians be computed numerically)</td>
</tr>
<tr>
<td valign="top" align="left">UKF</td>
<td valign="top" align="left">Non-linear</td>
<td valign="top" align="left">Gaussian</td>
<td valign="top" align="left">Medium</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s5">
<title>5. Variable Step Size Extended/Unscented Kalman Filter</title>
<p>In section 4 the procedure of standard Extended/Unscented Kalman Filter and correspondingly predictor-corrector scheme has been briefly explained. In the following section variable step size (Extended/Unscented) Kalman Filter is proposed and discussed in detail to enhance the performance of (Extended/Unscented) Kalman Filter for stiff/switching problems. The proposed approach consists of event handling and zero crossing concepts according to ODE solvers with variable step size integration. The main flowchart of variable step size Kalman Filter is graphically and mathematically defined in <xref ref-type="fig" rid="F1">Figure 1</xref> and Algorithm (1).</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p>Event handling procedure of variable step size Kalman Filter.</p></caption>
<graphic xlink:href="fmech-05-00074-g0001.tif"/>
</fig>
<table-wrap position="float" id="T3">
<caption><p><bold>Algorithm 1:</bold> Variable step size Extended Kalman Filter</p></caption>
<table frame="hsides" rules="groups">
<tr>
<td align="left" valign="top">1: &#x000A0;<bold>procedure</bold> (System measurement vector <italic>y</italic>)</td>
</tr>
<tr>
<td align="left" valign="top">2: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Initialization of estimated state vector <inline-formula><mml:math id="M17"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula> and error covariance <italic>P</italic></td>
</tr>
<tr>
<td align="left" valign="top">3: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>while</bold> Current time (<italic>t</italic>) &#x02264; Final time (<italic>TF</italic>) <bold>do</bold></td>
</tr>
<tr>
<td align="left" valign="top">4: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Compute the sample time <italic>ST</italic> = Initial <italic>ST</italic>/<italic>d</italic> (<italic>d</italic> : Restricting/Relaxing parameter)</td>
</tr>
<tr>
<td align="left" valign="top">5: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Compute the sample numbers <italic>N</italic> &#x0003D; <italic>TF</italic>/<italic>ST</italic></td>
</tr>
<tr>
<td align="left" valign="top">6: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Compute the time vector <italic>T</italic> &#x0003D; 0:<italic>ST</italic>:<italic>TF</italic></td>
</tr>
<tr>
<td align="left" valign="top">7: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Interpolation to find the artificial measurement vector <italic>Y</italic> considering the time vector <italic>t</italic></td>
</tr>
<tr>
<td align="left" valign="top">8: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Solve the EKF from beginning to the current time (<italic>t</italic>) by considering (<italic>T, Y</italic>)</td>
</tr>
<tr>
<td align="left" valign="top">9: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; to find the current initial value (<italic>t</italic><sub>0</sub>, <italic>y</italic><sub>0</sub>)</td>
</tr>
<tr>
<td align="left" valign="top">10: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>for</bold> <italic>time</italic>: &#x0003D; <italic>t</italic> <bold>to</bold> <italic>TF</italic> <bold>step</bold> <italic>ST</italic> <bold>do</bold></td>
</tr>
<tr>
<td align="left" valign="top">11: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>Prediction step (Time update)</bold></td>
</tr>
<tr>
<td align="left" valign="top">12: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Project the state ahead <inline-formula><mml:math id="M18"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>u</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">13: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Update the Jacobians <italic>J</italic><sub><italic>F</italic></sub> and <italic>J</italic><sub><italic>H</italic></sub></td>
</tr>
<tr>
<td align="left" valign="top">14: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Project the error covariance ahead <inline-formula><mml:math id="M19"><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>F</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>F</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:mi>Q</mml:mi></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">15: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>Correction step (Measurement update)</bold></td>
</tr>
<tr>
<td align="left" valign="top">16: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Compute the Extended Kalman gain <inline-formula><mml:math id="M20"><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:mi>R</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">17: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Update the estimation via measurement <inline-formula><mml:math id="M21"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mi>h</mml:mi><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">18: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Update the error covariance <inline-formula><mml:math id="M22"><mml:msub><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>I</mml:mi><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>H</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">19: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Calculate the EKF innovation <inline-formula><mml:math id="M23"><mml:mi>i</mml:mi><mml:mi>n</mml:mi><mml:mi>n</mml:mi><mml:mi>o</mml:mi><mml:msub><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mi>h</mml:mi><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>-</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">20: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>if</bold> &#x003B2; &#x02264; |<italic>innov</italic><sub><italic>k</italic></sub>| &#x02264; &#x003B1; <bold>then</bold></td>
</tr>
<tr>
<td align="left" valign="top">21: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Stock the estimation results for the current sample <italic>k</italic> in the draft data</td>
</tr>
<tr>
<td align="left" valign="top">22: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Go to the next step <italic>k</italic> &#x0002B; 1</td>
</tr>
<tr>
<td align="left" valign="top">23: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>else if</bold> |<italic>innov</italic><sub><italic>k</italic></sub>| &#x0003E; &#x003B1; <bold>then</bold></td>
</tr>
<tr>
<td align="left" valign="top">24: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>if</bold> <italic>ST</italic> &#x0003E; <italic>Min</italic>.<italic>ST</italic> <bold>then</bold></td>
</tr>
<tr>
<td align="left" valign="top">25: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Increase the value of <italic>d</italic> parameter (Restricting <italic>ST</italic>)</td>
</tr>
<tr>
<td align="left" valign="top">26: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Save the draft data in the final data</td>
</tr>
<tr>
<td align="left" valign="top">27: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>Break</bold>, go to line 39</td>
</tr>
<tr>
<td align="left" valign="top">28: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>else</bold></td>
</tr>
<tr>
<td align="left" valign="top">29: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Stock the estimation results for the current sample <italic>k</italic> in the draft data</td>
</tr>
<tr>
<td align="left" valign="top">30: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Go to the next step <italic>k</italic> &#x0002B; 1</td>
</tr>
<tr>
<td align="left" valign="top">31: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>end if</bold></td>
</tr>
<tr>
<td align="left" valign="top">32: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>else if</bold> |<italic>innov</italic><sub><italic>k</italic></sub>| &#x0003C; &#x003B2; <bold>then</bold></td>
</tr>
<tr>
<td align="left" valign="top">33: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>if</bold> <italic>ST</italic> &#x0003C; <italic>Max</italic>.<italic>ST</italic> <bold>then</bold></td>
</tr>
<tr>
<td align="left" valign="top">34: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Decrease the value of <italic>d</italic> parameter (Relaxing <italic>ST</italic>)</td>
</tr>
<tr>
<td align="left" valign="top">35: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Save the draft data in the final data</td>
</tr>
<tr>
<td align="left" valign="top">36: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>Break</bold>, go to line 39</td>
</tr>
<tr>
<td align="left" valign="top">37: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>else</bold></td>
</tr>
<tr>
<td align="left" valign="top">38: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Stock the estimation results for the current sample <italic>k</italic> in the draft data</td>
</tr>
<tr>
<td align="left" valign="top">39: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; Go to the next step <italic>k</italic> &#x0002B; 1</td>
</tr>
<tr>
<td align="left" valign="top">40: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>end if</bold></td>
</tr>
<tr>
<td align="left" valign="top">41: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>end if</bold></td>
</tr>
<tr>
<td align="left" valign="top">42: &#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0; <bold>end for</bold></td>
</tr>
<tr>
<td align="left" valign="top">43: &#x000A0;&#x000A0; <bold>end while</bold></td>
</tr>
<tr>
<td align="left" valign="top">44: &#x000A0;&#x000A0; <bold>return</bold> <inline-formula><mml:math id="M24"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula></td>
</tr>
<tr>
<td align="left" valign="top">45: &#x000A0;<bold>end procedure</bold></td>
</tr>
</table>
</table-wrap>
<p>The algorithm starts by initialization of Kalman Filter prerequisites e.g., initial states, covariance matrices, and initial sample time (ST). At the first step (initialization level) or in the case that an event is occurred and detected during the solving procedure (ST is decreased or increased) the state space model of the system is discretized based on the new ST. Since the measurement vector is constant, interpolation is required to define the measurement vector according to new sample time. The Kalman Filter procedure is solved from the zero moment up to the current time to find a suitable initial value for the upcoming time. At each step of predictor-corrector scheme the Kalman Filter innovation is used for event handling procedure (shown in detail in <xref ref-type="fig" rid="F1">Figure 1</xref>). The proposed event handling algorithm consists of two main parts: restricting ST and relaxing ST. Four parameters are considered as design parameters (Min. ST, Max. ST, &#x003B1;, and &#x003B2;). The &#x003B1; and &#x003B2; parameters denote the upper and lower thresholds of accuracy and are defining the compromise between computational time and estimation accuracy. The Min. ST and Max. ST are defined to show the maximum and minimum possible sample time that should be defined according to the desired performance.</p>
<p>When ST changes the predictor-corrector scheme is stopped. According to <xref ref-type="fig" rid="F1">Figure 1</xref> the variable step size Kalman Filter procedure is continued by applying a new discretization of system model and new initialization using interpolated measurement vector. The procedure is continued until the final time of simulation and at each sample <italic>k</italic> the results are stocked to be released at the end of simulation time.</p></sec>
<sec id="s6">
<title>6. Non-linear Example: Van der Pol Oscillator</title>
<p>To verify the proposed approach, namely variable step size EKF/UKF, the Van der Pol oscillator example is considered. The Van der Pol oscillator is a highly non-linear system/oscillator with non-linear damping. It can be considered as non-stiff or stiff example considering the strength of damping. This system is used in literature as a switching example to show the advantages of event handling and variable step size ODE solvers (Khan et al., <xref ref-type="bibr" rid="B15">2011</xref>). Therefore, it is used here to illustrate the advantages of proposed variable step size EKF/UKF including event handling procedure. The dynamics of Van der Pol oscillator evolves in time according to the following second-order differential equation:</p>
<disp-formula id="E11"><label>(11)</label><mml:math id="M25"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mfrac><mml:mrow><mml:msup><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:msup><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mi>&#x003BC;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mfrac><mml:mrow><mml:mi>d</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mi>x</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>x</italic> denotes the position coordinate as a function of time and &#x003BC; is a scalar parameter representing the non-linearity and strength of damping. The equations become increasingly stiff as &#x003BC; increases and for &#x003BC; &#x0003D; 0 the system becomes linear. The system (Equation 11) can be rewritten in state space form as:</p>
<disp-formula id="E12"><label>(12)</label><mml:math id="M26"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x022C5;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mover accent="true"><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>&#x022C5;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>&#x003BC;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>-</mml:mo><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with state vector <inline-formula><mml:math id="M27"><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> describing the first and second states of the Van der Pol system. Accordingly a first-order Euler discretization of the equations of motion of Van der Pol oscillator is calculated as:</p>
<disp-formula id="E13"><label>(13)</label><mml:math id="M28"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with,</p>
<disp-formula id="E14"><label>(14)</label><mml:math id="M29"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd columnalign="left"><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>h</mml:mi><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="left"><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>h</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>&#x003BC;</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn><mml:mo>-</mml:mo><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>h</italic> denotes the assumed sample time for discretization procedure.</p>
<p>The Van der Pol oscillator is driven by the system and measurement noise according to Equation (8) with zero mean white Gaussian noise for system and measurement with covariances <italic>Q</italic> in <italic>R</italic><sup>2&#x000D7;2</sup> and <italic>R</italic> &#x0003E; 0. In this paper it is assumed that for <italic>k</italic> &#x02265; 0 both states are available as measurements. The objective is to obtain the estimation <inline-formula><mml:math id="M30"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> using the measurements considering different approaches namely EKF, UKF, VSEKF, and VSUKF and to compare the estimation performance.</p></sec>
<sec id="s7">
<title>7. Numerical Results and Discussion</title>
<p>To investigate the performance of proposed improved EKF/UKF using the variable step size algorithm, introduced in this paper, simulation results were carried out using the Van der Pol oscillator system. The system parameters used in this simulation study, the KF covariances, and the noise parameters are considered identical for all simulations. Simulation results are illustrated as estimation of <italic>x</italic><sub>1</sub> in <xref ref-type="fig" rid="F2">Figure 2</xref>, estimation of <italic>x</italic><sub>2</sub> in <xref ref-type="fig" rid="F3">Figure 3</xref>, and respectively the phase portrait in <xref ref-type="fig" rid="F4">Figure 4</xref> for EKF and VSEKF. The performance is measured based on estimated states and related comparison with real ones. From the results it can be concluded that using the variable step size algorithm in combination with EKF produces better performance in estimation task especially nearby rapid behavior of the system (stiff behavior). In other words, the proposed solution improves the estimation results by decreasing the step size in the procedure of predictor-corrector scheme and in the case of fast dynamical behavior (time &#x02208; [0.2, 0.4]). On the other side by relaxing the step size when no rapid change exists, the proposed approach decreases the high computational time of predictor-corrector scheme (time &#x02208; [0.6, 1.6]).</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Estimation of Van der Pol oscillator first state <italic>x</italic><sub>1</sub> using fixed and variable step size Extended Kalman Filter.</p></caption>
<graphic xlink:href="fmech-05-00074-g0002.tif"/>
</fig>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Estimation of Van der Pol oscillator second state <italic>x</italic><sub>2</sub> using fixed and variable step size Extended Kalman Filter.</p></caption>
<graphic xlink:href="fmech-05-00074-g0003.tif"/>
</fig>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Phase portrait illustration of Van der Pol oscillator using fixed and variable step size Extended Kalman Filter.</p></caption>
<graphic xlink:href="fmech-05-00074-g0004.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="F5">Figure 5</xref> the estimation performance (estimation error of the first system state namely <inline-formula><mml:math id="M31"><mml:mi>e</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>) is illustrated for EKF, UKF, VSEKF, and VSUKF. In the right figure the results are achieved considering that the sample time is known for EKF and UKF while the left figure is the results related to unknown sample time. From the results it can be stated that even if the sample time is known for the procedure of EKF and UKF, the proposed VSEKF and VSUKF reach better estimation performance namely almost zero median error and improved minimum and maximum error values. The estimation results are summarized in <xref ref-type="table" rid="T2">Table 2</xref>. It is evident from the numerical results that using the proposed variable step size algorithm leads to less RMSE and MAE for VSEKF and VSUKF.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Estimation error of Van der Pol oscillator state <italic>x</italic><sub>1</sub> using fixed and variable step size Extended/Unscented Kalman Filter.</p></caption>
<graphic xlink:href="fmech-05-00074-g0005.tif"/>
</fig>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p>Performance comparison.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Performance measurement</bold></th>
<th valign="top" align="center"><bold>EKF</bold></th>
<th valign="top" align="center"><bold>VSEKF</bold></th>
<th valign="top" align="center"><bold>UKF</bold></th>
<th valign="top" align="center"><bold>VSUKF</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">RMSE</td>
<td valign="top" align="center">0.1532</td>
<td valign="top" align="center">0.0140</td>
<td valign="top" align="center">0.1531</td>
<td valign="top" align="center">0.0132</td>
</tr>
<tr>
<td valign="top" align="left">Mean absolute error</td>
<td valign="top" align="center">0.0856</td>
<td valign="top" align="center">0.0070</td>
<td valign="top" align="center">0.0859</td>
<td valign="top" align="center">0.0067</td>
</tr>
<tr>
<td valign="top" align="left">Maximum error</td>
<td valign="top" align="center">0.8026</td>
<td valign="top" align="center">0.0795</td>
<td valign="top" align="center">0.8027</td>
<td valign="top" align="center">0.0794</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>In the next simulation part the measurement and system noise variance is changed and the RMSE is calculated for all filters. The results are illustrated in <xref ref-type="fig" rid="F6">Figure 6</xref> with logarithmic axis for noise variance. From the results it can be concluded that the proposed approach produces more robust estimation results especially in the presence of measurement noise. The RMSE increases for EKF and UKF by increasing the noise variance while it has more or less no influence on the estimation results of VSEKF and VSUKF. As conclusion it can be stated that the proposed approach outperforms up-to-date solutions with respect to the different dimensions worth to consider while working with non-linear and or stiff systems.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Root mean square error (RMSE) of EKF/UKF and VSEKF/VSUKF considering different level of system and measurement noise.</p></caption>
<graphic xlink:href="fmech-05-00074-g0006.tif"/>
</fig></sec>
<sec id="s8">
<title>8. Convergence Rate and Parameter Selection of VSEKF/VSUKF</title>
<p>As mentioned in section 5 the design parameters &#x003B1; and &#x003B2; are defined as upper and lower thresholds to control the innovation of estimation error and the computational effort correspondingly. In <xref ref-type="fig" rid="F7">Figure 7</xref> RMSE of the proposed approach is shown for variation of design thresholds &#x003B1; and &#x003B2;. In <xref ref-type="fig" rid="F7">Figure 7A</xref> the total estimation time is considered while in <xref ref-type="fig" rid="F7">Figure 7B</xref> the estimation error in the first 3 s is shown to evaluate the convergence rate of the proposed approach. From the results it can be concluded that the upper threshold &#x003B1; has the main influence on the estimation performance and by increasing the value of &#x003B1; the performance decreases. Furthermore, it can be concluded that increment of &#x003B2; threshold has less influence on the estimation error and convergence rate. The worse performance is related to the case that both thresholds are increased (as expected).</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p>Root mean square error (RMSE) of VSEKF considering different parameters &#x003B1; and &#x003B2;, <bold>(A)</bold> RMSE of total error of the estimation, <bold>(B)</bold> RMSE of convergence error in the first 3 s.</p></caption>
<graphic xlink:href="fmech-05-00074-g0007.tif"/>
</fig>
<p>Next analysis is related to the influence of restricting/relaxing parameter <italic>d</italic> (which is considered to change the step size) on the estimation performance. According to <xref ref-type="fig" rid="F8">Figure 8</xref> the RMSE generally decreases by increasing the <italic>d</italic> parameter and it increases when <italic>d</italic> &#x0003E; 1.</p>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p>Root mean square error (RMSE) of VSEKF considering variation of parameters <italic>d</italic> (Restricting/Relaxing parameter).</p></caption>
<graphic xlink:href="fmech-05-00074-g0008.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="F9">Figure 9</xref> the influence of system and measurement noise covariances on the estimation performance is illustrated. According to the result the performance decreases for system noise covariance 0 &#x0003C; <italic>Q</italic> &#x0003C; 100 and measurement noise covariance 250 &#x0003C; <italic>R</italic> &#x0003C; 800 (this area is illustrated with red arrows in <xref ref-type="fig" rid="F9">Figure 9</xref>).</p>
<fig id="F9" position="float">
<label>Figure 9</label>
<caption><p>Root mean square error (RMSE) of VSEKF considering variation of system and measurement noise covariances.</p></caption>
<graphic xlink:href="fmech-05-00074-g0009.tif"/>
</fig></sec>
<sec id="s9">
<title>9. Summary, Conclusions, and Outlook</title>
<p>Variable step size (Extended/Unscented) Kalman Filter algorithm (VSEKF/VSUKF) proposed in this paper is based on event handling and zero crossing concepts involved in the structure of ordinary differential equation solvers. At each step of predictor-corrector scheme the Extended/Unscented Kalman Filter innovation is used to detect the events considering the predefined low and upper boundaries (&#x003B1; and &#x003B2;). In the case that an event is occurred and detected, the sample time is increased (relaxing procedure) or decreased (restricting procedure), the predictor-corrector scheme is stopped, and the procedure is continued by new discretization of system model and new initialization using interpolated measurement vector. In the case that no event is detected, the predictor-corrector scheme can be continued with the current considered ST. The design parameters &#x003B1; and &#x003B2; are considered to control and influence the performance and computational time.</p>
<p>The Van der Pol example is used as a common example for stiff systems to illustrate advantages of the proposed approach compared to standard discrete Exteneded/Unscented Kalman Filter. Simulation results clearly demonstrate the effectiveness of proposed estimation approach especially close to the rapid changes in the system dynamics (stiff behavior). In other words, the proposed solution improves the estimation performance by decreasing the step size in the procedure of predictor-corrector scheme according to current estimation accuracy and in the case of fast dynamical behavior. From the simulation results it can also be concluded that the proposed variable step EKF/UKF is more robust in the presence of high level of system/measurement noise compared to the standard EKF/UKF.</p>
<p>What is not covered and can be possibly detected as limitation of this work is the computational effort. Investigation of the computational effort related to the proposed step size control and its consequences are not considered in this contribution. The computational time needs for the proposed approach is more than standard EKF/UKF by reducing the step size. On the other side, in the relaxing procedure, computational time decreases. Therefore, investigation of parameter and thresholds definition regarding real-time implementation seems to be useful and can be considered as future work.</p></sec>
<sec sec-type="data-availability-statement" id="s10">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation, to any qualified researcher.</p></sec>
<sec id="s11">
<title>Author Contributions</title>
<p>FB and DS conceived of the presented idea developed the theory, performed the computations, and verified the analytical methods. All authors discussed the results and contributed to the final manuscript.</p>
<sec>
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p></sec></sec>
</body>
<back>
<ack><p>We acknowledge support by the Open Access Publication Fund of the University of Duisburg-Essen.</p>
</ack>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Anderson</surname> <given-names>B.</given-names></name> <name><surname>Moore</surname> <given-names>J.</given-names></name></person-group> (<year>2012</year>). <article-title>Optimal Filtering</article-title>, in <source>Dover Books on Electrical Engineering</source>, ed <person-group person-group-type="editor"><name><surname>Kailath</surname> <given-names>T.</given-names></name></person-group> (<publisher-name>Dover Publications; University of Newcastle</publisher-name>).</citation></ref>
<ref id="B2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ashino</surname> <given-names>R.</given-names></name> <name><surname>Nagase</surname> <given-names>M.</given-names></name> <name><surname>Vaillancourt</surname> <given-names>R.</given-names></name></person-group> (<year>2000</year>). <article-title>Behind and beyond the matlab ode suite</article-title>. <source>Comput. Math. Appl.</source> <volume>40</volume>, <fpage>491</fpage>&#x02013;<lpage>512</lpage>. <pub-id pub-id-type="doi">10.1016/S0898-1221(00)00175-9</pub-id></citation></ref>
<ref id="B3">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Atkinson</surname> <given-names>K.</given-names></name> <name><surname>Han</surname> <given-names>W.</given-names></name> <name><surname>Stewart</surname> <given-names>D.</given-names></name></person-group> (<year>2011</year>). <source>Numerical Solution of Ordinary Differential Equations</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>John Wiley &#x00026; Sons</publisher-name>.</citation></ref>
<ref id="B4">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bakhshande</surname> <given-names>F.</given-names></name> <name><surname>S&#x000F6;ffker</surname> <given-names>D.</given-names></name></person-group> (<year>2015</year>). <article-title>Reconstruction of nonlinear characteristics by means of advanced observer design approaches</article-title>, in <source>ASME 2015 Dynamic Systems and Control Conference</source>, <volume>2</volume>:<fpage>V002T23A007</fpage>. <pub-id pub-id-type="doi">10.1115/DSCC2015-9897</pub-id></citation></ref>
<ref id="B5">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bakhshande</surname> <given-names>F.</given-names></name> <name><surname>S&#x000F6;ffker</surname> <given-names>D.</given-names></name></person-group> (<year>2018</year>). <article-title>Variable step size Kalman Filter using event handling algorithm for switching systems</article-title>, in <source>ASME 2018 International Design Engineering Technical Conferences and Computers and Information in Engineering Conference</source> (<publisher-loc>Quebec, QC</publisher-loc>) <volume>6</volume>:<fpage>V006T09A013</fpage>.</citation></ref>
<ref id="B6">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bell</surname> <given-names>B. M.</given-names></name> <name><surname>Cathey</surname> <given-names>F. W.</given-names></name></person-group> (<year>1993</year>). <article-title>The iterated Kalman filter update as a Gauss-Newton method</article-title>. <source>IEEE Trans. Autom. Control</source> <volume>38</volume>, <fpage>294</fpage>&#x02013;<lpage>297</lpage>.</citation></ref>
<ref id="B7">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bernal</surname> <given-names>D.</given-names></name></person-group> (<year>1991</year>). <article-title>Locating events in step-by-step integration of the equations of motion</article-title>. <source>J. Struct. Eng.</source> <volume>117</volume>, <fpage>530</fpage>&#x02013;<lpage>545</lpage>.</citation></ref>
<ref id="B8">
<citation citation-type="web"><person-group person-group-type="author"><name><surname>Bishop</surname> <given-names>G.</given-names></name> <name><surname>Welch</surname> <given-names>G.</given-names></name></person-group> (<year>2001</year>). <source>An Introduction to the Kalman Filter. Department of Computer Science, University of North Carolina at Chapel Hill</source>. Available online at: <ext-link ext-link-type="uri" xlink:href="http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html">http://www.cs.unc.edu/&#x0007E;welch/kalman/kalmanIntro.html</ext-link></citation></ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chatzis</surname> <given-names>M. N.</given-names></name> <name><surname>Chatzi</surname> <given-names>E. N.</given-names></name></person-group> (<year>2017</year>). <article-title>A discontinuous unscented kalman filter for nonsmooth dynamic problems</article-title>. <source>Front. Built Environ.</source> <volume>3</volume>:<fpage>56</fpage>. <pub-id pub-id-type="doi">10.3389/fbuil.2017.00056</pub-id></citation></ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Costa</surname> <given-names>P. J.</given-names></name></person-group> (<year>1994</year>). <article-title>Adaptive model architecture and extended Kalman-Bucy filters</article-title>. <source>IEEE Trans. Aerospace Electr. Syst.</source> <volume>30</volume>, <fpage>525</fpage>&#x02013;<lpage>533</lpage>. <pub-id pub-id-type="doi">10.1109/7.272275</pub-id></citation></ref>
<ref id="B11">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Esposito</surname> <given-names>J. M.</given-names></name> <name><surname>Kumar</surname> <given-names>V.</given-names></name></person-group> (<year>2007</year>). <article-title>A state event detection algorithm for numerically simulating hybrid systems with model singularities</article-title>. <source>ACM Trans. Model. Comput. Simulat.</source> <volume>17</volume>:<fpage>1</fpage>. <pub-id pub-id-type="doi">10.1145/1189756.1189757</pub-id></citation></ref>
<ref id="B12">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hairer</surname> <given-names>E.</given-names></name> <name><surname>Wanner</surname> <given-names>G.</given-names></name></person-group> (<year>1987</year>). <source>Solving Ordinary Differential Equations II</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>Springer</publisher-name>.</citation></ref>
<ref id="B13">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Havl&#x000ED;k</surname> <given-names>J.</given-names></name> <name><surname>Straka</surname> <given-names>O.</given-names></name></person-group> (<year>2015</year>). <article-title>Performance evaluation of iterated extended Kalman filter with variable step-length</article-title>. <source>J. Phys. Conference Series</source> <volume>659</volume>:<fpage>12022</fpage>. <pub-id pub-id-type="doi">10.1088/1742-6596/659/1/012022</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kalman</surname> <given-names>R. E.</given-names></name></person-group> (<year>1960</year>). <article-title>A new approach to linear filtering and prediction problems</article-title>. <source>J. Fluids Eng.</source> <volume>82</volume>, <fpage>35</fpage>&#x02013;<lpage>45</lpage>.</citation></ref>
<ref id="B15">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Khan</surname> <given-names>J. A.</given-names></name> <name><surname>Qureshi</surname> <given-names>I. M.</given-names></name> <name><surname>Raja</surname> <given-names>M. A. Z.</given-names></name></person-group> (<year>2011</year>). <article-title>Hybrid evolutionary computational approach: application to Van der Pol oscillator</article-title>. <source>Int. J. Phys. Sci.</source> <volume>6</volume>, <fpage>7247</fpage>&#x02013;<lpage>7261</lpage>. <pub-id pub-id-type="doi">10.5897/IJPS11.922</pub-id></citation></ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Niu</surname> <given-names>Y.</given-names></name> <name><surname>Cong</surname> <given-names>Y.</given-names></name> <name><surname>Wu</surname> <given-names>L.</given-names></name></person-group> (<year>2018</year>). <article-title>Event triggered continuous discrete kalman filter with controllable estimation error</article-title>. <source>IEEE Access</source> <volume>6</volume>, <fpage>42482</fpage>&#x02013;<lpage>42496</lpage>. <pub-id pub-id-type="doi">10.1109/ACCESS.2018.2860626</pub-id></citation></ref>
<ref id="B17">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Skoglund</surname> <given-names>M. A.</given-names></name> <name><surname>Hendeby</surname> <given-names>G.</given-names></name> <name><surname>Axehill</surname> <given-names>D.</given-names></name></person-group> (<year>2015</year>). <article-title>Extended Kalman filter modifications based on an optimization view point</article-title>, in <source>2015 18th International Conference on Information Fusion</source> (<publisher-loc>Washington, DC</publisher-loc>), <fpage>1856</fpage>&#x02013;<lpage>1861</lpage>.</citation></ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>S&#x000F6;ffker</surname> <given-names>D.</given-names></name> <name><surname>Yu</surname> <given-names>T. J.</given-names></name> <name><surname>M&#x000FC;ller</surname> <given-names>P. C.</given-names></name></person-group> (<year>1995</year>). <article-title>State estimation of dynamical systems with nonlinearities by using Proportional-Integral-Observer</article-title>. <source>Int. J. Syst. Sci.</source> <volume>26</volume>, <fpage>1571</fpage>&#x02013;<lpage>1582</lpage>.</citation></ref>
<ref id="B19">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Sorenson</surname> <given-names>H. W.</given-names></name></person-group> (<year>1960</year>). <source>Kalman Filtering: Theory and Application</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>IEEE Press</publisher-name>.</citation></ref>
<ref id="B20">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>S&#x000FC;li</surname> <given-names>E.</given-names></name></person-group> (<year>2001</year>). <source>Numerical Solution of Ordinary Differential Equations</source>. <publisher-name>Mathematical Institute, University of Oxford</publisher-name>, Lecture note.</citation></ref>
<ref id="B21">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>M.</given-names></name> <name><surname>Li</surname> <given-names>P. Y.</given-names></name></person-group> (<year>2008</year>). <article-title>Event based kalman filter observer for rotary high speed on/off valve</article-title>, in <source>2008 American Control Conference</source> (<publisher-loc>Seattle, WA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1546</fpage>&#x02013;<lpage>1551</lpage>. <pub-id pub-id-type="doi">10.1109/ACC.2008.4586711</pub-id></citation></ref>
<ref id="B22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Karimi</surname> <given-names>H. R.</given-names></name> <name><surname>Lam</surname> <given-names>H.-K.</given-names></name> <name><surname>Yan</surname> <given-names>H.</given-names></name></person-group> (<year>2019</year>). <article-title>Fuzzy output tracking control and filtering for nonlinear discrete-time descriptor systems under unreliable communication links</article-title>. <source>IEEE Trans. Cybernet</source>. <fpage>1</fpage>&#x02013;<lpage>11</lpage>. <pub-id pub-id-type="doi">10.1109/TCYB.2019.2920709</pub-id><pub-id pub-id-type="pmid">31217141</pub-id></citation></ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Xia</surname> <given-names>Y.</given-names></name> <name><surname>Shen</surname> <given-names>H.</given-names></name> <name><surname>Zhou</surname> <given-names>P.</given-names></name></person-group> (<year>2017</year>). <article-title>Smc design for robust stabilization of nonlinear markovian jump singular systems</article-title>. <source>IEEE Trans. Automat. Control</source> <volume>63</volume>, <fpage>219</fpage>&#x02013;<lpage>224</lpage>. <pub-id pub-id-type="doi">10.1109/TAC.2017.2720970</pub-id></citation></ref>
<ref id="B24">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Watts</surname> <given-names>H.</given-names></name></person-group> (<year>1984</year>). <source>Step Size Control in Ode Solvers</source>. Technical report, <publisher-name>Sandia National Labs</publisher-name>., <publisher-loc>Albuquerque, NM, United States</publisher-loc>.</citation></ref>
<ref id="B25">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wright</surname> <given-names>J. P.</given-names></name> <name><surname>Pei</surname> <given-names>J.-S.</given-names></name></person-group> (<year>2012</year>). <article-title>Solving dynamical systems involving piecewise restoring force using state event location</article-title>. <source>J. Eng. Mech.</source> <volume>138</volume>, <fpage>997</fpage>&#x02013;<lpage>1020</lpage>. <pub-id pub-id-type="doi">10.1061/(ASCE)EM.1943-7889.0000404</pub-id></citation></ref>
<ref id="B26">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Zhang</surname> <given-names>F.</given-names></name> <name><surname>Yeddanapudi</surname> <given-names>M.</given-names></name> <name><surname>Mosterman</surname> <given-names>P. J.</given-names></name></person-group> (<year>2008</year>). <article-title>Zero-crossing location and detection algorithms for hybrid system simulation</article-title>. <source>IFAC Proc. Vol.</source> <volume>41</volume>, <fpage>7967</fpage>&#x02013;<lpage>7972</lpage>. <pub-id pub-id-type="doi">10.3182/20080706-5-KR-1001.01346</pub-id></citation></ref>
</ref-list>
</back>
</article>