<?xml version="1.0" encoding="UTF-8"?>
<!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" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s101009163</article-id>
<article-id pub-id-type="publisher-id">sensors-10-09163</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>A Zero Velocity Detection Algorithm Using Inertial Sensors for Pedestrian Navigation Systems</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Park</surname><given-names>Sang Kyeong</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Suh</surname><given-names>Young Soo</given-names></name><xref ref-type="corresp" rid="c1-sensors-10-09163">*</xref></contrib>
<aff id="af1-sensors-10-09163">Department of Electrical Engineering, University of Ulsan, Namgu, Ulsan 680-749, Korea; E-Mail: <email>damiro76@hotmail.com</email></aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-10-09163">
<label>*</label> Author to whom correspondence should be addressed; E-Mail: <email>yssuh@ulsan.ac.kr</email>; Tel.: +82-52-259-1524; Fax: +82-52-259-1686.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2010</year></pub-date>
<pub-date pub-type="epub">
<day>13</day>
<month>10</month>
<year>2010</year></pub-date>
<volume>10</volume>
<issue>10</issue>
<fpage>9163</fpage>
<lpage>9178</lpage>
<history>
<date date-type="received">
<day>20</day>
<month>8</month>
<year>2010</year></date>
<date date-type="rev-recd">
<day>20</day>
<month>9</month>
<year>2010</year></date>
<date date-type="accepted">
<day>28</day>
<month>9</month>
<year>2010</year></date></history>
<permissions>
<copyright-statement>© 2010 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2010</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>In pedestrian navigation systems, the position of a pedestrian is computed using an inertial navigation algorithm. In the algorithm, the zero velocity updating plays an important role, where zero velocity intervals are detected and the velocity error is reset. To use the zero velocity updating, it is necessary to detect zero velocity intervals reliably. A new zero detection algorithm is proposed in the paper, where only one gyroscope value is used. A Markov model is constructed using segmentation of gyroscope outputs instead of using gyroscope outputs directly, which makes the zero velocity detection more reliable.</p></abstract>
<kwd-group>
<kwd>hidden Markov model</kwd>
<kwd>pedestrian navigation system</kwd>
<kwd>zero velocity update method</kwd>
<kwd>Kalman filter</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>A pedestrian or personal navigation system provides position information about a person indoors or outdoors. For example, if a firefighter carrying a personal navigation system is injured in the line of duty, we can know her/his position from the information transmitted by a pedestrian navigation system. Pedestrian navigation systems using inertial sensors are proposed in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>–<xref ref-type="bibr" rid="b6-sensors-10-09163">6</xref>]. The main advantage of inertial sensor-based systems is that they are environment-independent; pedestrian navigation systems using vision or wireless communication require that landmarks or wireless nodes be installed in the environments [<xref ref-type="bibr" rid="b7-sensors-10-09163">7</xref>,<xref ref-type="bibr" rid="b8-sensors-10-09163">8</xref>].</p>
<p>There are many different pedestrian navigation systems using inertial sensors. They use similar inertial navigation algorithms to compute the position [<xref ref-type="bibr" rid="b9-sensors-10-09163">9</xref>,<xref ref-type="bibr" rid="b10-sensors-10-09163">10</xref>]. Also they all use zero velocity updating algorithms. When an inertial navigation algorithm is used, the position and velocity errors diverge by a few seconds without error resetting. During normal walking cycles, a foot touches the ground almost periodically and stays on the ground for a short time (usually about 0.1∼0.3 s), which is called the zero velocity interval. In the zero velocity updating algorithm, this zero velocity interval is detected and thus the velocity error is reset to zero. Accordingly the position and velocity errors diverge very slowly, and consequently being able to reliably detect this zero velocity interval is an important issue.</p>
<p>Slightly different zero detection algorithms are used in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>–<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>,<xref ref-type="bibr" rid="b5-sensors-10-09163">5</xref>,<xref ref-type="bibr" rid="b6-sensors-10-09163">6</xref>]. In [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>], the zero velocity interval is determined based on gyroscope and accelerometer output norms. If the outputs are less than some threshold for a predetermined time, the zero velocity interval is decided. In [<xref ref-type="bibr" rid="b2-sensors-10-09163">2</xref>,<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>], similar algorithms are used, where the main difference is which sensor values are used. In [<xref ref-type="bibr" rid="b2-sensors-10-09163">2</xref>], the zero velocity interval is determined based on <italic>z</italic>-axis accelerometer and <italic>y</italic>-axis gyroscope outputs (see <xref ref-type="fig" rid="f1-sensors-10-09163">Figure 1</xref> for the coordinate frame). In [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>], the zero velocity interval is determined based on norms of gyroscope outputs. In [<xref ref-type="bibr" rid="b5-sensors-10-09163">5</xref>], the zero velocity interval is detected based on the variance of accelerometer values. In [<xref ref-type="bibr" rid="b6-sensors-10-09163">6</xref>], the zero velocity interval is detected based on norms of accelerometers and gyroscopes along with variance of accelerometers.</p>
<p>To use the zero velocity algorithms in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>–<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>,<xref ref-type="bibr" rid="b5-sensors-10-09163">5</xref>,<xref ref-type="bibr" rid="b6-sensors-10-09163">6</xref>], some threshold values (both for sensor values and time duration) must be assigned. These threshold values could differ significantly when a person is walking and running. The sensor values tend to become large and the interval duration tend to become shorter when a person is running. If we choose the threshold values too small, then we cannot detect zero velocity intervals when a person is running. On the other hand, if the threshold values are too large, then we could detect wrong zero velocity intervals. In general, the methods in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>–<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>,<xref ref-type="bibr" rid="b5-sensors-10-09163">5</xref>,<xref ref-type="bibr" rid="b6-sensors-10-09163">6</xref>] are relatively good for walking scenarios, but not for both walking and running.</p>
<p>In this paper, we propose a new zero velocity detection algorithm using a hidden Markov model [<xref ref-type="bibr" rid="b11-sensors-10-09163">11</xref>,<xref ref-type="bibr" rid="b12-sensors-10-09163">12</xref>]. The most relevant result is [<xref ref-type="bibr" rid="b4-sensors-10-09163">4</xref>], where a zero velocity detection algorithm using a hidden Markov model is also used. The main differences are twofold. One is that only one gyroscope value is used in this paper while a foot sensor is also used in [<xref ref-type="bibr" rid="b4-sensors-10-09163">4</xref>], which makes the zero detection problem relatively easy. The other difference is that a Markov model is constructed using segmentation of gyroscope outputs instead of using gyroscope outputs directly, which makes the zero velocity detection more reliable.</p></sec>
<sec>
<label>2.</label>
<title>Inertial Sensor-Based Pedestrian Navigation Systems and Zero Velocity Intervals</title>
<p>In inertial sensor-based pedestrian navigation systems, inertial sensors are installed on a shoe, as can be seen in <xref ref-type="fig" rid="f1-sensors-10-09163">Figure 1</xref>. Note that the <italic>y</italic>-axis is nearly perpendicular to the sagittal plane. Thus, when a person walks or runs, the dominant rotation axis is the <italic>y</italic>-axis. We use <italic>y</italic>-axis gyroscope value to determine the zero velocity intervals. The gyroscope measures angular rate of foot rotations, and <italic>y</italic>-axis gyroscope output in our system has positive values when a foot is rotating clockwise.</p>
<p><xref ref-type="fig" rid="f2-sensors-10-09163">Figure 2</xref> shows the <italic>y</italic>-axis gyroscope output of two walking steps. From experiments, we found that a typical pattern is given as in <xref ref-type="fig" rid="f3-sensors-10-09163">Figure 3</xref>, where the pattern consists of four segments. The pattern starts with the zero value segment and it has two positive value segments and one negative value segment between them. These four segments are related to the foot movement. When a foot is on the ground, the output value is near upon zero. As a foot takes off the ground, the gyroscope output has positive values. And then it has negative values when a foot is swinging. Lastly, gyroscope output has positive values once more when the heel of a foot (or shoe) contacts the ground. This pattern is repeated in walking and running. We assign four states (1,2,3, and 4) to each segment, as in <xref ref-type="fig" rid="f3-sensors-10-09163">Figure 3</xref>. The details are discussed in Section 3.</p>
<p><xref ref-type="fig" rid="f3-sensors-10-09163">Figure 3</xref> shows how the <italic>y</italic>-axis gyroscope value changes during the normal walking cycles. A foot touches the ground almost periodically for a short interval. During this short interval, a foot is fixed on the ground and not moving. These short intervals are called “zero velocity intervals”. Due to sensor noises in the real data, it is not always easy to determine the zero velocity interval. Similar patterns can be observed during running cycles. In the running cycles, the zero velocity interval becomes shorter and it is more difficult to detect the zero velocity interval. We divided the gait pattern into four states based on the features of the y-axis gyroscope output. At this time, the state 1 is zero velocity interval.</p></sec>
<sec>
<label>3.</label>
<title>Hidden Markov Model</title>
<p>In this section, we introduce a hidden Markov model for the zero velocity detection. The walking states are modeled as a finite state machine (see <xref ref-type="fig" rid="f4-sensors-10-09163">Figure 4</xref>), whose states can be observed through <italic>y</italic>-axis gyroscope value <italic>z<sub>i</sub></italic> Instead of using <italic>z<sub>i</sub></italic> directly as in [<xref ref-type="bibr" rid="b4-sensors-10-09163">4</xref>], <italic>Y<sub>k</sub></italic> (a series of segments derived from <italic>z<sub>i</sub></italic>) is used as an output in the hidden Markov model.</p>
<p>The segmentation of <italic>y</italic>-axis gyroscope value <italic>z<sub>i</sub></italic> is explained. First three regions (Region 1, 2, and 3) are defined depending on <italic>z<sub>i</sub></italic> values (see <xref ref-type="fig" rid="f5-sensors-10-09163">Figure 5</xref>). To formally state this, we define a function <italic>f</italic>(<italic>z<sub>i</sub></italic>):
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>f</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>|</mml:mo>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>&gt;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>&lt;</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mtext>otherwise</mml:mtext></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mtext>where</mml:mtext>
<mml:mo> </mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>&lt;</mml:mo></mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mi> </mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>If <italic>z<sub>i</sub></italic> values stay in the region <italic>j</italic> more than <italic>N<sub>j</sub></italic> (<italic>j</italic> = 1,2,3) (that is, at least <italic>N<sub>j</sub></italic> consecutive <italic>z<sub>i</sub></italic> values have the same <italic>f</italic>(<italic>z<sub>i</sub></italic>)), those <italic>z<sub>i</sub></italic> values make a segment.</p>
<p>A segmentation example of is given in <xref ref-type="fig" rid="f6-sensors-10-09163">Figure 6</xref> with <italic>N</italic><sub>1</sub>=<italic>N</italic><sub>2</sub>=<italic>N</italic><sub>3</sub>=3. Since six consecutive <italic>z<sub>i</sub></italic> (2≤<italic>i</italic>≤7) values have the same <italic>f</italic>(<italic>z<sub>i</sub></italic>) =3 (that is 6≥ <italic>N</italic><sub>3</sub> = 3), they form the first segment. We will use <italic>Y</italic><sub>k</sub> (<italic>k</italic> is the segment index) to denote the segment value, which is defined by <italic>Y</italic><sub>k</sub> =<italic>f</italic>(<italic>z<sub>i</sub></italic>), where <italic>z<sub>i</sub></italic> belongs to the <italic>k</italic>-th segment. In <xref ref-type="fig" rid="f6-sensors-10-09163">Figure 6</xref>, we note that <italic>Y</italic><sub>1</sub>=3. Similarly, the second segment is <italic>Y</italic><sub>2</sub>=1. Also note that some <italic>z<sub>i</sub></italic> values do not belong to any segments. For example, <italic>z</italic><sub>8</sub> and <italic>z</italic><sub>9</sub> do not belong to any segments and these values are ignored.</p>
<p>In <xref ref-type="fig" rid="f6-sensors-10-09163">Figure 6</xref>, <italic>s<sub>k</sub></italic> and <italic>e<sub>k</sub></italic> denote the starting and ending indices of the <italic>k</italic>-th segment, respectively: note that <italic>s</italic><sub>1</sub> = 2, <italic>e</italic><sub>1</sub> = 7, <italic>s</italic><sub>2</sub> =10 and <italic>e</italic><sub>2</sub> =15.</p>
<p>We will identify each segment using the finite state hidden Markov model. We assume that there is a Markov process <italic>X<sub>k</sub></italic>, which represents four walking states in <xref ref-type="fig" rid="f3-sensors-10-09163">Figure 3</xref>. <italic>X<sub>k</sub></italic> assumes one of four states: 1, 2, 3, and 4. When a person is walking, a typical state transition is 1→2→3→4→1→…. The Markov process <italic>X<sub>k</sub></italic> cannot be obtained directly but is estimated through the output <italic>Y<sub>k</sub></italic> (that is, segment output), which can be observed. An example of state transitions of <italic>X<sub>k</sub></italic> and output <italic>Y<sub>k</sub></italic> is given in <xref ref-type="fig" rid="f7-sensors-10-09163">Figure 7</xref>.</p>
<p>From experimental results, we determined the state transition probability as in <xref ref-type="fig" rid="f8-sensors-10-09163">Figure 8</xref>. A typical state transition is 1→2→3→4→1. However, there are also other possible transition patterns. For example, 4→3→2 transition (state 1 is missing) is possible. In this case, output data corresponding to state 1 is too short to be recognized as <italic>Y<sub>k</sub></italic> and state 1 is considered to be missing.</p>
<p>From <xref ref-type="fig" rid="f8-sensors-10-09163">Figure 8</xref>, the state transition probability matrix <italic>A</italic> is given by:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0.09</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.09</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.09</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.5</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0.9</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.01</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.45</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.5</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0.01</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.9</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.01</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.45</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where the (<italic>m,n</italic>) -th element of <italic>A</italic> is given by:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mn</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mtext>Pr</mml:mtext>
<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:mi>m</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>4</mml:mn></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>n</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1.</mml:mn></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The determination of <italic>A</italic> is a trial-and-error process, which is explained in the following. A normal state transition is 1→2→3→4→1→2→3→4. If walking and running cycles consist of only normal transitions, <italic>A</italic> should be as follows:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>However, we found that some states are missing during walking and running. A person walked or ran 30 steps and we examined <italic>Y<sub>k</sub></italic>. If no state is missing, <italic>Y<sub>k</sub></italic> should be 1→2→3→2 for one walking or running cycle. If <italic>Y<sub>k</sub></italic> is 1→2→3→1, then we know state 4 is missing. The results are summarized in <xref ref-type="table" rid="t1-sensors-10-09163">Table 1</xref>.</p>
<p>From <xref ref-type="table" rid="t1-sensors-10-09163">Table 1</xref>, we can draw the following conclusions:
<list list-type="simple">
<list-item>
<p>- State 1 is sometimes missing (in particular, when a person is running)</p></list-item>
<list-item>
<p>- State 2 and 3 are not missing</p></list-item>
<list-item>
<p>- State 4 is sometimes missing (in particular, when a person is running).</p></list-item></list></p>
<p>Thus we modified <italic>A</italic><sub>1</sub> to allow the following state transitions: 1→2→3→1 (state 4 is missing), 1→2→3→4→2 (state 1 is missing), and 1→2→3→2 (state 1 and 4 are missing):
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mn>4</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>If we choose large <italic>p</italic><sub>1</sub> (for example <italic>p</italic><sub>1</sub>= 0.9 and <italic>p</italic><sub>2</sub>= 0.1), it tends to estimate the transition 1→2→3→4 (normal cycle) as 1→2→3→2 (state 1 and 4 are missing). On the other hand, if we choose small <italic>p</italic><sub>1</sub> (for example, <italic>p</italic><sub>1</sub> = 0.1 and <italic>p</italic><sub>2</sub> = 0.9), it tends to estimate the transition 1→2→3→2 (state 1 and 4 are missing) as 1→2→3→4 (normal cycle). If difference between <italic>p</italic><sub>1</sub> and <italic>p</italic><sub>2</sub> is not large, the estimation results are similar.</p>
<p>Finally, we added small values for most transitions to allow unusual transitions. For example, when a person is standing and idly moving foot, unusual transitions (such as 2→1) could happen.</p>
<p>We have explained guidelines of how <italic>A</italic> are determined. Some values (such as 0.01 and 0.09) are determined by changing values and testing the results. We note that the proposed <italic>A</italic> is by no means an optimal <italic>A</italic>. As far as we know there is no analytic design procedure to derive the optimal <italic>A</italic> as stated in [<xref ref-type="bibr" rid="b13-sensors-10-09163">13</xref>]. It is possible that extensive tuning of the parameters could produce better results and to derive a better tuning method is one of future topics.</p>
<p>If the output <italic>Y<sub>k</sub></italic>=1, then we can assume <italic>X<sub>k</sub></italic>=1 from <xref ref-type="fig" rid="f7-sensors-10-09163">Figure 7</xref>. Also if <italic>Y<sub>K</sub></italic>=2 then <italic>X<sub>k</sub></italic> is either 2 or 4. If <italic>Y<sub>k</sub></italic>= 3, then <italic>X<sub>k</sub></italic> is 3. This observation is contained in a matrix <italic>C</italic>, which represents the link between the output process <italic>Y<sub>k</sub></italic> and the state process <italic>X<sub>k</sub></italic>. Matrix <italic>C</italic> is defined by:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">mn</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mtext>Pr</mml:mtext>
<mml:mo stretchy="false">[</mml:mo>
<mml:msub>
<mml:mi>Y</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>m</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mn>3</mml:mn></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="italic">mn</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1.</mml:mn></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>In this paper, we use the following <italic>C</italic> matrix:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Once <italic>A</italic> and <italic>C</italic> are defined, we can estimate <italic>X<sub>k</sub></italic> from the output <italic>Y<sub>k</sub></italic> using HMM filters or smoothers [<xref ref-type="bibr" rid="b11-sensors-10-09163">11</xref>–<xref ref-type="bibr" rid="b14-sensors-10-09163">14</xref>]. Let Π<italic><sub>k|k+l</sub></italic> ∈<italic>R</italic><sup>4×1</sup> be a probability vector whose <italic>i</italic>-th element is given by Pr[X<italic><sub>k</sub></italic>=<italic>i|Y</italic><sub>1,</sub>⋯,<italic>Y<sub>k+l</sub></italic>]. If <italic>l=</italic>0, then the problem becomes an HMM filter. If <italic>l</italic>&gt;0, the problem becomes an HMM (fixed-lag) smoother problem. It is known that an HMM smoother gives a more reliable result than an HMM filter [<xref ref-type="bibr" rid="b11-sensors-10-09163">11</xref>]. We found an HMM smoother with <italic>l=</italic>1 gives a significantly much more reliable results in our case (see the experimental results in <xref ref-type="table" rid="t1-sensors-10-09163">Table 1</xref>). For example, suppose the state 4 and 1 are missing and the state transitions are given by 1→2→3→2→3 (<italic>X<sub>k</sub></italic>). In the case, the outputs are given by 1→2→3→2→3(<italic>Y<sub>k</sub></italic>). If we use an HMM filter, the estimated first four states are likely to be 1→2→3→4 (<italic>X<sub>k</sub></italic>) since it only uses the current outputs 1→2→3→2(<italic>Y<sub>k</sub></italic>). On the other hand, an HMM smoother gives the correct estimates using the outputs 1→2→3→2→3(<italic>Y<sub>k</sub></italic>). When an HMM smoother with <italic>l=</italic>1, we can obtain an estimation result only after the current and the next outputs are available. Thus the estimation result is delayed by the combined duration of the current and next segments: typical delay is 1 second.</p></sec>
<sec>
<label>4.</label>
<title>Zero Velocity Detection Algorithm</title>
<p>After <italic>X<sub>k</sub></italic> is estimated, the next step is to determine zero velocity intervals. We decide that the time <italic>i</italic> belongs to zero velocity intervals if |<italic>z<sub>i</sub></italic>|≤α<sub>3</sub> with anti-chattering algorithm and <italic>i</italic> satisfies the following conditions:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mrow>
<mml:mtext>case</mml:mtext>
<mml:mo> </mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>:</mml:mo>
<mml:mo> </mml:mo>
<mml:mtext>if</mml:mtext></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<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:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow/></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>s</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>β</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</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>γ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mrow>
<mml:mtext>case</mml:mtext>
<mml:mo> </mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>:</mml:mo>
<mml:mo> </mml:mo>
<mml:mtext>if</mml:mtext></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<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:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow/></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>s</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>β</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mrow>
<mml:mtext>case </mml:mtext>
<mml:mo> </mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>:</mml:mo>
<mml:mo> </mml:mo>
<mml:mtext>if</mml:mtext></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<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:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow/></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>s</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>β</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>≤</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>The |<italic>z<sub>i</sub></italic>|≤α<sub>3</sub> condition is used as a safeguard to prevent false identification of the zero velocity interval.</p>
<p>Case 1 corresponds to the normal walking cycles, where the state transition is 3→4→1→2 (see <xref ref-type="fig" rid="f7-sensors-10-09163">Figure 7</xref>). Since the zero velocity interval belongs to the state 1, the interval is chosen inside state 1. The parameters <italic>β</italic><sub>1</sub> and <italic>γ</italic><sub>1</sub> are used to discard time intervals near edges of the interval whose state is 1:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.1</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</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>s</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 stretchy="false">)</mml:mo>
<mml:mi> </mml:mi>
<mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>Since a foot is moving before and after state 1, the foot velocity cannot be zero in the edge regions. Thus we cut 10% (corresponding to 0.1) off the interval at both edges. If we choose larger values (for example, 0.2), the chance that a non-zero velocity interval is mistakenly identified as a zero velocity interval is reduced. However, we could obtain narrower zero velocity intervals, which is not desirable.</p>
<p>Case 2 and 3 correspond to walking or running cycles, where state 1 and/or state 4 are missing. Case 2 is when state 1 is missing. This could happen if the zero velocity interval is too short to form a segment. For example, state 1 is missing in <xref ref-type="fig" rid="f9-sensors-10-09163">Figure 9</xref>: state transition is 2→3→4→2→3. However, we can identify an interval corresponding to state 1 in <xref ref-type="fig" rid="f9-sensors-10-09163">Figure 9</xref> by the manual inspection. This interval is identified as state 1 in the manual inspection. Thus the state classifications by the manual inspection and by <italic>X<sub>k</sub></italic> are different: even if some states are missing in <italic>X<sub>k</sub></italic> transition, they can be identified in the manual inspection.</p>
<p>We manually inspected the data and found the average duration ratio of each state is given as follows:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>state</mml:mtext>
<mml:mi> </mml:mi>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mtext>state</mml:mtext>
<mml:mi> </mml:mi>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mtext>state</mml:mtext>
<mml:mi> </mml:mi>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mtext>state</mml:mtext>
<mml:mi> </mml:mi>
<mml:mn>4</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>11.3</mml:mn>
<mml:mo>%</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mn>27.4</mml:mn>
<mml:mo>%</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mn>42.8</mml:mn>
<mml:mo>%</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mn>18.5</mml:mn>
<mml:mo>%</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>The ratio was computed from a weighted average of walking (weighting 0.1) and running (weighting 0.9) data. More weighting was given to running since missing states (like in case 2 and 3) are more likely to happen in running.</p>
<p>In case 2, the state 1 is missing. We assume the interval of missing state 1 is (<italic>s<sub>k</sub></italic><sub>–1</sub>+<italic>b<sub>k</sub>,s<sub>k</sub></italic>). Note that the average duration percentage of state 4 and state 1 are 18.5% and 11.3%, respectively. Thus the duration ratio between <italic>s<sub>k</sub></italic><sub>–1</sub> and <italic>s<sub>k</sub></italic> is 0.621:0.379. Thus we choose <italic>β</italic><sub>2</sub> and <italic>γ</italic><sub>2</sub> as follows (see <xref ref-type="fig" rid="f10-sensors-10-09163">Figure 10</xref>):
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.621</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>s</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>s</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 stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula></p>
<p>In other words, the interval [<italic>s<sub>k</sub></italic><sub>–1</sub>, <italic>s<sub>k</sub></italic>] is divided into [<italic>s<sub>k</sub></italic><sub>−1</sub>,<italic>s<sub>k</sub></italic><sub>−1</sub>+<italic>β</italic><sub>2</sub>] and [<italic>s<sub>k</sub></italic><sub>−1</sub> +<italic>β</italic><sub>2</sub>,<italic>s<sub>k</sub></italic>], where the latter is considered as state 1 interval.</p>
<p>Case 3 is when state 4 and 1 are missing. In this case, interval [<italic>s<sub>k</sub></italic><sub>–1</sub>, <italic>s<sub>k</sub></italic>] includes the state 3 and missing states (4 and 1). Note that the average duration percentage of state 3, 4, and state 1 are 42.8%, 18.5%, and 11.3%, respectively. Thus the duration ratio among state 3:state 4:state 1 is 0.589 : 0.255 : 0.156. Thus we choose <italic>β</italic><sub>3</sub> and <italic>γ</italic><sub>3</sub> as follows:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.844</mml:mn>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>s</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>s</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:math></disp-formula></p>
<p>When the interval [<italic>s<sub>k</sub></italic><sub>–1</sub>+<italic>β<sub>j</sub></italic>, <italic>e<sub>k</sub></italic><sub>–1</sub>−<italic>γ<sub>j</sub></italic>] is determined, we checked whether <italic>z<sub>i</sub></italic>, <italic>i</italic>∈[<italic>s<sub>k</sub></italic><sub>–1</sub>+<italic>β<sub>j</sub></italic>, <italic>e<sub>k</sub></italic><sub>–1</sub>−<italic>γ<sub>j</sub></italic>] satisfies |<italic>z<sub>i</sub>|</italic>&lt;<italic>α<sub>3</sub></italic> condition. Let <italic>U</italic> = {<italic>i</italic>| |<italic>z<sub>i</sub></italic>| &lt; α<sub>3</sub>, <italic>i</italic> ∈ [<italic>s</italic><sub><italic>k</italic>−1</sub> + β<sub><italic>j</italic></sub>,<italic>e</italic><sub><italic>k</italic>−1</sub>−γ<sub><italic>j</italic></sub>]}. If the set <italic>U</italic> consists of more than one intervals as in <xref ref-type="fig" rid="f11-sensors-10-09163">Figure 11</xref>, the interval whose duration is the largest is chosen as the zero velocity interval.</p></sec>
<sec>
<label>5.</label>
<title>Experiments</title>
<p>In this section, the proposed method is verified using experiment data, which are obtained from an inertial sensor unit (Xsens Mti) attached on a shoe. The sampling rate is 100 Hz. In <xref ref-type="fig" rid="f12-sensors-10-09163">Figure 12</xref>, sensor outputs are given when a person walked and then ran slowly. We note that only gyroscope output is used in the proposed algorithm. The z-axis accelerometer output is also given since it is used by other existing algorithms. The proposed algorithm along with other existing algorithms [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>–<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] are applied to the experiment data. The parameters of the proposed algorithm are given by:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.7</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>10</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>N</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>20</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:math></disp-formula></p>
<p>The parameters <italic>α<sub>j</sub></italic> and <italic>N<sub>j</sub></italic> are determined from the experimental data so that normal walking gives four different states. For example, if we use a smaller <italic>α</italic><sub>2</sub> value, it becomes sensitive to noises so that states 2/3/4 could be falsely identified. On the other hand, if we use larger <italic>α</italic><sub>2</sub> value, states 2/3/4 could be lost. The parameter <italic>N<sub>j</sub></italic> is closely related to <italic>α<sub>j</sub></italic>. For example, smaller <italic>N</italic><sub>2</sub> has a similar effect of using smaller <italic>α</italic><sub>2</sub> in the sense that state 2/3/4 could be falsely identified.</p>
<p>As a reference, zero velocity interval is determined by manually analyzing gyroscope data. When data are analyzed manually from the plot, the sensor noises and irregularities can be easily spotted and thus we can consider the detected interval as a true zero velocity interval.</p>
<p>The result is given in <xref ref-type="fig" rid="f13-sensors-10-09163">Figure 13</xref>. The algorithm in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>] failed to detect the zero velocity interval when a person is running. The algorithm in [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] is not reliable in the sense that there are false zero velocity detections.</p>
<p>In <xref ref-type="fig" rid="f14-sensors-10-09163">Figure 14</xref>, sensor outputs are given when a person ran slowly and then ran fast. The speeds of “walk”, “run slowly” and “run fast” are about 1.05 m/s, 2.14 m/s, and 3.50 m/s, respectively, which are computed by dividing the distance by the elapsed time. The zero detection results are given in <xref ref-type="fig" rid="f15-sensors-10-09163">Figure 15</xref>. It can be seen that the methods in [<xref ref-type="bibr" rid="b1-sensors-10-09163">1</xref>] and [<xref ref-type="bibr" rid="b2-sensors-10-09163">2</xref>] cannot detect the zero velocity intervals when a person ran fast. In all cases (<xref ref-type="fig" rid="f13-sensors-10-09163">Figures 13</xref> and <xref ref-type="fig" rid="f15-sensors-10-09163">15</xref>), the proposed algorithm reliably detected the zero velocity intervals.</p>
<p>To compare performance of each method quantitatively, a person walked or ran 30 steps at different speed. Since there is one zero velocity interval in each step, 30 zero velocity intervals should be detected. The number of detected zero velocity intervals by different methods is given in <xref ref-type="table" rid="t2-sensors-10-09163">Table 2</xref>. We can see when a person is walking, all methods give a good result. When a person is running, method 1 and 2 failed to detect the zero velocity intervals most times. The method [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] and the proposed method with an HMM smoother are able to detect all the zero velocity intervals. When counting the number of detected zero velocity intervals, we counted one even if there are more than two detection during the same zero velocity interval. For example, see the two detected zero velocity intervals by the method [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] between 24 and 25 s. These two intervals are counted as one interval. We note that there is a zero velocity interval between the two detected zero velocity intervals, but it is not detected by the method [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>]. On the other hand, the proposed method detects almost the whole range of a zero velocity interval. Thus the proposed method can detect the zero velocity intervals more reliably.</p>
<p>We also investigated whether there is false zero velocity detection (an interval is identified as a zero velocity interval while a foot is not in the zero velocity interval). The result is given in <xref ref-type="table" rid="t3-sensors-10-09163">Table 3</xref>, where the same experiment data were used as in <xref ref-type="table" rid="t2-sensors-10-09163">Table 2</xref>. It can be seen that the method in [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] sometimes falsely identifies the zero velocity intervals: we found the method in [<xref ref-type="bibr" rid="b3-sensors-10-09163">3</xref>] sometimes falsely identifies zero crossing points of gyroscope norm as zero velocity intervals. There was no false zero velocity detection in other methods.</p></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>In this paper, we have proposed a new zero velocity detection algorithm, which can be used in inertial sensor based pedestrian navigation systems.</p>
<p>Existing zero detection methods usually work well for normal walking cycles, but the detection is not reliable for running cycles, in particular when the running speed is high. Using a hidden Markov model, the proposed algorithm can analyze both walking and running cycles and the zero velocity interval is thus more reliably detected.</p>
<p>The actual state transition probabilities differ depending on speed of a person. In this paper, we used one averaged transition probability. It is a future work to derive a zero velocity detection algorithm that uses multiple state transition probability matrices.</p></sec></body>
<back>
<ack>
<p>This work was supported by National Research Foundation of Korea Grant funded by the Korean Government (No. 2010-0016230).</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-10-09163"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Foxlin</surname><given-names>E</given-names></name></person-group><article-title>Pedestrian tracking with shoe-mounted inertial sensors</article-title><source>IEEE Comp. Graph. Appl</source><year>2005</year><volume>25</volume><fpage>38</fpage><lpage>46</lpage><pub-id pub-id-type="doi">10.1109/MCG.2005.140</pub-id></citation></ref>
<ref id="b2-sensors-10-09163"><label>2.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Yun</surname><given-names>X</given-names></name><name><surname>Bachmann</surname><given-names>ER</given-names></name><name><surname>IV</surname><given-names>HM</given-names></name><name><surname>Calusidan</surname><given-names>J</given-names></name></person-group><article-title>Self-contained position tracking of human movement using small inertial/magnetic sensor modules</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation</conf-name><conf-loc>Rome, Italy</conf-loc><conf-date>April 10–14, 2007</conf-date><fpage>2526</fpage><lpage>2533</lpage></citation></ref>
<ref id="b3-sensors-10-09163"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ojeda</surname><given-names>L</given-names></name><name><surname>Borenstein</surname><given-names>J</given-names></name></person-group><article-title>Non-GPS navigation for security personnel and first responders</article-title><source>J. Navigation</source><year>2007</year><volume>60</volume><fpage>391</fpage><lpage>407</lpage><pub-id pub-id-type="doi">10.1017/S0373463307004286</pub-id></citation></ref>
<ref id="b4-sensors-10-09163"><label>4.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Suh</surname><given-names>YS</given-names></name><name><surname>Park</surname><given-names>SK</given-names></name></person-group><article-title>Pedestrian inertial navigation with gait phase detection assisted zero velocity updating</article-title><conf-name>Proceedings of the 4th International Conference on Autonomous Robots and Agents</conf-name><conf-loc>Wellington, New Zealand</conf-loc><conf-date>February 10–12, 2009</conf-date><fpage>336</fpage><lpage>341</lpage></citation></ref>
<ref id="b5-sensors-10-09163"><label>5.</label><citation citation-type="other"><person-group person-group-type="author"><name><surname>Stirling</surname><given-names>RG</given-names></name></person-group><comment>Development of A Pedestrian Navigation System Using Shoe Mounted Sensors. Master of Science, University of Alberta, Edmonton, AB, Canada</comment><year>2003</year></citation></ref>
<ref id="b6-sensors-10-09163"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Jiménez</surname><given-names>AR</given-names></name><name><surname>Seco</surname><given-names>F</given-names></name><name><surname>Prieto</surname><given-names>C</given-names></name><name><surname>Guevara</surname><given-names>J</given-names></name></person-group><article-title>Indoor Pedestrian Navigation using an INS/EKF framework for Yaw Drift Reduction and a Foot-mounted IMU</article-title><conf-name>Proceedings of 7th Workshop on Positioning, Navigation and Communication, WPNC 2010</conf-name><conf-loc>Dresden, Germany</conf-loc><conf-date>March 11–12, 2010</conf-date></citation></ref>
<ref id="b7-sensors-10-09163"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Millonig</surname><given-names>A</given-names></name><name><surname>Schechtner</surname><given-names>K</given-names></name></person-group><article-title>Developing landmark-based pedestrian navigation systems</article-title><conf-name>Proceedings of IEEE Conference on Intelligent Transportation Systems</conf-name><conf-loc>Vienna, Austria</conf-loc><conf-date>September 13–16, 2005</conf-date><fpage>197</fpage><lpage>202</lpage></citation></ref>
<ref id="b8-sensors-10-09163"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wendlandt</surname><given-names>K</given-names></name><name><surname>Berbig</surname><given-names>M</given-names></name><name><surname>Robertson</surname><given-names>P</given-names></name></person-group><article-title>Indoor localization with probability density functions based on Bluetooth</article-title><conf-name>Proceedings of the 16th International Symposium on Personal, Indoor and Mobile Radio Communications</conf-name><conf-loc>Berlin, Germany</conf-loc><conf-date>September 2005</conf-date><fpage>2040</fpage><lpage>2044</lpage></citation></ref>
<ref id="b9-sensors-10-09163"><label>9.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Chatfield</surname><given-names>AB</given-names></name></person-group><source>Fundamentals of High Accuracy Inertial Navigation</source><publisher-name>AIAA</publisher-name><publisher-loc>Richmond, VA, USA</publisher-loc><year>1997</year></citation></ref>
<ref id="b10-sensors-10-09163"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Yang</surname><given-names>CK</given-names></name><name><surname>Shim</surname><given-names>DS</given-names></name></person-group><article-title>Best sensor configuration and accommodation rule based on navigation performance for INS with seven inertial sensors</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>8456</fpage><lpage>8472</lpage><pub-id pub-id-type="doi">10.3390/s91108456</pub-id><pub-id pub-id-type="pmid">22291518</pub-id></citation></ref>
<ref id="b11-sensors-10-09163"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shue</surname><given-names>L</given-names></name><name><surname>Andeson</surname><given-names>BDO</given-names></name><name><surname>Dey</surname><given-names>S</given-names></name></person-group><article-title>Exponential stability of filters and smoothers for Hidden Markov models</article-title><source>IEEE Trans. Acoustics, Speech, Signal Proc</source><year>1998</year><volume>46</volume><fpage>2180</fpage><lpage>2194</lpage><pub-id pub-id-type="doi">10.1109/78.705429</pub-id></citation></ref>
<ref id="b12-sensors-10-09163"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Anderson</surname><given-names>BDO</given-names></name></person-group><article-title>From Winer to hidden Markov models</article-title><source>IEEE Control Syst. Mag</source><year>1999</year><volume>19</volume><fpage>41</fpage><lpage>51</lpage><pub-id pub-id-type="doi">10.1109/37.768539</pub-id></citation></ref>
<ref id="b13-sensors-10-09163"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rabiner</surname><given-names>LR</given-names></name></person-group><article-title>A tutorial on hidden Markov models and selected applications in speech recognition</article-title><source>IEEE</source><year>1989</year><volume>77</volume><fpage>257</fpage><lpage>286</lpage><pub-id pub-id-type="doi">10.1109/5.18626</pub-id></citation></ref>
<ref id="b14-sensors-10-09163"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Seo</surname><given-names>DJ</given-names></name><name><surname>Ko</surname><given-names>NY</given-names></name><name><surname>Son</surname><given-names>JE</given-names></name></person-group><article-title>A method for combining odometry and distance sensor information for Effective obstacle avoidance of autonomous mobile robots</article-title><source>Int. J. Cont. Auto. Syst</source><year>2010</year><volume>8</volume><fpage>597</fpage><lpage>603</lpage><pub-id pub-id-type="doi">10.1007/s12555-010-0312-7</pub-id></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-10-09163" position="float">
<label>Figure 1.</label>
<caption>
<p>Inertial sensors for the pedestrian navigation system.</p></caption>
<graphic xlink:href="sensors-10-09163f1.gif"/></fig>
<fig id="f2-sensors-10-09163" position="float">
<label>Figure 2.</label>
<caption>
<p>The y-axis gyroscope output in walking.</p></caption>
<graphic xlink:href="sensors-10-09163f2.gif"/></fig>
<fig id="f3-sensors-10-09163" position="float">
<label>Figure 3.</label>
<caption>
<p><italic>y</italic>-axis gyroscope value trend and a foot movement in normal walking cycles.</p></caption>
<graphic xlink:href="sensors-10-09163f3.gif"/></fig>
<fig id="f4-sensors-10-09163" position="float">
<label>Figure 4.</label>
<caption>
<p>Hidden Markov model based on segmentation of <italic>z<sub>i</sub></italic>.</p></caption>
<graphic xlink:href="sensors-10-09163f4.gif"/></fig>
<fig id="f5-sensors-10-09163" position="float">
<label>Figure 5.</label>
<caption>
<p>The region classification.</p></caption>
<graphic xlink:href="sensors-10-09163f5.gif"/></fig>
<fig id="f6-sensors-10-09163" position="float">
<label>Figure 6.</label>
<caption>
<p>Example of a segmentation.</p></caption>
<graphic xlink:href="sensors-10-09163f6.gif"/></fig>
<fig id="f7-sensors-10-09163" position="float">
<label>Figure 7.</label>
<caption>
<p>State transition example of normal walking cycles.</p></caption>
<graphic xlink:href="sensors-10-09163f7.gif"/></fig>
<fig id="f8-sensors-10-09163" position="float">
<label>Figure 8.</label>
<caption>
<p>The state transition diagram.</p></caption>
<graphic xlink:href="sensors-10-09163f8.gif"/></fig>
<fig id="f9-sensors-10-09163" position="float">
<label>Figure 9.</label>
<caption>
<p>Case 2: state 1 is missing.</p></caption>
<graphic xlink:href="sensors-10-09163f9.gif"/></fig>
<fig id="f10-sensors-10-09163" position="float">
<label>Figure 10.</label>
<caption>
<p>Average duration ratio of each state by manual inspection and its use in Case 2 and 3.</p></caption>
<graphic xlink:href="sensors-10-09163f10.gif"/></fig>
<fig id="f11-sensors-10-09163" position="float">
<label>Figure 11.</label>
<caption>
<p>Zero velocity interval selection.</p></caption>
<graphic xlink:href="sensors-10-09163f11.gif"/></fig>
<fig id="f12-sensors-10-09163" position="float">
<label>Figure 12.</label>
<caption>
<p>Sensor outputs when a person is walking(23∼27 s) and slowly running(27∼32 s).</p></caption>
<graphic xlink:href="sensors-10-09163f12.gif"/></fig>
<fig id="f13-sensors-10-09163" position="float">
<label>Figure 13.</label>
<caption>
<p>Zero velocity detection comparison when a person is walking and slowly running (Z. V. I. means zero velocity interval).</p></caption>
<graphic xlink:href="sensors-10-09163f13.gif"/></fig>
<fig id="f14-sensors-10-09163" position="float">
<label>Figure 14.</label>
<caption>
<p>Sensor outputs when a person is running slowly(25∼30s) and running fast(30∼34 s).</p></caption>
<graphic xlink:href="sensors-10-09163f14.gif"/></fig>
<fig id="f15-sensors-10-09163" position="float">
<label>Figure 15.</label>
<caption>
<p>Zero velocity detection comparison when a person is running slowly and running fast(Z. V. I. means zero velocity interval).</p></caption>
<graphic xlink:href="sensors-10-09163f15.gif"/></fig>
<table-wrap id="t1-sensors-10-09163" position="float">
<label>Table 1.</label>
<caption>
<p>Missing states during walking and running (30 steps test for each trial).</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="left" valign="top" rowspan="2"/>
<th colspan="3" align="center" valign="middle"><bold>Number of missing states in walking</bold>
<hr/></th>
<th colspan="3" align="center" valign="middle"><bold>Number of missing states in running</bold>
<hr/></th>
<th align="center" valign="middle" rowspan="2" content-type="background-color:#A8A8A8"><bold>Missing probability [%]</bold></th></tr>
<tr>
<th align="center" valign="middle"><bold>1st</bold></th>
<th align="center" valign="middle"><bold>2nd</bold></th>
<th align="center" valign="middle"><bold>3rd</bold></th>
<th align="center" valign="middle"><bold>1st</bold></th>
<th align="center" valign="middle"><bold>2nd</bold></th>
<th align="center" valign="middle"><bold>3rd</bold></th></tr>
<tr>
<th colspan="8" align="left" valign="middle">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top"><bold>State 1</bold></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">20</td>
<td align="center" valign="top">28</td>
<td align="center" valign="top">14</td>
<td align="center" valign="top" content-type="background-color:#A8A8A8">34.4</td></tr>
<tr>
<td align="center" valign="top"><bold>State 2</bold></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top" content-type="background-color:#A8A8A8">0.0</td></tr>
<tr>
<td align="center" valign="top"><bold>State 3</bold></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top" content-type="background-color:#A8A8A8">0.0</td></tr>
<tr>
<td align="center" valign="top"><bold>State 4</bold></td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">13</td>
<td align="center" valign="top">14</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top" content-type="background-color:#A8A8A8">16.7</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-10-09163" position="float">
<label>Table 2.</label>
<caption>
<p>Number of detected zero velocity intervals by different methods (actual number of zero velocity interval is 30).</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="center" valign="top" rowspan="2"/>
<th align="center" valign="top" rowspan="2"><bold>Experiments</bold></th>
<th align="center" valign="top" rowspan="2"><bold>Speed [m/s]</bold></th>
<th colspan="5" align="center" valign="top"><bold>Number of detected zero velocity intervals by different methods</bold>
<hr/></th></tr>
<tr>
<th align="center" valign="top"><bold>[1]</bold></th>
<th align="center" valign="top"><bold>[2]</bold></th>
<th align="center" valign="top"><bold>[3]</bold></th>
<th align="center" valign="top"><bold>Proposed method with an HMM filter</bold></th>
<th align="center" valign="top"><bold>Proposed method with an HMM smoother</bold></th></tr>
<tr>
<th colspan="8" align="left" valign="middle">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="3"><bold>Walking</bold></td>
<td align="center" valign="top">1st</td>
<td align="center" valign="top">1.3</td>
<td align="center" valign="top">28</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td></tr>
<tr>
<td align="center" valign="top">2nd</td>
<td align="center" valign="top">1.4</td>
<td align="center" valign="top">22</td>
<td align="center" valign="top">29</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td></tr>
<tr>
<td align="center" valign="top">3rd</td>
<td align="center" valign="top">1.4</td>
<td align="center" valign="top">28</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">30</td></tr>
<tr>
<td colspan="8" align="left" valign="top">
<hr/></td></tr>
<tr>
<td align="center" valign="middle" rowspan="3"><bold>Running</bold></td>
<td align="center" valign="top">1st</td>
<td align="center" valign="top">2.4</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">10</td>
<td align="center" valign="top">30</td></tr>
<tr>
<td align="center" valign="top">2nd</td>
<td align="center" valign="top">2.8</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">30</td></tr>
<tr>
<td align="center" valign="top">3rd</td>
<td align="center" valign="top">2.5</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">30</td>
<td align="center" valign="top">16</td>
<td align="center" valign="top">30</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-10-09163" position="float">
<label>Table 3.</label>
<caption>
<p>Number of falsely detected zero velocity intervals by different methods.</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="center" valign="top" rowspan="2"/>
<th align="center" valign="top" rowspan="2"><bold>Experiments</bold></th>
<th align="center" valign="top" rowspan="2"><bold>Speed [m/s]</bold></th>
<th colspan="5" align="center" valign="top"><bold>Number of detected non zero velocity intervals by different methods</bold>
<hr/></th></tr>
<tr>
<th align="center" valign="top"><bold>[1]</bold></th>
<th align="center" valign="top"><bold>[2]</bold></th>
<th align="center" valign="top"><bold>[3]</bold></th>
<th align="center" valign="top"><bold>Proposed method with an HMM filter</bold></th>
<th align="center" valign="top"><bold>Proposed method with an HMM smoother</bold></th></tr>
<tr>
<th colspan="8" align="left" valign="middle">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="3"><bold>Walking</bold></td>
<td align="center" valign="top">1st</td>
<td align="center" valign="top">1.3</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">2nd</td>
<td align="center" valign="top">1.4</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">3rd</td>
<td align="center" valign="top">1.4</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td colspan="8" align="left" valign="middle">
<hr/></td></tr>
<tr>
<td align="center" valign="middle" rowspan="3"><bold>Running</bold></td>
<td align="center" valign="top">1st</td>
<td align="center" valign="top">2.4</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">2nd</td>
<td align="center" valign="top">2.8</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr>
<tr>
<td align="center" valign="top">3rd</td>
<td align="center" valign="top">2.5</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr></tbody></table></table-wrap></sec></back></article>
