Links to Exploration step
Le document en format XML
<record><TEI><teiHeader><fileDesc><titleStmt><title xml:lang="en">Automatic Determination of Validity of Input Data Used in Ellipsoid Fitting MARG Calibration Algorithms</title>
<author><name sortKey="Olivares, Alberto" sort="Olivares, Alberto" uniqKey="Olivares A" first="Alberto" last="Olivares">Alberto Olivares</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Ruiz Garcia, Gonzalo" sort="Ruiz Garcia, Gonzalo" uniqKey="Ruiz Garcia G" first="Gonzalo" last="Ruiz-Garcia">Gonzalo Ruiz-Garcia</name>
<affiliation><nlm:aff id="af2-sensors-13-11797"> Department of Computer Architecture and Computer Technology, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gruiz@ugr.es</email>
(G.R.-G.);<email>gonzalo@ugr.es</email>
(G.O.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Olivares, Gonzalo" sort="Olivares, Gonzalo" uniqKey="Olivares G" first="Gonzalo" last="Olivares">Gonzalo Olivares</name>
<affiliation><nlm:aff id="af2-sensors-13-11797"> Department of Computer Architecture and Computer Technology, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gruiz@ugr.es</email>
(G.R.-G.);<email>gonzalo@ugr.es</email>
(G.O.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="G Rriz, Juan Manuel" sort="G Rriz, Juan Manuel" uniqKey="G Rriz J" first="Juan Manuel" last="G Rriz">Juan Manuel G Rriz</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Ramirez, Javier" sort="Ramirez, Javier" uniqKey="Ramirez J" first="Javier" last="Ramirez">Javier Ramirez</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
</titleStmt>
<publicationStmt><idno type="wicri:source">PMC</idno>
<idno type="pmid">24013490</idno>
<idno type="pmc">3821311</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3821311</idno>
<idno type="RBID">PMC:3821311</idno>
<idno type="doi">10.3390/s130911797</idno>
<date when="2013">2013</date>
<idno type="wicri:Area/Pmc/Corpus">000643</idno>
<idno type="wicri:explorRef" wicri:stream="Pmc" wicri:step="Corpus" wicri:corpus="PMC">000643</idno>
</publicationStmt>
<sourceDesc><biblStruct><analytic><title xml:lang="en" level="a" type="main">Automatic Determination of Validity of Input Data Used in Ellipsoid Fitting MARG Calibration Algorithms</title>
<author><name sortKey="Olivares, Alberto" sort="Olivares, Alberto" uniqKey="Olivares A" first="Alberto" last="Olivares">Alberto Olivares</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Ruiz Garcia, Gonzalo" sort="Ruiz Garcia, Gonzalo" uniqKey="Ruiz Garcia G" first="Gonzalo" last="Ruiz-Garcia">Gonzalo Ruiz-Garcia</name>
<affiliation><nlm:aff id="af2-sensors-13-11797"> Department of Computer Architecture and Computer Technology, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gruiz@ugr.es</email>
(G.R.-G.);<email>gonzalo@ugr.es</email>
(G.O.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Olivares, Gonzalo" sort="Olivares, Gonzalo" uniqKey="Olivares G" first="Gonzalo" last="Olivares">Gonzalo Olivares</name>
<affiliation><nlm:aff id="af2-sensors-13-11797"> Department of Computer Architecture and Computer Technology, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gruiz@ugr.es</email>
(G.R.-G.);<email>gonzalo@ugr.es</email>
(G.O.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="G Rriz, Juan Manuel" sort="G Rriz, Juan Manuel" uniqKey="G Rriz J" first="Juan Manuel" last="G Rriz">Juan Manuel G Rriz</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
<author><name sortKey="Ramirez, Javier" sort="Ramirez, Javier" uniqKey="Ramirez J" first="Javier" last="Ramirez">Javier Ramirez</name>
<affiliation><nlm:aff id="af1-sensors-13-11797"> Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</nlm:aff>
</affiliation>
</author>
</analytic>
<series><title level="j">Sensors (Basel, Switzerland)</title>
<idno type="eISSN">1424-8220</idno>
<imprint><date when="2013">2013</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc><textClass></textClass>
</profileDesc>
</teiHeader>
<front><div type="abstract" xml:lang="en"><p>Ellipsoid fitting algorithms are widely used to calibrate Magnetic Angular Rate and Gravity (MARG) sensors. These algorithms are based on the minimization of an error function that optimizes the parameters of a mathematical sensor model that is subsequently applied to calibrate the raw data. The convergence of this kind of algorithms to a correct solution is very sensitive to input data. Input calibration datasets must be properly distributed in space so data can be accurately fitted to the theoretical ellipsoid model. Gathering a well distributed set is not an easy task as it is difficult for the operator carrying out the maneuvers to keep a visual record of all the positions that have already been covered, as well as the remaining ones. It would be then desirable to have a system that gives feedback to the operator when the dataset is ready, or to enable the calibration process in auto-calibrated systems. In this work, we propose two different algorithms that analyze the goodness of the distributions by computing four different indicators. The first approach is based on a thresholding algorithm that uses only one indicator as its input and the second one is based on a Fuzzy Logic System (FLS) that estimates the calibration error for a given calibration set using a weighted combination of two indicators. Very accurate classification between valid and invalid datasets is achieved with average Area Under Curve (AUC) of up to 0.98.</p>
</div>
</front>
<back><div1 type="bibliography"><listBibl><biblStruct></biblStruct>
<biblStruct></biblStruct>
<biblStruct></biblStruct>
<biblStruct><analytic><author><name sortKey="Luczak, S" uniqKey="Luczak S">S. Luczak</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Krach, B" uniqKey="Krach B">B. Krach</name>
</author>
<author><name sortKey="Robertson, P" uniqKey="Robertson P">P. Robertson</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Skog, I" uniqKey="Skog I">I. Skog</name>
</author>
<author><name sortKey="Nilsson, J O" uniqKey="Nilsson J">J.O. Nilsson</name>
</author>
<author><name sortKey="Handel, P" uniqKey="Handel P">P. Handel</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Park, S K" uniqKey="Park S">S.K. Park</name>
</author>
<author><name sortKey="Suh, Y S" uniqKey="Suh Y">Y.S. Suh</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Susi, M" uniqKey="Susi M">M. Susi</name>
</author>
<author><name sortKey="Renaudin, V" uniqKey="Renaudin V">V. Renaudin</name>
</author>
<author><name sortKey="Lachapelle, G" uniqKey="Lachapelle G">G. Lachapelle</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gonzalez Villanueva, L" uniqKey="Gonzalez Villanueva L">L. González-Villanueva</name>
</author>
<author><name sortKey="Cagnoni, S" uniqKey="Cagnoni S">S. Cagnoni</name>
</author>
<author><name sortKey="Ascari, L" uniqKey="Ascari L">L. Ascari</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Chung, P" uniqKey="Chung P">P. Chung</name>
</author>
<author><name sortKey="Ng, G" uniqKey="Ng G">G. Ng</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Grivon, D" uniqKey="Grivon D">D. Grivon</name>
</author>
<author><name sortKey="Vezzetti, E" uniqKey="Vezzetti E">E. Vezzetti</name>
</author>
<author><name sortKey="Violante, M G" uniqKey="Violante M">M.G. Violante</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Batista, P" uniqKey="Batista P">P. Batista</name>
</author>
<author><name sortKey="Silvestre, C" uniqKey="Silvestre C">C. Silvestre</name>
</author>
<author><name sortKey="Oliveira, P" uniqKey="Oliveira P">P. Oliveira</name>
</author>
<author><name sortKey="Cardeira, B" uniqKey="Cardeira B">B. Cardeira</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Shi, Z" uniqKey="Shi Z">Z. Shi</name>
</author>
<author><name sortKey="Yang, J" uniqKey="Yang J">J. Yang</name>
</author>
<author><name sortKey="Yue, P" uniqKey="Yue P">P. Yue</name>
</author>
<author><name sortKey="Cheng, Z" uniqKey="Cheng Z">Z. Cheng</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Zhang, X" uniqKey="Zhang X">X. Zhang</name>
</author>
<author><name sortKey="Gao, L" uniqKey="Gao L">L. Gao</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Frosio, I" uniqKey="Frosio I">I. Frosio</name>
</author>
<author><name sortKey="Pedersini, F" uniqKey="Pedersini F">F. Pedersini</name>
</author>
<author><name sortKey="Borghese, N A" uniqKey="Borghese N">N.A. Borghese</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Skog, I" uniqKey="Skog I">I. Skog</name>
</author>
<author><name sortKey="Handel, P" uniqKey="Handel P">P. Handel</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Petrucha, V" uniqKey="Petrucha V">V. Petrucha</name>
</author>
<author><name sortKey="Kaspar, P" uniqKey="Kaspar P">P. Kaspar</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Sahawneh, L" uniqKey="Sahawneh L">L. Sahawneh</name>
</author>
<author><name sortKey="Jarrah, M A" uniqKey="Jarrah M">M.A. Jarrah</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Dorveaux, E" uniqKey="Dorveaux E">E. Dorveaux</name>
</author>
<author><name sortKey="Vissiere, D" uniqKey="Vissiere D">D. Vissiere</name>
</author>
<author><name sortKey="Martin, A P" uniqKey="Martin A">A.P. Martin</name>
</author>
<author><name sortKey="Petit, N" uniqKey="Petit N">N. Petit</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Renaudin, V" uniqKey="Renaudin V">V. Renaudin</name>
</author>
<author><name sortKey="Afzal, M H" uniqKey="Afzal M">M.H. Afzal</name>
</author>
<author><name sortKey="Lachapelle, G" uniqKey="Lachapelle G">G. Lachapelle</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Gietzelt, M" uniqKey="Gietzelt M">M. Gietzelt</name>
</author>
<author><name sortKey="Wolf, K H" uniqKey="Wolf K">K.H. Wolf</name>
</author>
<author><name sortKey="Marschollek, M" uniqKey="Marschollek M">M. Marschollek</name>
</author>
<author><name sortKey="Haux, R" uniqKey="Haux R">R. Haux</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Lotters, J" uniqKey="Lotters J">J. Lötters</name>
</author>
<author><name sortKey="Schipper, J" uniqKey="Schipper J">J. Schipper</name>
</author>
<author><name sortKey="Veltink, P" uniqKey="Veltink P">P. Veltink</name>
</author>
<author><name sortKey="Olthuis, W" uniqKey="Olthuis W">W. Olthuis</name>
</author>
<author><name sortKey="Bergveld, P" uniqKey="Bergveld P">P. Bergveld</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Camps, F" uniqKey="Camps F">F. Camps</name>
</author>
<author><name sortKey="Harasse, S" uniqKey="Harasse S">S. Harasse</name>
</author>
<author><name sortKey="Monin, A" uniqKey="Monin A">A. Monin</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Timo, P" uniqKey="Timo P">P. Timo</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Jurman, D" uniqKey="Jurman D">D. Jurman</name>
</author>
<author><name sortKey="Jankovec, M" uniqKey="Jankovec M">M. Jankovec</name>
</author>
<author><name sortKey="Kamnik, R" uniqKey="Kamnik R">R. Kamnik</name>
</author>
<author><name sortKey="Topic, M" uniqKey="Topic M">M. Topic</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Bonnet, S" uniqKey="Bonnet S">S. Bonnet</name>
</author>
<author><name sortKey="Bassompierre, C" uniqKey="Bassompierre C">C. Bassompierre</name>
</author>
<author><name sortKey="Godin, C" uniqKey="Godin C">C. Godin</name>
</author>
<author><name sortKey="Lesecq, S" uniqKey="Lesecq S">S. Lesecq</name>
</author>
<author><name sortKey="Barraud, A" uniqKey="Barraud A">A. Barraud</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Todd, M J" uniqKey="Todd M">M.J. Todd</name>
</author>
<author><name sortKey="Yildirim, E A" uniqKey="Yildirim E">E.A. Yildirim</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Barber, C B" uniqKey="Barber C">C.B. Barber</name>
</author>
<author><name sortKey="Dobkin, D P" uniqKey="Dobkin D">D.P. Dobkin</name>
</author>
<author><name sortKey="Huhdanpaa, H" uniqKey="Huhdanpaa H">H. Huhdanpaa</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct><analytic><author><name sortKey="Lee, C C" uniqKey="Lee C">C.C. Lee</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Cara, A" uniqKey="Cara A">A. Cara</name>
</author>
<author><name sortKey="Pomares, H" uniqKey="Pomares H">H. Pomares</name>
</author>
<author><name sortKey="Rojas, I" uniqKey="Rojas I">I. Rojas</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Carmona, A B C" uniqKey="Carmona A">A.B.C. Carmona</name>
</author>
</analytic>
</biblStruct>
<biblStruct><analytic><author><name sortKey="Pomares, H" uniqKey="Pomares H">H. Pomares</name>
</author>
<author><name sortKey="Rojas, I" uniqKey="Rojas I">I. Rojas</name>
</author>
<author><name sortKey="Ortega, J" uniqKey="Ortega J">J. Ortega</name>
</author>
<author><name sortKey="Gonzalez, J" uniqKey="Gonzalez J">J. Gonzalez</name>
</author>
<author><name sortKey="Prieto, A" uniqKey="Prieto A">A. Prieto</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct></biblStruct>
<biblStruct><analytic><author><name sortKey="Olivares, A" uniqKey="Olivares A">A. Olivares</name>
</author>
<author><name sortKey="Olivares, G" uniqKey="Olivares G">G. Olivares</name>
</author>
<author><name sortKey="Mula, F" uniqKey="Mula F">F. Mula</name>
</author>
<author><name sortKey="G Rriz, J" uniqKey="G Rriz J">J. Górriz</name>
</author>
<author><name sortKey="Ramirez, J" uniqKey="Ramirez J">J. Ramírez</name>
</author>
</analytic>
</biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="review-article"><pmc-dir>properties open_access</pmc-dir>
<front><journal-meta><journal-id journal-id-type="nlm-ta">Sensors (Basel)</journal-id>
<journal-id journal-id-type="iso-abbrev">Sensors (Basel)</journal-id>
<journal-title-group><journal-title>Sensors (Basel, Switzerland)</journal-title>
</journal-title-group>
<issn pub-type="epub">1424-8220</issn>
<publisher><publisher-name>MDPI</publisher-name>
</publisher>
</journal-meta>
<article-meta><article-id pub-id-type="pmid">24013490</article-id>
<article-id pub-id-type="pmc">3821311</article-id>
<article-id pub-id-type="doi">10.3390/s130911797</article-id>
<article-id pub-id-type="publisher-id">sensors-13-11797</article-id>
<article-categories><subj-group subj-group-type="heading"><subject>Article</subject>
</subj-group>
</article-categories>
<title-group><article-title>Automatic Determination of Validity of Input Data Used in Ellipsoid Fitting MARG Calibration Algorithms</article-title>
</title-group>
<contrib-group><contrib contrib-type="author"><name><surname>Olivares</surname>
<given-names>Alberto</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-13-11797"><sup>1</sup>
</xref>
<xref rid="c1-sensors-13-11797" ref-type="corresp"><sup>*</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Ruiz-Garcia</surname>
<given-names>Gonzalo</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-13-11797"><sup>2</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Olivares</surname>
<given-names>Gonzalo</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-13-11797"><sup>2</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Górriz</surname>
<given-names>Juan Manuel</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-13-11797"><sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author"><name><surname>Ramirez</surname>
<given-names>Javier</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-13-11797"><sup>1</sup>
</xref>
</contrib>
</contrib-group>
<aff id="af1-sensors-13-11797"><label>1</label>
Department of Signal Theory, Telematics and Communications, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gorriz@ugr.es</email>
(J.M.G.);<email>javierrp@ugr.es</email>
(J.R.)</aff>
<aff id="af2-sensors-13-11797"><label>2</label>
Department of Computer Architecture and Computer Technology, CITIC-University of Granada, Calle Periodista Rafael Gómez Montero, 2, E-18071 Granada, Spain; E-Mails:<email>gruiz@ugr.es</email>
(G.R.-G.);<email>gonzalo@ugr.es</email>
(G.O.)</aff>
<author-notes><corresp id="c1-sensors-13-11797"><label>*</label>
Author to whom correspondence should be addressed; E-Mail: <email>aolivares@ugr.es</email>
; Tel.: +34-958-241-777.</corresp>
</author-notes>
<pub-date pub-type="collection"><month>9</month>
<year>2013</year>
</pub-date>
<pub-date pub-type="epub"><day>05</day>
<month>9</month>
<year>2013</year>
</pub-date>
<volume>13</volume>
<issue>9</issue>
<fpage>11797</fpage>
<lpage>11817</lpage>
<history><date date-type="received"><day>29</day>
<month>7</month>
<year>2013</year>
</date>
<date date-type="rev-recd"><day>29</day>
<month>8</month>
<year>2013</year>
</date>
<date date-type="accepted"><day>03</day>
<month>9</month>
<year>2013</year>
</date>
</history>
<permissions><copyright-statement>© 2013 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2013</copyright-year>
<license><license-p><pmc-comment>CREATIVE COMMONS</pmc-comment>
This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</ext-link>
).</license-p>
</license>
</permissions>
<abstract><p>Ellipsoid fitting algorithms are widely used to calibrate Magnetic Angular Rate and Gravity (MARG) sensors. These algorithms are based on the minimization of an error function that optimizes the parameters of a mathematical sensor model that is subsequently applied to calibrate the raw data. The convergence of this kind of algorithms to a correct solution is very sensitive to input data. Input calibration datasets must be properly distributed in space so data can be accurately fitted to the theoretical ellipsoid model. Gathering a well distributed set is not an easy task as it is difficult for the operator carrying out the maneuvers to keep a visual record of all the positions that have already been covered, as well as the remaining ones. It would be then desirable to have a system that gives feedback to the operator when the dataset is ready, or to enable the calibration process in auto-calibrated systems. In this work, we propose two different algorithms that analyze the goodness of the distributions by computing four different indicators. The first approach is based on a thresholding algorithm that uses only one indicator as its input and the second one is based on a Fuzzy Logic System (FLS) that estimates the calibration error for a given calibration set using a weighted combination of two indicators. Very accurate classification between valid and invalid datasets is achieved with average Area Under Curve (AUC) of up to 0.98.</p>
</abstract>
<kwd-group><kwd>calibration</kwd>
<kwd>accelerometer</kwd>
<kwd>magnetometer</kwd>
<kwd>MARG</kwd>
<kwd>MEMS</kwd>
<kwd>automatic</kwd>
<kwd>validation</kwd>
<kwd>fuzzy</kwd>
<kwd>FLS</kwd>
<kwd>thresholding</kwd>
</kwd-group>
</article-meta>
</front>
<body><sec><label>1.</label>
<title>Introduction</title>
<p>The use of Microelectromechanical (MEMS) Magnetic, Angular Rate and Gravity (MARG) sensors has exponentially increased during recent years, leading to an estimated $3, 500M business in 2013 and a predicted $9, 000M business by 2017 [<xref rid="b1-sensors-13-11797" ref-type="bibr">1</xref>
]. Many commercial electronic devices such as smartphones, tablets, GPS navigators, watches and videogame peripherals include accelerometers and magnetometers that are used to estimate the orientation of a body in space [<xref rid="b2-sensors-13-11797" ref-type="bibr">2</xref>
–<xref rid="b4-sensors-13-11797" ref-type="bibr">4</xref>
], compute trajectories [<xref rid="b5-sensors-13-11797" ref-type="bibr">5</xref>
–<xref rid="b7-sensors-13-11797" ref-type="bibr">7</xref>
], analyze motion [<xref rid="b8-sensors-13-11797" ref-type="bibr">8</xref>
–<xref rid="b10-sensors-13-11797" ref-type="bibr">10</xref>
], and other innovative measurement applications such as 3D scanning [<xref rid="b11-sensors-13-11797" ref-type="bibr">11</xref>
].</p>
<p>MEMS MARG sensors need to be calibrated in order to transform measured raw data into meaningful physical units and/or to compensate for a series of undesired effects. Calibration is, thus, a very important step to improve the accuracy of the measurements and, consequently, to increase the quality and efficiency of the system in which the sensors are embedded. A large amount of works regarding accelerometer and magnetometer calibration algorithms has been published over the last decade. Some representative examples can be found in [<xref rid="b12-sensors-13-11797" ref-type="bibr">12</xref>
–<xref rid="b20-sensors-13-11797" ref-type="bibr">20</xref>
].</p>
<p>Most calibration algorithms are based on 3-D ellipsoid fitting methods, which minimize a cost function to estimate the value of a set of calibration parameters that define the sensors model [<xref rid="b21-sensors-13-11797" ref-type="bibr">21</xref>
]. Once the calibration parameters are estimated, they are substituted in the general equation that models the sensor to obtain the calibrated measurement. Every calibration algorithm requires the operator to carry out a set of maneuvers to gather the necessary data for the minimization process. These maneuvers usually require placing the sensor in multiple random positions in the space trying to cover the locus of a sphere, which has a radius equal to the norm of the physical magnitude being used as a reference (Earth's magnetic and gravitational fields or a constant angular speed). The resulting 3D representation of the gathered points is shaped as an ellipsoid since the intrinsic errors in the sensor's output distort the ideal sphere.</p>
<p>Covering all the positions to define a perfectly populated ellipsoid is not a straightforward task as it is complicated to keep a visual record of all the positions that have already been swept. As a consequence, it is usual to gather sets of points that are ill-distributed and lack important parts of the ellipsoid.</p>
<p>On the other hand, some navigation systems recalibrate their sensors periodically. If the vehicle in which the navigation system is installed has not covered enough positions relative to a reference frame, then the data that are continuously being gathered can lead to an erroneous calibration. Lotters <italic>et al.</italic>
[<xref rid="b22-sensors-13-11797" ref-type="bibr">22</xref>
] presented an in-use calibration algorithm, which periodically recalibrated an Inertial Measurement Unit (IMU) attached to a human body. It lacked from a mechanism of validation of the distribution of the data being gathered so as the authors acknowledge, if a certain number of positions of the body had not been covered, the resulting calibration error was very high. <xref rid="f1-sensors-13-11797" ref-type="fig">Figure 1</xref>
shows a properly distributed set of magnetometer data, and an incomplete set resulting from an erroneous performance of the calibration maneuvers.</p>
<p>Ill-distributed calibration sets result in a less defined ellipsoid which, in turn, results in a suboptimal set of calibration parameters estimated by the ellipsoid fitting algorithm [<xref rid="b22-sensors-13-11797" ref-type="bibr">22</xref>
]. It is then very important to use properly distributed calibration sets to ensure the correct estimation of the calibration parameters and an efficient calibration process of MARG sensors. Therefore, it is also desirable to have a system that constantly analyzes the distribution of the data that will be used to recalibrate the parameters and only enable the calibration process when a low error is guaranteed.</p>
<p>Camps <italic>et al.</italic>
[<xref rid="b23-sensors-13-11797" ref-type="bibr">23</xref>
] proposed a solution to help the operator carrying out the calibration maneuvers. They developed a data visualization tool, which depicted in real time the value of the spherical coordinates <italic>ϕ</italic>
and <italic>θ</italic>
as it is depicted in the right column of <xref rid="f1-sensors-13-11797" ref-type="fig">Figure 1</xref>
. This way, the operator has instant feedback on which areas have not yet been covered and can, therefore, place the sensor in the remaining positions.</p>
<p>This is a simple and valid solution if there is a base station to which the sensor sends the calibration data in real time. However, what happens if we want to gather in-field calibration data and we do not have any equipment to act as a base station? What happens if IMU, or the development board containing the sensors, stores the data locally and does not have the ability to transfer data in real time? In these two cases, the feedback visualization tool would be of no help.</p>
<p>A possible solution is to develop an automatic algorithm that is able to determine the validity of the calibration dataset by analyzing the spatial distribution of the data while it is being gathered. To do so, we will need to identify a series of indicators that can link the spatial distribution of input calibration data to the resultant calibration error that would be obtained if such a dataset was provided to the calibration algorithm. The calibration error can be defined in many ways, e.g., the error of the estimated calibration parameters with respect to the optimal ones, or the error of the norm of the calibrated measured physical magnitude with respect to the norm of a known reference. In this work, we opted to use the latter definition as it will be further detailed in the experiments section.</p>
<sec><label>1.1.</label>
<title>Objectives</title>
<p>The main objectives of this work are listed below:
<list list-type="bullet"><list-item><p>Find a series of indicators that contain information about the spatial distribution of the input calibration data of MARG sensors.</p>
</list-item>
<list-item><p>Develop an automatic system that uses one or a combination of various indicators to validate the calibration dataset and ensure a proper calibration process.</p>
</list-item>
</list>
</p>
</sec>
<sec><label>1.2.</label>
<title>Paper Structure</title>
<p>The paper is structured as follows. Section 2 includes the basics of ellipsoid-fitting calibration algorithms as well as models used to describe the output of MARG sensors. Section 3 presents the selection of indicators and the proposal of two algorithms, one using a single input and based on a simple threshold comparison, and another one using a multiple input and based on a fuzzy system. Section 4 includes all the experiments that were carried out to test the proposed approaches and a selection of the most significant results. Section 5 contains a discussion of the obtained results and the validity of the developed system. Finally, conclusions are drawn in Section 6.</p>
</sec>
</sec>
<sec><label>2.</label>
<title>Ellipsoid-Fitting Calibration Algorithms</title>
<p>Ellipsoid fitting algorithms are a recurring solution [<xref rid="b24-sensors-13-11797" ref-type="bibr">24</xref>
–<xref rid="b26-sensors-13-11797" ref-type="bibr">26</xref>
] to calibrate MARG sensors. These algorithms are applied to estimate a set of parameters that model the output of the sensor and its intrinsic errors. A simple and commonly used model that maps the raw output of a triaxial MARG sensor to the actual value of the measured physical magnitude (acceleration, magnetic field or angular rate) is as follows,
<disp-formula id="FD1"><label>(1)</label>
<mml:math id="mm1"><mml:mrow><mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</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:mn>0</mml:mn>
<mml:mtd><mml:mrow><mml:msub><mml:mi>k</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</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:msub><mml:mi>k</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>o</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>o</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>o</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>v<sub>i</sub>
</italic>
represents the raw sensor output, <italic>k<sub>i</sub>
</italic>
is the scale factor (or sensor gain), <italic>u<sub>i</sub>
</italic>
is the value of the physical magnitude that we wish to estimate and <italic>o<sub>i</sub>
</italic>
is the offset of axis <italic>i</italic>
= {<italic>x</italic>
, <italic>y</italic>
, <italic>z</italic>
}. This equation can be expressed in a more compact way using matrix notation,
<disp-formula id="FD2"><label>(2)</label>
<mml:math id="mm2"><mml:mrow><mml:mrow><mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">Ku</mml:mtext>
<mml:mo>+</mml:mo>
<mml:mtext mathvariant="bold">o</mml:mtext>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>This model can be complicated by adding other parameters that model undesired effects such as the orthogonality error between sensor axes, <italic>i.e.</italic>
, the non-orthogonality between the sensor triplet, or the misalignment error between the axes of the sensor and the reference axes of the boar, and/or the box in which it is mounted.</p>
<p>The following model proposed by [<xref rid="b25-sensors-13-11797" ref-type="bibr">25</xref>
] includes the orthogonality and misalignment errors,
<disp-formula id="FD3"><label>(3)</label>
<mml:math id="mm3"><mml:mrow><mml:mrow><mml:mtext>v</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mtext>KTMu</mml:mtext>
<mml:mo>+</mml:mo>
<mml:mtext>o</mml:mtext>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where v, K and o, u are again the raw measurements vector, the scale factor matrix, the offset vector and the actual measurement value, respectively. T and M are the non-orthogonality matrix and misalignment matrix and can be expressed as follows,
<disp-formula id="FD4"><label>(4)</label>
<mml:math id="mm4"><mml:mrow><mml:msub><mml:mtext>T</mml:mtext>
<mml:mi>k</mml:mi>
</mml:msub>
<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:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>α</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mn>1</mml:mn>
</mml:mtd>
<mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>β</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>γ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>α</italic>
represents the displacement angle of Y' axis with respect to X axis, <italic>β</italic>
the displacement angle of Z' axis with respect to X axis and <italic>γ</italic>
the displacement angle of Z' axis with respect to Y axis. In a nutshell, the orthogonalization matrix T<sub>k</sub>
transforms the vector expressed in the orthogonal sensor reference frame <italic>XY Z</italic>
into the vector expressed in the non-orthogonal sensor reference frame XYZ'. The misalignment matrix M<italic><sub>k</sub>
</italic>
is a rotation matrix, composed of three individual axis rotation matrices, which converts the frame X<italic><sub>c</sub>
</italic>
Y<italic><sub>c</sub>
</italic>
Z<italic><sub>c</sub>
</italic>
in a rotated frame X<italic><sub>p</sub>
</italic>
Y<italic><sub>p</sub>
</italic>
Z<italic><sub>p</sub>
</italic>
. Both effects are depicted in <xref rid="f2-sensors-13-11797" ref-type="fig">Figure 2</xref>
.</p>
<p><disp-formula id="FD5"><label>(5)</label>
<mml:math id="mm5"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mtext>M</mml:mtext>
<mml:mtext>K</mml:mtext>
</mml:msub>
<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:mtr>
<mml:mtr><mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>−</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mrow><mml:mo>[</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>−</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</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:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mrow><mml:mo>[</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>−</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</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:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mtext>M</mml:mtext>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow><mml:mo>[</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:mi>θ</mml:mi>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>−</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo>sin</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ψ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mo>cos</mml:mo>
<mml:msub><mml:mi>ϕ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
<mml:mo>cos</mml:mo>
<mml:msub><mml:mi>θ</mml:mi>
<mml:mtext>k</mml:mtext>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>ϕ</italic>
<sub>k</sub>
, <italic>θ</italic>
<sub>k</sub>
and <italic>ψ</italic>
<sub>k</sub>
are the rotation angles around X', Y' and Z' axes respectively.</p>
<p>Now, knowing that the norm of the actual measurement u is constant under stable magnetic conditions (in the case of the magnetometer), quasi-static conditions (in the case of the accelerometer), constant turning rate (in the case of the gyroscope), we obtain,
<disp-formula id="FD6"><label>(6)</label>
<mml:math id="mm6"><mml:mrow><mml:msup><mml:mi>U</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup><mml:mi>u</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup><mml:mi>u</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup><mml:mi>u</mml:mi>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>U</italic>
is the norm of the magnetic, angular rate or acceleration reference. Substituting <xref rid="FD1" ref-type="disp-formula">Equation (1)</xref>
in <xref rid="FD6" ref-type="disp-formula">Equation (6)</xref>
, we get
<disp-formula id="FD7"><label>(7)</label>
<mml:math id="mm7"><mml:mrow><mml:msup><mml:mi>U</mml:mi>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub><mml:mi>o</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>k</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub><mml:mi>o</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>k</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mi>v</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub><mml:mi>o</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>k</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</disp-formula>
which happens to be the equation of an ellipsoid with center o + epsilon and semiaxes <italic>k<sub>x</sub>
</italic>
, <italic>k<sub>y</sub>
</italic>
and <italic>k<sub>z</sub>
</italic>
.</p>
<p>The goal of ellipsoid-fitting algorithms is to estimate the set of parameters defined in the sensor model in order to compute the value of the calibrated measurement in <xref rid="FD1" ref-type="disp-formula">Equation (1)</xref>
or <xref rid="FD3" ref-type="disp-formula">(3)</xref>
. The estimation of the parameters <italic>p</italic>
= (<italic>k<sub>x</sub>
</italic>
, <italic>k<sub>y</sub>
</italic>
, <italic>k<sub>z</sub>
</italic>
, <italic>o<sub>x</sub>
</italic>
, <italic>o<sub>y</sub>
</italic>
, <italic>o<sub>z</sub>
</italic>
, …) is usually done by minimizing the mean square error <italic>e</italic>
(<bold>p</bold>
) between the norm of the estimated calibrated measurement û and the norm of the actual measurement <bold>u</bold>
,
<disp-formula id="FD8"><label>(8)</label>
<mml:math id="mm8"><mml:mrow><mml:mi>e</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">p</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac><mml:mn>1</mml:mn>
<mml:mi>N</mml:mi>
</mml:mfrac>
<mml:munderover><mml:mo>∑</mml:mo>
<mml:mrow><mml:mi>n</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow><mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo>
<mml:mrow><mml:mo>‖</mml:mo>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mo>‖</mml:mo>
</mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow><mml:mo>‖</mml:mo>
<mml:mrow><mml:mrow><mml:mover accent="true"><mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:mo>(</mml:mo>
<mml:mtext mathvariant="bold">p</mml:mtext>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>‖</mml:mo>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where N is the total number of measurements used for the calibration process (which will we later refer as to the “input calibration dataset”). The norm of the actual measurement ‖<bold>u</bold>
‖ is a known magnitude and takes the following value depending on the sensor being calibrated:
<list list-type="bullet"><list-item><p>Magnetometer: <bold>u</bold>
is equal to the norm of the Earth's magnetic field in the location in which the sensor is being calibrated.</p>
</list-item>
<list-item><p>Accelerometer: <bold>u</bold>
is equal to the norm of the Earth's gravitational field in the location in which the sensor is being calibrated. This value is usually normalized to 1 if acceleration is measured in g units.</p>
</list-item>
<list-item><p>Gyroscope: <bold>u</bold>
is equal to the value of a constant angular rate to which the sensor is subject, e.g., using a rate table.</p>
</list-item>
</list>
</p>
<p>The minimization process can be carried out using linear or non-linear optimization algorithms. Another way to estimate the parameters in <xref rid="FD7" ref-type="disp-formula">Equation (7)</xref>
is to use an enclosing ellipsoid algorithm such as the one in [<xref rid="b27-sensors-13-11797" ref-type="bibr">27</xref>
].</p>
</sec>
<sec><label>3.</label>
<title>Validation Algorithms</title>
<p>Now that we have briefly revised the basic principles of MARG sensor modeling and ellipsoid-fitting calibration algorithms, we can proceed to present the core of our work.</p>
<sec><label>3.1.</label>
<title>Selection of Indicators</title>
<p>As aforementioned, the main goal of our work is to develop an algorithm that links the spatial distribution of input calibration data to the error obtained after the calibration process. Therefore, we need to analyze the calibration input data to obtain a reliable verdict of the suitability of their spatial distribution. To do so, we need to select a set of indicators that contain relevant information about the spatial distribution of data. We have selected four parameters that we originally thought would provide useful information. The chosen indicators are:
<list list-type="bullet"><list-item><p>Indicator A: Sum of the difference of the third quartile (Q3) and the first quartile (Q1) of spherical coordinates <italic>ϕ</italic>
and <italic>θ</italic>
. A large difference between Q3 and Q1 indicates that data cover a wider region of space and, thus, are not concentrated in a limited region. If the values taken by both <italic>ϕ</italic>
and <italic>θ</italic>
are homogeneously distributed within [−180°, 180°] and [−90°, 90°] respectively, the value of the indicator will take a high value in the [0°, 540°] range. Therefore, indicator A can be computed as follows,
<disp-formula id="FD9"><label>(9)</label>
<mml:math id="mm9"><mml:mrow><mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>A</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>Q</mml:mi>
<mml:msub><mml:mn>3</mml:mn>
<mml:mi>θ</mml:mi>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mi>Q</mml:mi>
<mml:msub><mml:mn>1</mml:mn>
<mml:mi>θ</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>Q</mml:mi>
<mml:msub><mml:mn>3</mml:mn>
<mml:mi>ϕ</mml:mi>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mi>Q</mml:mi>
<mml:msub><mml:mn>1</mml:mn>
<mml:mi>ϕ</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
</list-item>
<list-item><p>Indicator B: Sum of the number of empty bins in the histograms of spherical coordinates <italic>ϕ</italic>
and <italic>θ</italic>
. Based on the premise of the work carried out by [<xref rid="b23-sensors-13-11797" ref-type="bibr">23</xref>
], we considered that the analysis of the distribution of the histograms could be a significant indicator. Ideally, an optimal calibration data distribution should contain a large number of well distributed points. Then, the associated <italic>ϕ</italic>
and <italic>θ</italic>
histograms should contain a reduced number of empty bins. Indicator B can be expressed as,
<disp-formula id="FD10"><label>(10)</label>
<mml:math id="mm10"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>B</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>#</mml:mo>
<mml:mrow><mml:mo stretchy="false">{</mml:mo>
<mml:mrow><mml:mrow><mml:mrow><mml:msub><mml:mi>B</mml:mi>
<mml:mrow><mml:msub><mml:mi>θ</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow><mml:mo>#</mml:mo>
<mml:msub><mml:mi>B</mml:mi>
<mml:mrow><mml:msub><mml:mi>θ</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mo>#</mml:mo>
<mml:mrow><mml:mo stretchy="false">{</mml:mo>
<mml:mrow><mml:mrow><mml:mrow><mml:msub><mml:mi>B</mml:mi>
<mml:mrow><mml:msub><mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow><mml:mo>#</mml:mo>
<mml:msub><mml:mi>B</mml:mi>
<mml:mrow><mml:msub><mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:math>
</disp-formula>
where # is the cardinality of a set (number of elements of the set), <italic>B<sub>θ<sub>i</sub>
</sub>
</italic>
and <italic>B<sub>ϕ<sub>i</sub>
</sub>
</italic>
are the elements of the sets <italic>B<sub>θ</sub>
</italic>
and <italic>B<sub>ϕ</sub>
</italic>
composed of the histogram bins of <italic>θ</italic>
and <italic>ϕ</italic>
respectively, and <italic>N</italic>
is the total number of histogram bins.</p>
</list-item>
<list-item><p>Indicator C: Sum of the Euclidean distance between the maximum and minimum values of each of the gathered data components, <italic>i.e.</italic>
, the sum of the lengths of axes of the ellipsoid defined by the gathered data. Indicator C is computed using,
<disp-formula id="FD11"><label>(11)</label>
<mml:math id="mm11"><mml:mrow><mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>max</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>max</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo>max</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mi>g</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>g<sub>k</sub>
</italic>
is the set of values gathered by the sensor in axis <italic>k</italic>
= {<italic>x</italic>
, <italic>y</italic>
, <italic>z</italic>
} and defining the set <italic>G</italic>
.</p>
</list-item>
<list-item><p>Indicator D: Volume of the convex hull defined by the dataset. The convex hull of a set of G points in the Euclidean space is defined as the smallest convex set that contains G. Therefore, we will be computing the volume contained in the smallest quadric surface defined by the points in the dataset. Indicator D is defined as,
<disp-formula id="FD12"><label>(12)</label>
<mml:math id="mm12"><mml:mrow><mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>V</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="italic">Qhull</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>G</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>G</italic>
is the set defined by the gathered points, <italic>Qhull</italic>
stands for the Quick Hull algorithm developed by Barber <italic>et al.</italic>
[<xref rid="b28-sensors-13-11797" ref-type="bibr">28</xref>
], and V stands for the volume. The Quick Hull algorithm is available for many programming platforms and languages such as C++, MATLAB, R, GNU Octave, among others. Practical implementation information can be found in [<xref rid="b29-sensors-13-11797" ref-type="bibr">29</xref>
].</p>
</list-item>
</list>
</p>
</sec>
<sec><label>3.2.</label>
<title>Single-Indicator Thresholding Approach</title>
<p>The first approach that comes to mind is to individually use each one of the selected indicators to check their relation to the calibration error. This approach consists of computing the indicator that is best linked to the calibration error and apply a thresholding algorithm. The thresholding algorithm compares the value of the selected indicator with an empirically predefined threshold and will only validate the calibration dataset if it exceeds it (in the case of indicators A, C and D) or it is under it (indicator B).</p>
<p><disp-formula id="FD13"><label>(13)</label>
<mml:math id="mm13"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>IF</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>≥</mml:mo>
<mml:msub><mml:mi>α</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>;</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mtext>THEN</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mi>ς</mml:mi>
<mml:mrow><mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:math>
</disp-formula>
where I<italic><sub>i</sub>
</italic>
is the dataset indicator for <italic>i</italic>
= {<italic>A</italic>
, <italic>B</italic>
, <italic>C</italic>
, <italic>D</italic>
}, <italic>α<sub>i</sub>
</italic>
is the predefined threshold associated to that indicator and <italic>ζ</italic>
is the validation flag (<italic>ζ</italic>
= 1 if dataset is valid, <italic>ζ</italic>
= 0 if not).</p>
<p>A series of experiments are needed to check the strength of the relation of each one of the proposed indicators with the calibration error and their suitability as validators of the goodness of the calibration dataset. In addition, such experiments will also reveal the optimal value of the predefined thresholds. Experiments carried out with this purpose are later explained in Section 4.</p>
</sec>
<sec><label>3.3.</label>
<title>Multiple-Indicator Fuzzy Approach</title>
<p>In general, indicators extracted from each set of calibration points are not directly related to the error value, <italic>i.e.</italic>
, there is no functional relation between the calibration error and the indicators' values. This means that two different sets of calibration measured points, which may have very similar values for all four geometrical and statistical indicators defined in previous sections, may not have associated error values close to each other. Moreover, it can occur that two calibration sets deriving in similar calibration errors have significantly different indicator values. Despite this non-functional relation between the value of the indicators and the calibration error, it is intuitive and reasonable to think that there exists a fuzzy relation between them. For example, as it will be later demonstrated, a dataset having a large value for the volume comprised by the convex hull and a large distance between components would lead to a low calibration error. The fuzzy relationship between these two indicators (convex hull and distance between components) could be stated as follows,
<disp-formula id="FD14"><label>(14)</label>
<mml:math id="mm14"><mml:mrow><mml:mtext>IF</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is HIGH AND</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is HIGH THEN calibration error IS LOW</mml:mtext>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
consequently,
<disp-formula id="FD15"><label>(15)</label>
<mml:math id="mm15"><mml:mrow><mml:mtext>IF</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is LOW AND</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mtext>I</mml:mtext>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is LOW THEN calibration error IS HIGH</mml:mtext>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Rules like <xref rid="FD14" ref-type="disp-formula">Equations (14)</xref>
and <xref rid="FD15" ref-type="disp-formula">(15)</xref>
can be defined combining all different indicators and defining a complete set of rules. So, if we consider a set of M indicators as the input vector, the calibration error as the scalar output and K sets of calibration points, it is possible to propose a multiple-input single-output function estimation problem from a given set of K input-output pairs.</p>
<p>More precisely, for the calibration set <italic>k</italic>
, <italic>k</italic>
= 1, …, <italic>K</italic>
, let us write each input-output pair as (<italic>x⃗<sup>k</sup>
</italic>
; <italic>z<sup>k</sup>
</italic>
), where
<inline-formula><mml:math id="mm16"><mml:mrow><mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msubsup><mml:mi>x</mml:mi>
<mml:mn>1</mml:mn>
<mml:mi>k</mml:mi>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup><mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
<mml:mi>k</mml:mi>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup><mml:mi>x</mml:mi>
<mml:mi>M</mml:mi>
<mml:mi>k</mml:mi>
</mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is the input vector comprised by the <italic>M</italic>
values of the indicators and <italic>z<sup>k</sup>
</italic>
is the calibration error. In this work we opted to use a zero-order Takagi-Sugeno-Kang (TSK) Fuzzy Logic System (FLS), defined by a complete set of rules [<xref rid="b30-sensors-13-11797" ref-type="bibr">30</xref>
] as,
<disp-formula id="FD16"><label>(16)</label>
<mml:math id="mm17"><mml:mrow><mml:mtext>IF</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mi>x</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msubsup><mml:mi>X</mml:mi>
<mml:mn>1</mml:mn>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>AND</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msubsup><mml:mi>X</mml:mi>
<mml:mn>2</mml:mn>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>…</mml:mo>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>AND</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msub><mml:mi>x</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>is</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>M</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mtext>THEN</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mi>z</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub><mml:mi>R</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</disp-formula>
where
<inline-formula><mml:math id="mm18"><mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:mrow><mml:mo>{</mml:mo>
<mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mn>1</mml:mn>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
are the <italic>n<sub>m</sub>
</italic>
fuzzy sets of input <italic>m</italic>
, and
<inline-formula><mml:math id="mm19"><mml:mrow><mml:msub><mml:mi>R</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
is the <italic>i</italic>
<sub>1</sub>
<italic>i</italic>
<sub>2</sub>
…<italic>i<sub>M</sub>
</italic>
scalar consequent of the rule. Choosing the product as the t-norm operator, and denoting
<inline-formula><mml:math id="mm20"><mml:mrow><mml:msub><mml:mi>μ</mml:mi>
<mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
as the membership function of input <italic>m</italic>
to the set
<inline-formula><mml:math id="mm21"><mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
, the FLS output can be expressed as follows:
<disp-formula id="FD17"><label>(17)</label>
<mml:math id="mm22"><mml:mrow><mml:mover accent="true"><mml:mi>F</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac><mml:mrow><mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>…</mml:mo>
<mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:msub><mml:mi>R</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msubsup><mml:mo>∏</mml:mo>
<mml:mrow><mml:mi>m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>M</mml:mi>
</mml:msubsup>
<mml:mrow><mml:msub><mml:mi>μ</mml:mi>
<mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow><mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>…</mml:mo>
<mml:msubsup><mml:mo>∑</mml:mo>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>n</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:msubsup><mml:mo>∏</mml:mo>
<mml:mrow><mml:mi>m</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>M</mml:mi>
</mml:msubsup>
<mml:mrow><mml:msub><mml:mi>μ</mml:mi>
<mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:msubsup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>m</mml:mi>
<mml:mi>k</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Defining such a fuzzy system would require the following: choosing the number of inputs (M); choosing the number of Membership Functions (MFs) as well as their type and parameters; and selecting the scalar consequents for each rule. Although it is possible to perform all this design manually choosing the value of each parameter, it would be very time expensive, suboptimal and strongly influenced by the designer's subjective criterion. Thus, to avoid these issues, an automatic approach has been selected in this work in order to create an adaptive and nearly optimum FLS.</p>
<p>First of all, we have decided to use triangular MFs comprising a complete partition in the input space [<xref rid="b30-sensors-13-11797" ref-type="bibr">30</xref>
]. This is a typical choice when designing fuzzy systems [<xref rid="b30-sensors-13-11797" ref-type="bibr">30</xref>
-<xref rid="b32-sensors-13-11797" ref-type="bibr">32</xref>
] as it has two main advantages: on the one hand, it avoids the existence of input points that do not activate any rule and cause the FLS to be ill-defined by making the denominator in <xref rid="FD17" ref-type="disp-formula">Equation (17)</xref>
equal to zero; on the other hand, such a partition makes this denominator always equal to one, which results in a much computationally simpler FLS.</p>
<p>The remaining design decisions are those related to the MFs parameters, <italic>i.e.</italic>
, the location of the centers, and the scalar consequents of each rule. As the system will be adaptive, the MFs' centers will change their position, so it is only necessary to specify their initial location. All MFs will shape an equidistant and complete triangular partition. This way, the first and last MFs' centers will coincide with the ends of the input intervals and they will not be selectable parameters as their position is fixed. Finally, the matrix of rule consequents will be initialized to all zeros, and it will change its values in each iteration to reduce the training error, <italic>ε</italic>
<sub>train</sub>
, defined in the following way,
<disp-formula id="FD18"><label>(18)</label>
<mml:math id="mm23"><mml:mrow><mml:msub><mml:mi>ε</mml:mi>
<mml:mrow><mml:mtext>train</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub><mml:mi>ε</mml:mi>
<mml:mrow><mml:mtext>calib</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:mover accent="true"><mml:mi>F</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>∈</italic>
<sub>calib</sub>
is the actual calibration error that we wish to estimate, which is known during the training process, and <italic>F̃</italic>
is the output of the FLS computed using <xref rid="FD17" ref-type="disp-formula">Equation (17)</xref>
.</p>
<p>In general terms, the adaptive strategy adopted in this work is the same as in [<xref rid="b32-sensors-13-11797" ref-type="bibr">32</xref>
,<xref rid="b33-sensors-13-11797" ref-type="bibr">33</xref>
]. The consequents matrix <italic>R</italic>
is adapted in each iteration following a reward/penalty policy, which changes the values of the consequents of those rules that have a higher responsibility of the present error; whereas the MFs' centers vary according to a gradient descent algorithm, modified by a saturation function.</p>
<p>More precisely, the employed error function is as follows,
<disp-formula id="FD19"><label>(19)</label>
<mml:math id="mm24"><mml:mrow><mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:munderover><mml:mtext>∑</mml:mtext>
<mml:mrow><mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>K</mml:mi>
</mml:munderover>
<mml:mrow><mml:msup><mml:mrow><mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mi>F</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mover accent="true"><mml:mi>F</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo>;</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
which shows the dependency of <italic>J</italic>
on the matrix <italic>R</italic>
and the MFs' centers, noted
<inline-formula><mml:math id="mm25"><mml:mrow><mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
to indicate the center of the <italic>i<sub>m</sub>
</italic>
triangular MF of input <italic>m</italic>
, which form <italic>C</italic>
.</p>
<p>If we consider the quantity <italic>F</italic>
(<italic>x⃗<sup>k</sup>
</italic>
)− <italic>F̃</italic>
(<italic>x⃗<sup>k</sup>
</italic>
; <italic>R</italic>
, <italic>C</italic>
), it must be noted that, if positive, the output of the FLS should have been greater, whereas if negative, it should have been lower. Therefore, this quantity indicates the magnitude and direction (increase or decrease) that should be applied to each of the consequents of the rules that are responsible for the present value. The rules are not all rewarded/penalized in the same way; but the more active a rule becomes, the greater correction it will receive.</p>
<p>Considering that,
<disp-formula id="FD20"><label>(20)</label>
<mml:math id="mm26"><mml:mrow><mml:msub><mml:mi>α</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<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:mi>M</mml:mi>
</mml:munderover>
<mml:mrow><mml:msub><mml:mi>μ</mml:mi>
<mml:mrow><mml:msubsup><mml:mi>X</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>m</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
is defined as the firing strength or activation degree of a rule, each rule consequent will be modified by the quantity given by,
<disp-formula id="FD21"><label>(21)</label>
<mml:math id="mm27"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub><mml:mi>R</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>⋅</mml:mo>
<mml:msub><mml:mi>α</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub><mml:mi>i</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>…</mml:mo>
<mml:msub><mml:mi>i</mml:mi>
<mml:mi>M</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow><mml:mo>(</mml:mo>
<mml:mrow><mml:mi>F</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mover accent="true"><mml:mi>F</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup><mml:mover accent="true"><mml:mi>x</mml:mi>
<mml:mo>→</mml:mo>
</mml:mover>
<mml:mi>k</mml:mi>
</mml:msup>
<mml:mo>;</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where <italic>C</italic>
is a design parameter [<xref rid="b33-sensors-13-11797" ref-type="bibr">33</xref>
] that is used in FLS to compensate for the different scales of the approximated system input control signal <italic>u</italic>
(<italic>k</italic>
) and the output function <italic>y</italic>
(<italic>k</italic>
) that is used to compute the error. It is usually expressed as,
<disp-formula id="FD22"><label>(22)</label>
<mml:math id="mm28"><mml:mrow><mml:mi>C</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow><mml:mo>|</mml:mo>
<mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mi>u</mml:mi>
<mml:mrow><mml:mo mathvariant="italic">max</mml:mo>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub><mml:mi>u</mml:mi>
<mml:mrow><mml:mo mathvariant="italic">min</mml:mo>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow><mml:msub><mml:mi>y</mml:mi>
<mml:mrow><mml:mo mathvariant="italic">max</mml:mo>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub><mml:mi>y</mml:mi>
<mml:mrow><mml:mo mathvariant="italic">min</mml:mo>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>However, in this work, the approximated signal is the same as the signal used to compute the error, so we used C = 1.</p>
<p>In the case of the MFs' centers, a similar correction strategy is adopted, this time based on a modified gradient descent algorithm, <italic>i.e.</italic>
,
<disp-formula id="FD23"><label>(23)</label>
<mml:math id="mm29"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup><mml:mi>η</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mfrac><mml:mrow><mml:mfrac><mml:mrow><mml:mo>∂</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow><mml:mo>∂</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mrow><mml:mrow><mml:mo>|</mml:mo>
<mml:mrow><mml:mfrac><mml:mrow><mml:mo>∂</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow><mml:mo>∂</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msubsup><mml:mi>l</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</disp-formula>
where
<inline-formula><mml:math id="mm30"><mml:mrow><mml:msubsup><mml:mi>l</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</inline-formula>
is a learning parameter used to increase the speed of convergence, and,
<disp-formula id="FD24"><label>(24)</label>
<mml:math id="mm31"><mml:mrow><mml:msubsup><mml:mi>η</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mrow><mml:mo>{</mml:mo>
<mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mfrac><mml:mrow><mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mrow><mml:mi>m</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mtext>if</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mfrac><mml:mrow><mml:mo>∂</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow><mml:mo>∂</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:mo>≥</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr><mml:mtd><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mfrac><mml:mrow><mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mrow><mml:mi>m</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:mfrac>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd><mml:mrow><mml:mtext>if</mml:mtext>
<mml:mspace width="0.2em"></mml:mspace>
<mml:mfrac><mml:mrow><mml:mo>∂</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>R</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow><mml:mo>∂</mml:mo>
<mml:msubsup><mml:mi>c</mml:mi>
<mml:mi>m</mml:mi>
<mml:mrow><mml:msub><mml:mi>i</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:mo><</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>This algorithm prevents the centers from changing their order, which in turn prevents the loss of their linguistic meaning. This updating method uses a saturation function based on the gradient magnitude, so the centers can move, at most half the distance from their immediate neighbors.</p>
<p>Finally, it is important to highlight three important issues: first, because of the cumbersomeness of the maneuvers to gather each set of calibration points, the total number of input-output pairs available is not very high (around 50). Such a limited number of points would lead to a very poor fuzzy training. Thus, to avoid this from happening, these 50 points have been used up to 10 several times to provide the fuzzy system with at least 500 hundred points to learn the fuzzy relation. Despite re-usage of these points will not add new information, an artificially larger dataset provides the algorithm with more iterations to improve its convergence.</p>
<p>The second issue to be highlighted is that this training phase would likely need to be computed offline (depending on the power of the processor embedded in the MIMU), presumably in a computer. However, the evaluation function found after the training process can be easily included in the embedded firmware and executed online as it is not computationally expensive.</p>
<p>The third issue to highlight is that although it would have been possible to use optimal consequents adaptation (as in [<xref rid="b33-sensors-13-11797" ref-type="bibr">33</xref>
]), or even a more complex FLS, it would have not improved the general performance of the validator. Proposing a more complex and capable FLS would only result in a system achieving a lower training error at a higher computational cost, which would neither be able to eliminate unpredictable errors in the output as the relation between markers and calibration error would still be not functional.</p>
</sec>
</sec>
<sec><label>4.</label>
<title>Experiments</title>
<p>We have carried out two sets of experiments, one for each of the proposed approaches. We will start by describing the datasets gathered to train and test the validators. We have gathered two groups of calibration distributions; the first one is composed of 27 data distributions and we will refer to it as “dataset 1”; the second group is composed of 55 distributions and we will name it “dataset 2”. Both datasets contain ill-distributed and well distributed input calibration data. <xref rid="f3-sensors-13-11797" ref-type="fig">Figure 3</xref>
depicts the boxplot of each one of the sensing axis (<italic>h<sub>i</sub>
</italic>
, <italic>i</italic>
= {<italic>x</italic>
, <italic>y</italic>
, <italic>z</italic>
}) of a magnetometer for both datasets. This figure reflects the value of the median (circled point), distance between third and first quartiles (length of the thick blue line) and the outliers (red points). It can be seen at a glance the different statistical nature of the gathered distributions.</p>
<p>Once the data to be used are ready, we apply the following pre-processing steps for each one of the calibration distributions:
<list list-type="simple"><list-item><label>(i)</label>
<p>Compute all four indicators (A, B, C and D).</p>
</list-item>
<list-item><label>(i)</label>
<p>Execute the ellipsoid-fitting calibration algorithm presented in [<xref rid="b23-sensors-13-11797" ref-type="bibr">23</xref>
] to estimate the calibration parameters, <italic>i.e.</italic>
, scale factors, biases and orthogonality matrix (see [<xref rid="b23-sensors-13-11797" ref-type="bibr">23</xref>
] for more details).</p>
</list-item>
<list-item><label>(i)</label>
<p>Apply the computed calibration parameters to calibrate the input calibration data.</p>
</list-item>
<list-item><label>(i)</label>
<p>Compute the norm of the calibrated data and calculate the error with respect to the value of the norm of Earth's magnetic field in our location (0.432 Gauss [<xref rid="b34-sensors-13-11797" ref-type="bibr">34</xref>
]). We will refer to this error as the “calibration error”.</p>
</list-item>
<list-item><label>(i)</label>
<p>Build a vector containing the calibration errors for each one of the distributions of both datasets.</p>
</list-item>
<list-item><label>(i)</label>
<p>Select a maximum error tolerance (<italic>∈<sub>max</sub>
</italic>
) from which the associated input calibration distribution will be considered as ill-distributed.</p>
</list-item>
<list-item><label>(i)</label>
<p>Build a validation binary marker associated to both datasets, which is set to 1 if the distribution is valid and to 0 if not.</p>
</list-item>
</list>
</p>
<p><xref rid="f4-sensors-13-11797" ref-type="fig">Figures 4</xref>
and <xref rid="f5-sensors-13-11797" ref-type="fig">5</xref>
show the value of all four indicators <italic>versus</italic>
the calibration error for datasets 1 and 2 respectively. Calibration error has been normalized to the maximum value of the indicator to improve the visibility. The maximum calibrated error is the threshold indicating the maximum tolerated error that was used during the training process and to label the distributions as valid or invalid.</p>
<p>Now, once all the auxiliary parameters are ready, the experiments carried out to test the single-indicator thresholding validator are very straightforward. As we explained in Section 3, we compare the value of each one of the indicators with a threshold. Imagine that indicator C has a value of 500 empty bins for distribution <italic>n</italic>
. So, if we consider that any distribution having less than, let's say, 1000 bins, will be valid as it will result in a value lower than the maximum tolerated error, then, distribution <italic>n</italic>
is marked as valid. Proceeding this way for the <italic>N</italic>
distributions of the dataset, we will also build an estimated validation binary marker that is subsequently compared with the actual validation marker. This comparison is carried out by computing the Receiver Operating Characteristic (ROC) curve [<xref rid="b35-sensors-13-11797" ref-type="bibr">35</xref>
] and the area under the curve (AUC), which are the standard indicators of the performance of binary classifiers.</p>
<p>The value of the predefined threshold has to be set empirically and, in order to find the value resulting in the optimal ROC, we have carried out a grid search. This can be considered as the training process and it has the following steps:
<list list-type="simple"><list-item><label>(i)</label>
<p>Build a vector containing the initial threshold, the step and the final threshold values for each one of the four indicators.</p>
</list-item>
<list-item><label>(i)</label>
<p>Apply an iterative process in which every value of the threshold is applied to the indicator in order to build and estimated validation marker and compute the ROC values.</p>
</list-item>
<list-item><label>(i)</label>
<p>Find the threshold values resulting in the best ROC values <italic>i.e.</italic>
, those that maximize the value of the AUC.</p>
</list-item>
</list>
</p>
<p>The selection of the values of the threshold vectors depend on the characteristics of the employed sensor. In our case, we employed the triaxial magnetometer included in a WAGYROMAG IMU [<xref rid="b36-sensors-13-11797" ref-type="bibr">36</xref>
]. The measured data are digitalized using a 10 bit ADC, so the range of the measurements is [0, 1023]. The threshold values used for the experiment are listed below. Notice that these values will differ depending on the hardware characteristics of the device being employed.</p>
<list list-type="bullet"><list-item><p>Indicator A ((<italic>Q</italic>
3<italic><sub>θ</sub>
− Q</italic>
1<italic><sub>θ</sub>
</italic>
) + (<italic>Q</italic>
3<italic><sub>ϕ</sub>
</italic>
− <italic>Q</italic>
1<italic><sub>ϕ</sub>
</italic>
)): as explained in Section 3, the values of <italic>ϕ</italic>
and <italic>θ</italic>
are distributed within [−180°, 180°] and [−90°, 90°] respectively. Therefore, the possible values of the indicator, and analogously the values of the threshold, are bounded in [0°, 540°].</p>
</list-item>
<list-item><p>Indicator B (Total number of empty bins in <italic>ϕ</italic>
and <italic>θ</italic>
histograms): since <italic>ϕ</italic>
and <italic>θ</italic>
can take up to 1,024 values each, the total number of empty bins will be in the [0, 2047] range. Therefore, this will also be the vector of possible threshold values.</p>
</list-item>
<list-item><p>Indicator C (Sum of the Euclidean distance between the maximum and minimum gathered components): Ideally, the radius of the sphere will be in the [0, 512] range. Therefore, the sum of the three ellipsoid axes will be in [0, 3072] range and so will be the threshold vector.</p>
</list-item>
<list-item><p>Indicator D (Volume of the convex hull): given that the volume of a reference well distributed and highly populated raw calibration set is around 5 × 10<sup>8</sup>
, while the volume of a poorly distributed set is in the order of 10<sup>7</sup>
, then the threshold vector will be set to [1 × 10<sup>6</sup>
, 6 × 10<sup>8</sup>
].</p>
</list-item>
</list>
<p>The selection of a grid-search parameter optimization strategy over any other error minimization algorithm is well justified in this case since the number of possible values the parameters can take is known and limited. Moreover, the grid-search ensures finding the optimal parameters and presents no problems of convergence to local minima as the Gauss-Newton and Levenberg-Mardquart algorithms.</p>
<p>The maximum tolerated calibration error <italic>∈<sub>max</sub>
</italic>
was chosen by visually inspecting the error vector of both datasets (as depicted in <xref rid="f4-sensors-13-11797" ref-type="fig">Figures 4</xref>
and <xref rid="f5-sensors-13-11797" ref-type="fig">5</xref>
) and choosing the largest between the group of low errors considerable as acceptable. We chose <italic>∈<sub>max</sub>
</italic>
<sub>1</sub>
= 0.0273 Gauss and <italic>∈<sub>max</sub>
</italic>
<sub>2</sub>
= 0.0262 Gauss for datasets 1 and 2 respectively. <xref rid="t1-sensors-13-11797" ref-type="table">Table 1</xref>
shows the optimal threshold values obtained for each one of the indicators for both datasets as well as the associated ROC values.</p>
<p>After the training process, we need to check the validity of the computed parameters using dataset 1 by applying them over dataset 2 and viceversa. <xref rid="t2-sensors-13-11797" ref-type="table">Table 2</xref>
shows the results derived from this process.</p>
<p>The second part of the experiments is conducted to test the performance of the Multiple-indicator Fuzzy Validator.</p>
<p>We trained the FLS with all the possible input combinations of two indicators and then tested it over the dataset that was not used for the training. The output of the FLS is an estimation of the calibration error values that would be obtained for each one of the input calibration distributions. The estimated calibration error also needs to be compared with a predefined error tolerance, which should ideally be equal to <italic>∈<sub>max</sub>
</italic>
. Expecting some deviation of the estimated error with respect to the actual error, we also built a vector of error tolerances and carried out a grid-search to find the optimal value obtaining the best ROC parameters.</p>
<p><xref rid="f6-sensors-13-11797" ref-type="fig">Figure 6</xref>
shows the outcome of the training process using dataset 1 and its application to dataset 2, as well as the estimated actual binary validation markers. <xref rid="t3-sensors-13-11797" ref-type="table">Table 3</xref>
reflects the ROC parameters for each one of the combinations together with the optimal error threshold which, as can be seen at a glance, is very close to the actual value (<italic>∈<sub>max</sub>
</italic>
).</p>
</sec>
<sec><label>5.</label>
<title>Results Discussion</title>
<p>When analyzing the results obtained by the Single-indicator Thresholding Validator, we see that for dataset 1 it was possible to find a threshold for all indicators, which ensured perfect classification, <italic>i.e.</italic>
, the estimated validation marker was equal to the actual marker. On the other hand, for dataset 2, which included twice the number of distributions, the percentage of correct decisions slightly decreases. However it is still very close to the optimal situation. Regarding the performance of each indicator we observe that:
<list list-type="bullet"><list-item><p>Indicator A: It shows the poorest results of all indicators. The sum of the difference between Q3 and Q1 does not consider the possible outliers (extreme values, see <xref rid="f3-sensors-13-11797" ref-type="fig">Figure 3</xref>
) which also may contain information about the existence of less populated areas that contribute to cover the complete locus of the sphere and reduce the calibration error. Then, if a distribution contains one or more regions with high density of points and other less populated but still covered areas, the indicator will penalize it although it will likely result in a low calibration error.</p>
</list-item>
<list-item><p>Indicator B: Counting the number of empty bins in the histograms offers an acceptable precision but it can be an ambiguous indicator. Having, for example, two distributions containing a similar number of points, the number of empty bins can be very similar or even identical. However, if one of the distributions covers the complete surface of the ellipsoid with a low density of points, while the other one covers only a limited region of the surface with a high density of points, the calibration error will be very different. The less populated distribution will achieve a lower error since it gives better information to the fitting algorithm about the shape of the ellipsoid.</p>
<p>This indicator is only trustable when we set a very strict threshold, i.e., when the number of permitted empty bins is very low (∼10% out of the total). By setting a very strict threshold, we can guarantee that the calibration process will yield good results. However, this restriction eliminates valid distributions that have a much lower number of points but offer good performance. In other words, a restrictive threshold causes no false positives (ill-distributed calibration sets being validated) but it may generate a large number of false negatives (well-distributed calibration sets being discarded). If, on the other hand, we set a less restrictive threshold, the number of false negatives will decrease but the number of false positives will increase (which is a less desirable situation).</p>
</list-item>
<list-item><p>Indicator C: The sum of the Euclidean distance between the maximum and minimum values gathered in each axis of the sensor has shown to be the second best indicator among the tested ones. This indicator shows if axis antipodal areas are covered. Then, if it has a high value, it indicates that we have at least covered the three ellipses around the three axes. However, this indicator does not provide further information about the number and density of points in other areas located outside the ellipsoid main axes. The fitting calibration algorithm may have trouble converging to optimal parameters if only points in the axes are provided. In an extreme case in which we only have points contained in the three ellipses around the axes, the indicator will present a high value and tag the distribution as valid while it would actually result in the estimation of erroneous calibration parameters. However, since this is a very extreme and rare case, we can conclude that indicator C is a good indicator of the validity of the input calibration set.</p>
</list-item>
<list-item><p>Indicator D: The volume contained by the smallest surface wrapping the data points (the convex hull) has revealed to be the best of the tested indicators as it contains trustful information about the proper distribution of the calibration sets. It achieved perfect classification for both datasets in the training process (<italic>i.e.</italic>
, it was possible to find a threshold value that perfectly distinguished between valid and invalid distributions) and an almost perfect classification in the test process, which was only partially distorted by a reduced number of false negatives (which are less critical than false positives). The computation of the volume solves the situation explained in the previous point in which data points are only contained in the ellipses around the axes. If this is the case, the approximated convex hull will present sharper and more abrupt edges and, hence, the volume will be lower and the set will be penalized.</p>
</list-item>
</list>
</p>
<p><xref rid="f7-sensors-13-11797" ref-type="fig">Figure 7</xref>
shows a well distributed and highly populated set and a set in which the points are only contained in ellipses around the axes triplet. Distances between maximum and minimum components as well as the estimated convex hull are also plotted to see the aforementioned problem. The value of the indicators is <italic>C</italic>
<sub>well</sub>
= 3113, <italic>C</italic>
<sub>ill</sub>
= 2954, <italic>D</italic>
<sub>well</sub>
= 4.9196 × 10<sup>8</sup>
and D<sub>iill</sub>
= 3.9166 × 10<sup>8</sup>
. Notice how the difference between <italic>D</italic>
<sub>well</sub>
and <italic>D</italic>
<sub>ill</sub>
is more accentuated as the difference between <italic>C</italic>
<sub>well</sub>
and <italic>C</italic>
<sub>ill</sub>
, hence, the better discrimination ability of indicator D.</p>
<p>The Multiple-indicator fuzzy approach was developed to test the performance of a decision system using combinations of weighted indicators as input. The FLS showed its power to obtain an estimation of the calibration error using only the indicators as the input during the training phase. The success of the testing phase varied depending on the employed combination of indicators.</p>
<p>The combination of indicators A and B achieved the poorest performance with an average AUC of 0.8963 ± 0.0105 (<xref rid="t2-sensors-13-11797" ref-type="table">Table 2</xref>
). On the other hand, as it was expected, the joint use of indicators C and D obtained an almost perfect decision rate with an average AUC of 0.9861 ± 0.0197 (<xref rid="t2-sensors-13-11797" ref-type="table">Table 2</xref>
) showing the best performance of all tested approaches. Indicators C and D have been proved to contain more relevant information about the goodness of the spatial distribution of the input calibration datasets.</p>
<p>The FLS approach is also easier to tune, as the output is an estimate of the calibration error, so the threshold can be directly set according to the desired degree of calibration error tolerance. On the other hand, it is harder to regulate (manually set) the value of the indicators' threshold when using the Single-indicator approach since the relationship between the value of the indicator and the calibration error is not functional and therefore, not evident.</p>
</sec>
<sec><label>6.</label>
<title>Conclusions and Future Work</title>
<p>In this work, we have presented the problems derived from the use of ill-distributed datasets as the input of ellipsoid fitting algorithms used to calibrate MARG sensors. We have presented two different systems that monitor and assess the goodness of the spatial distribution of data being gathered during the calibration maneuvers and, therefore, validate them only when a low calibration error is ensured.</p>
<p>Both approaches are based on the computation and analysis of four distribution indicators, namely the sum of the difference of the third quartile and the first quartile of spherical coordinates <italic>ϕ</italic>
and <italic>θ</italic>
(indicator A); the sum of the number of empty bins in the histograms of spherical coordinates <italic>ϕ</italic>
and <italic>θ</italic>
(indicator B); the sum of the Euclidean distance between the maximum and minimum values of each of the gathered data components (indicator C) and the volume of the convex hull defined by the dataset (indicator D).</p>
<p>The first approach, referred to as the “Single-indicator Thresholding Approach” is based on comparing the value of a single indicator with a predefined threshold from which it is considered that the error will be low. We carried out a grid-search training process that revealed the optimal value of the threshold of each indicator. For indicator D, we found a threshold value that ensured perfect classification, <italic>i.e.</italic>
, the estimated validation marker was identical to the actual marker. After finding the optimal threshold values, we tested them in a dataset different from the one used for the training. Again, marker D obtained the best performance with an average ROC of 1.0000 ± 0.0000 in the first dataset and 0.8889 ± 0.1571 in the second dataset.</p>
<p>The second approach was designed to use weighted combinations of two indicators as the input. We designed a TSK Fuzzy Logic System with 10 membership functions that was used to infer the relationship between the indicators and the calibration error.</p>
<p>Results showed that the estimation of the error was very accurate and an average AUC of 0.9861 ± 0.0197 was obtained using parameters C and D as the input.</p>
<p>Results have been obtained for a triaxial magnetometer since the data gathering process is faster than for the accelerometer. Accelerometers need to be placed in quasi-static positions to avoid the linear acceleration from distorting the gravity, which is used as the reference. This fact considerably increases the duration of the calibration maneuvers to obtain the same number of points as with the magnetometer. Results are generalizable since when using ellipsoid fitting algorithms the only difference comes from the physical magnitude used as a reference (norm of Earth's magnetic field, norm of Earth's gravitational field or a constant known angular rate).</p>
<p>It has been shown that the calibration error of ellipsoid fitting algorithms can be predicted by analyzing the spatial distribution of the input datasets. The system we propose could be used to improve the performance of automatic in-use calibration algorithms that periodically recalibrate MARG sensors, as well as to ease the calibration maneuvers carried out by in-field operators. In addition, in case that the IMU being calibrated had local processing capabilities, our algorithm could be included in the firmware and send an alert to the operator (through an LED, playing a sound or with any other kind of actuator) whenever the calibration dataset is well distributed, to inform the operator that no further maneuvers are required.</p>
<p>Future work will be oriented to implement an algorithm to detect and reject outliers in data distributions caused by magnetic distortions to improve the performance of our system when applied to magnetometers. Measurements of magnetometers can be disrupted by external magnetic fields other than the Earth's. If the MIMU is used in a very unstable magnetic environment, the magnetometer's output will be distorted and the indicators may get erroneous values, which may fool the detection system. We will also evaluate other alternatives to the FLS such as neural networks and multifactor regression to reduce the computational load of the training process.</p>
</sec>
</body>
<back><ack><p>This work was partly supported by the MICINN under the TEC2012-34306 project, the MEEC under the TIN2012-32039 (hpMooN) and the Consejería de Innovación, Ciencia y Empresa (Junta de Andalucía, Spain) under the Excellence Projects P09-TIC-4530 and P11-TIC-7103.</p>
</ack>
<notes><title>Conflicts of Interest</title>
<p>The authors declare no conflict of interest.</p>
</notes>
<ref-list><title>References</title>
<ref id="b1-sensors-13-11797"><label>1.</label>
<element-citation publication-type="webpage"><article-title>Yole Developpement—MEMS Reports</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://www.i-micronews.com/mems/reports/">http://www.i-micronews.com/mems/reports/</ext-link>
</comment>
<date-in-citation>(accessed on 4 September 2013)</date-in-citation>
</element-citation>
</ref>
<ref id="b2-sensors-13-11797"><label>2.</label>
<element-citation publication-type="webpage"><article-title>Tilt Sensing Using Linear Accelerometers (Freescale Semiconductor Application Note)</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://goo.gl/0duLQ">http://goo.gl/0duLQ</ext-link>
</comment>
<date-in-citation>(accessed on 14 January 2013)</date-in-citation>
</element-citation>
</ref>
<ref id="b3-sensors-13-11797"><label>3.</label>
<element-citation publication-type="webpage"><article-title>Implementing a Tilt-Compensated eCompass using Accelerometer and Magnetometer Sensors (Freescale Semiconductor Application Note)</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://goo.gl/pGMFX">http://goo.gl/pGMFX</ext-link>
</comment>
<date-in-citation>(accessed on 14 January 2013)</date-in-citation>
</element-citation>
</ref>
<ref id="b4-sensors-13-11797"><label>4.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Luczak</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Advanced Algorithm for Measuring Tilt with MEMS Accelerometers</article-title>
<source>Recent Advances in Mechatronics</source>
<publisher-name>Springer</publisher-name>
<publisher-loc>Berlin/Heidelberg, Germany</publisher-loc>
<year>2007</year>
<fpage>511</fpage>
<lpage>515</lpage>
</element-citation>
</ref>
<ref id="b5-sensors-13-11797"><label>5.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Krach</surname>
<given-names>B.</given-names>
</name>
<name><surname>Robertson</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Integration of Foot-Mounted Inertial Sensors into a Bayesian Location Estimation Framework</article-title>
<conf-name>Proceedings of the 5th Workshop on Positioning, Navigation and Communication</conf-name>
<conf-loc>Hannover, Germany</conf-loc>
<conf-date>27 March 2008</conf-date>
<fpage>55</fpage>
<lpage>61</lpage>
</element-citation>
</ref>
<ref id="b6-sensors-13-11797"><label>6.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Skog</surname>
<given-names>I.</given-names>
</name>
<name><surname>Nilsson</surname>
<given-names>J.O.</given-names>
</name>
<name><surname>Handel</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Evaluation of Zero-Velocity Detectors for Foot-Mounted Inertial Navigation Systems</article-title>
<conf-name>Proceedings of the 2010 International Conference on Indoor Positioning and Indoor Navigation (IPIN)</conf-name>
<conf-loc>Zurich, Switzerland</conf-loc>
<conf-date>15–17 September 2010</conf-date>
<fpage>1</fpage>
<lpage>6</lpage>
</element-citation>
</ref>
<ref id="b7-sensors-13-11797"><label>7.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Park</surname>
<given-names>S.K.</given-names>
</name>
<name><surname>Suh</surname>
<given-names>Y.S.</given-names>
</name>
</person-group>
<article-title>A zero velocity detection algorithm using inertial sensors for pedestrian navigation systems</article-title>
<source>Sensors</source>
<year>2010</year>
<volume>10</volume>
<fpage>9163</fpage>
<lpage>9178</lpage>
<pub-id pub-id-type="pmid">22163402</pub-id>
</element-citation>
</ref>
<ref id="b8-sensors-13-11797"><label>8.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Susi</surname>
<given-names>M.</given-names>
</name>
<name><surname>Renaudin</surname>
<given-names>V.</given-names>
</name>
<name><surname>Lachapelle</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Motion mode recognition and step detection algorithms for mobile phone users</article-title>
<source>Sensors</source>
<year>2013</year>
<volume>13</volume>
<fpage>1539</fpage>
<lpage>1562</lpage>
<pub-id pub-id-type="pmid">23348038</pub-id>
</element-citation>
</ref>
<ref id="b9-sensors-13-11797"><label>9.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>González-Villanueva</surname>
<given-names>L.</given-names>
</name>
<name><surname>Cagnoni</surname>
<given-names>S.</given-names>
</name>
<name><surname>Ascari</surname>
<given-names>L.</given-names>
</name>
</person-group>
<article-title>Design of a wearable sensing system for human motion monitoring in physical rehabilitation</article-title>
<source>Sensors</source>
<year>2013</year>
<volume>13</volume>
<fpage>7735</fpage>
<lpage>7755</lpage>
<pub-id pub-id-type="pmid">23774987</pub-id>
</element-citation>
</ref>
<ref id="b10-sensors-13-11797"><label>10.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Chung</surname>
<given-names>P.</given-names>
</name>
<name><surname>Ng</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Comparison between an accelerometer and a three-dimensional motion analysis system for the detection of movement</article-title>
<source>Physiotherapy</source>
<year>2012</year>
<volume>98</volume>
<fpage>256</fpage>
<lpage>259</lpage>
<pub-id pub-id-type="pmid">22898584</pub-id>
</element-citation>
</ref>
<ref id="b11-sensors-13-11797"><label>11.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Grivon</surname>
<given-names>D.</given-names>
</name>
<name><surname>Vezzetti</surname>
<given-names>E.</given-names>
</name>
<name><surname>Violante</surname>
<given-names>M.G.</given-names>
</name>
</person-group>
<article-title>Development of an innovative low-cost {MARG} sensors alignment and distortion compensation methodology for 3D scanning applications</article-title>
<source>Robot. Auton. Syst.</source>
<year>2013</year>
<pub-id pub-id-type="doi">10.1016/j.robot.2013.06.003</pub-id>
</element-citation>
</ref>
<ref id="b12-sensors-13-11797"><label>12.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Batista</surname>
<given-names>P.</given-names>
</name>
<name><surname>Silvestre</surname>
<given-names>C.</given-names>
</name>
<name><surname>Oliveira</surname>
<given-names>P.</given-names>
</name>
<name><surname>Cardeira</surname>
<given-names>B.</given-names>
</name>
</person-group>
<article-title>Accelerometer calibration and dynamic bias and gravity estimation: Analysis, design, and experimental evaluation</article-title>
<source>IEEE Trans. Control Syst. Technol.</source>
<year>2011</year>
<volume>19</volume>
<fpage>1128</fpage>
<lpage>1137</lpage>
</element-citation>
</ref>
<ref id="b13-sensors-13-11797"><label>13.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Shi</surname>
<given-names>Z.</given-names>
</name>
<name><surname>Yang</surname>
<given-names>J.</given-names>
</name>
<name><surname>Yue</surname>
<given-names>P.</given-names>
</name>
<name><surname>Cheng</surname>
<given-names>Z.</given-names>
</name>
</person-group>
<article-title>A Discrimination Method for Accelerometer Static Model Parameter Based on Nonlinear Iterative Least Squares Estimation</article-title>
<conf-name>Proceedings of the IEEE 2010 3rd International Symposium on Systems and Control in Aeronautics and Astronautics (ISSCAA)</conf-name>
<conf-loc>Harbin, China</conf-loc>
<conf-date>8–10 June 2010</conf-date>
<fpage>963</fpage>
<lpage>966</lpage>
</element-citation>
</ref>
<ref id="b14-sensors-13-11797"><label>14.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Zhang</surname>
<given-names>X.</given-names>
</name>
<name><surname>Gao</surname>
<given-names>L.</given-names>
</name>
</person-group>
<article-title>A Novel Auto-Calibration Method of the Vector Magnetometer</article-title>
<conf-name>Proceedings of the IEEE, 9th International Conference on Electronic Measurement & Instruments 2009. ICEMI ′09</conf-name>
<conf-loc>Beijing, China</conf-loc>
<conf-date>16–19 August 2009</conf-date>
<fpage>145</fpage>
<lpage>150</lpage>
</element-citation>
</ref>
<ref id="b15-sensors-13-11797"><label>15.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Frosio</surname>
<given-names>I.</given-names>
</name>
<name><surname>Pedersini</surname>
<given-names>F.</given-names>
</name>
<name><surname>Borghese</surname>
<given-names>N.A.</given-names>
</name>
</person-group>
<article-title>Autocalibration of MEMS accelerometers</article-title>
<source>IEEE Trans. Instrum. Meas.</source>
<year>2009</year>
<volume>58</volume>
<fpage>2034</fpage>
<lpage>2041</lpage>
</element-citation>
</ref>
<ref id="b16-sensors-13-11797"><label>16.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Skog</surname>
<given-names>I.</given-names>
</name>
<name><surname>Handel</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Calibration of a MEMS Inertial Measurement Unit</article-title>
<conf-name>Proceedings of the XVII IMEKO World Congress</conf-name>
<conf-loc>Rio de Janeiro, Brazil</conf-loc>
<conf-date>17–22 September 2006</conf-date>
</element-citation>
</ref>
<ref id="b17-sensors-13-11797"><label>17.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Petrucha</surname>
<given-names>V.</given-names>
</name>
<name><surname>Kaspar</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Calibration of a Triaxial Fluxgate Magnetometer and Accelerometer with an Automated Non-Magnetic Calibration System</article-title>
<conf-name>Proceedings of the 2009 IEEE Sensors</conf-name>
<conf-loc>Christchurch, New Zealand</conf-loc>
<conf-date>25–28 October 2009</conf-date>
<fpage>1510</fpage>
<lpage>1513</lpage>
</element-citation>
</ref>
<ref id="b18-sensors-13-11797"><label>18.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Sahawneh</surname>
<given-names>L.</given-names>
</name>
<name><surname>Jarrah</surname>
<given-names>M.A.</given-names>
</name>
</person-group>
<article-title>Development and Calibration of Low Cost MEMS IMU for UAV Applications</article-title>
<conf-name>Proceedings of the 5th International Symposium on Mechatronics and Its Applications</conf-name>
<conf-loc>Amman, Jordan</conf-loc>
<conf-date>27–29 May 2008</conf-date>
<fpage>1</fpage>
<lpage>9</lpage>
</element-citation>
</ref>
<ref id="b19-sensors-13-11797"><label>19.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Dorveaux</surname>
<given-names>E.</given-names>
</name>
<name><surname>Vissiere</surname>
<given-names>D.</given-names>
</name>
<name><surname>Martin</surname>
<given-names>A.P.</given-names>
</name>
<name><surname>Petit</surname>
<given-names>N.</given-names>
</name>
</person-group>
<article-title>Iterative Calibration Method for Inertial and Magnetic Sensors</article-title>
<conf-name>Proceedings of the 48th IEEE Conference on Decision and Control, 2009 Held Jointly with the 2009 28th Chinese Control Conference</conf-name>
<conf-loc>Shanghai, China</conf-loc>
<conf-date>15–18 December 2009</conf-date>
<fpage>8296</fpage>
<lpage>8303</lpage>
</element-citation>
</ref>
<ref id="b20-sensors-13-11797"><label>20.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Renaudin</surname>
<given-names>V.</given-names>
</name>
<name><surname>Afzal</surname>
<given-names>M.H.</given-names>
</name>
<name><surname>Lachapelle</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>New Method for Magnetometers Based Orientation Estimation</article-title>
<conf-name>Proceedings of the IEEE Position Location and Navigation Symposium (PLANS), 2010 IEEE/ION</conf-name>
<conf-loc>Indian Wells/Palm Springs, USA</conf-loc>
<conf-date>3–6 May 2010</conf-date>
<fpage>348</fpage>
<lpage>356</lpage>
</element-citation>
</ref>
<ref id="b21-sensors-13-11797"><label>21.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Gietzelt</surname>
<given-names>M.</given-names>
</name>
<name><surname>Wolf</surname>
<given-names>K.H.</given-names>
</name>
<name><surname>Marschollek</surname>
<given-names>M.</given-names>
</name>
<name><surname>Haux</surname>
<given-names>R.</given-names>
</name>
</person-group>
<article-title>Performance comparison of accelerometer calibration algorithms based on 3D-ellipsoid fitting methods</article-title>
<source>Comput. Methods Progr. Biomed.</source>
<year>2013</year>
<volume>111</volume>
<fpage>62</fpage>
<lpage>71</lpage>
</element-citation>
</ref>
<ref id="b22-sensors-13-11797"><label>22.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Lötters</surname>
<given-names>J.</given-names>
</name>
<name><surname>Schipper</surname>
<given-names>J.</given-names>
</name>
<name><surname>Veltink</surname>
<given-names>P.</given-names>
</name>
<name><surname>Olthuis</surname>
<given-names>W.</given-names>
</name>
<name><surname>Bergveld</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Procedure for in-use calibration of triaxial accelerometers in medical applications</article-title>
<source>Sens. Actuators A Phys.</source>
<year>1998</year>
<volume>68</volume>
<fpage>221</fpage>
<lpage>228</lpage>
</element-citation>
</ref>
<ref id="b23-sensors-13-11797"><label>23.</label>
<element-citation publication-type="confproc"><person-group person-group-type="author"><name><surname>Camps</surname>
<given-names>F.</given-names>
</name>
<name><surname>Harasse</surname>
<given-names>S.</given-names>
</name>
<name><surname>Monin</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>Numerical Calibration for 3-axis Accelerometers and Magnetometers</article-title>
<conf-name>Proceedings of the IEEE International Conference on Electro/Information Technology</conf-name>
<conf-loc>Windsor, ON, Canada</conf-loc>
<conf-date>7–9 June 2009</conf-date>
<fpage>217</fpage>
<lpage>221</lpage>
</element-citation>
</ref>
<ref id="b24-sensors-13-11797"><label>24.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Timo</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Automatic and adaptive calibration of 3D field sensors</article-title>
<source>Appl. Math. Model.</source>
<year>2008</year>
<volume>32</volume>
<fpage>575</fpage>
<lpage>587</lpage>
</element-citation>
</ref>
<ref id="b25-sensors-13-11797"><label>25.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Jurman</surname>
<given-names>D.</given-names>
</name>
<name><surname>Jankovec</surname>
<given-names>M.</given-names>
</name>
<name><surname>Kamnik</surname>
<given-names>R.</given-names>
</name>
<name><surname>Topic</surname>
<given-names>M.</given-names>
</name>
</person-group>
<article-title>Calibration and data fusion solution for the miniature attitude and heading reference system</article-title>
<source>Sens. Actuators A Phys.</source>
<year>2007</year>
<volume>138</volume>
<fpage>411</fpage>
<lpage>420</lpage>
</element-citation>
</ref>
<ref id="b26-sensors-13-11797"><label>26.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Bonnet</surname>
<given-names>S.</given-names>
</name>
<name><surname>Bassompierre</surname>
<given-names>C.</given-names>
</name>
<name><surname>Godin</surname>
<given-names>C.</given-names>
</name>
<name><surname>Lesecq</surname>
<given-names>S.</given-names>
</name>
<name><surname>Barraud</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>Calibration methods for inertial and magnetic sensors</article-title>
<source>Sens. Actuators A Phys.</source>
<year>2009</year>
<volume>156</volume>
<fpage>302</fpage>
<lpage>311</lpage>
</element-citation>
</ref>
<ref id="b27-sensors-13-11797"><label>27.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Todd</surname>
<given-names>M.J.</given-names>
</name>
<name><surname>Yildirim</surname>
<given-names>E.A.</given-names>
</name>
</person-group>
<article-title>On Khachiyan's algorithm for the computation of minimum-volume enclosing ellipsoids</article-title>
<source>Discrete Appl. Math.</source>
<year>2007</year>
<volume>155</volume>
<fpage>1731</fpage>
<lpage>1744</lpage>
</element-citation>
</ref>
<ref id="b28-sensors-13-11797"><label>28.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Barber</surname>
<given-names>C.B.</given-names>
</name>
<name><surname>Dobkin</surname>
<given-names>D.P.</given-names>
</name>
<name><surname>Huhdanpaa</surname>
<given-names>H.</given-names>
</name>
</person-group>
<article-title>The quickhull algorithm for convex hulls</article-title>
<source>ACM Trans. Math. Softw.</source>
<year>1996</year>
<volume>22</volume>
<fpage>469</fpage>
<lpage>483</lpage>
</element-citation>
</ref>
<ref id="b29-sensors-13-11797"><label>29.</label>
<element-citation publication-type="webpage"><article-title>Qhull Code for Convex Hull, Delaunay Triangulation, Voronoi Diagram, and Halfspace Intersection about a Point</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://www.qhull.org/">http://www.qhull.org/</ext-link>
</comment>
<date-in-citation>(accessed on 4 September 2013)</date-in-citation>
</element-citation>
</ref>
<ref id="b30-sensors-13-11797"><label>30.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname>
<given-names>C.C.</given-names>
</name>
</person-group>
<article-title>Fuzzy logic in control systems: Fuzzy logic controller. II</article-title>
<source>IEEE Trans. Syst. Man Cybern.</source>
<year>1990</year>
<volume>20</volume>
<fpage>419</fpage>
<lpage>435</lpage>
</element-citation>
</ref>
<ref id="b31-sensors-13-11797"><label>31.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Cara</surname>
<given-names>A.</given-names>
</name>
<name><surname>Pomares</surname>
<given-names>H.</given-names>
</name>
<name><surname>Rojas</surname>
<given-names>I.</given-names>
</name>
</person-group>
<article-title>A new methodology for the online adaptation of fuzzy self-structuring controllers</article-title>
<source>IEEE Trans. Fuzzy Syst.</source>
<year>2011</year>
<volume>19</volume>
<fpage>449</fpage>
<lpage>464</lpage>
</element-citation>
</ref>
<ref id="b32-sensors-13-11797"><label>32.</label>
<element-citation publication-type="book"><person-group person-group-type="author"><name><surname>Carmona</surname>
<given-names>A.B.C.</given-names>
</name>
</person-group>
<article-title>New Methodologies for the Design of Evolving Fuzzy Systems for Online Intelligent Control</article-title>
<source>Ph.D. Thesis</source>
<publisher-name>University of Granada</publisher-name>
<publisher-loc>Granada, Spain</publisher-loc>
<year>2012</year>
</element-citation>
</ref>
<ref id="b33-sensors-13-11797"><label>33.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Pomares</surname>
<given-names>H.</given-names>
</name>
<name><surname>Rojas</surname>
<given-names>I.</given-names>
</name>
<name><surname>Ortega</surname>
<given-names>J.</given-names>
</name>
<name><surname>Gonzalez</surname>
<given-names>J.</given-names>
</name>
<name><surname>Prieto</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>A systematic approach to a self-generating fuzzy rule-table for function approximation</article-title>
<source>IEEE Trans. Syst. Man Cybern. Part B Cybern. Publ. IEEE Syst. Man Cybern. Soc.</source>
<year>2000</year>
<volume>30</volume>
<fpage>431</fpage>
<lpage>447</lpage>
</element-citation>
</ref>
<ref id="b34-sensors-13-11797"><label>34.</label>
<note><p>Center N.G.D. NGDC Geomagnetic Calculators. NOAA's National Geophysical Data Center and the collocated World Data Centers, Boulder, operated by NOAA/NESDIS/NGDC, archive and make available geomagnetic data and information relating to Earth's magnetic field and Earth-Sun environment, including current declination, geomagnetic field models and magnetic indices, geomagnetic observatory data, and geomagnetic surveys.</p>
</note>
</ref>
<ref id="b35-sensors-13-11797"><label>35.</label>
<element-citation publication-type="webpage"><article-title>Introduction to ROC curves</article-title>
<comment>Available online: <ext-link ext-link-type="uri" xlink:href="http://gim.unmc.edu/dxtests/ROC1.htm">http://gim.unmc.edu/dxtests/ROC1.htm</ext-link>
</comment>
<date-in-citation>(accessed on 4 September 2013)</date-in-citation>
</element-citation>
</ref>
<ref id="b36-sensors-13-11797"><label>36.</label>
<element-citation publication-type="journal"><person-group person-group-type="author"><name><surname>Olivares</surname>
<given-names>A.</given-names>
</name>
<name><surname>Olivares</surname>
<given-names>G.</given-names>
</name>
<name><surname>Mula</surname>
<given-names>F.</given-names>
</name>
<name><surname>Górriz</surname>
<given-names>J.</given-names>
</name>
<name><surname>Ramírez</surname>
<given-names>J.</given-names>
</name>
</person-group>
<article-title>Wagyromag: Wireless sensor network for monitoring and processing human body movement in healthcare applications</article-title>
<source>J. Syst. Archit.</source>
<year>2011</year>
<volume>57</volume>
<fpage>905</fpage>
<lpage>915</lpage>
</element-citation>
</ref>
</ref-list>
</back>
<floats-group><fig id="f1-sensors-13-11797" position="float"><label>Figure 1.</label>
<caption><p>Gathered input magnetometer calibration datasets: well distributed (<bold>top row</bold>
), ill-distributed (<bold>bottom row</bold>
). 3D representation (<bold>left column</bold>
) and projection of spherical coordinates (<bold>right column</bold>
).</p>
</caption>
<graphic xlink:href="sensors-13-11797f1"></graphic>
</fig>
<fig id="f2-sensors-13-11797" position="float"><label>Figure 2.</label>
<caption><p>Representation of a non-orthogonal sensor triplet (<bold>left</bold>
) and representation of a misaligned circuit board with respect to the IMU's external box (<bold>right</bold>
).</p>
</caption>
<graphic xlink:href="sensors-13-11797f2"></graphic>
</fig>
<fig id="f3-sensors-13-11797" position="float"><label>Figure 3.</label>
<caption><p>Boxplot of gathered magnetic field components (<italic>h<sub>x</sub>
</italic>
, <italic>h<sub>y</sub>
</italic>
and <italic>h<sub>z</sub>
</italic>
): dataset 1 (<bold>left column</bold>
), dataset 2 (<bold>right column</bold>
). X axis displays the distribution number.</p>
</caption>
<graphic xlink:href="sensors-13-11797f3"></graphic>
</fig>
<fig id="f4-sensors-13-11797" position="float"><label>Figure 4.</label>
<caption><p>Dataset 1: Indicators <italic>vs.</italic>
normalized calibration error.</p>
</caption>
<graphic xlink:href="sensors-13-11797f4"></graphic>
</fig>
<fig id="f5-sensors-13-11797" position="float"><label>Figure 5.</label>
<caption><p>Dataset 2: Indicators <italic>vs.</italic>
normalized calibration error.</p>
</caption>
<graphic xlink:href="sensors-13-11797f5"></graphic>
</fig>
<fig id="f6-sensors-13-11797" position="float"><label>Figure 6.</label>
<caption><p>FLS training using dataset 1 (<bold>top</bold>
), test using dataset 2 (<bold>center</bold>
) and final validation (<bold>bottom</bold>
).</p>
</caption>
<graphic xlink:href="sensors-13-11797f6"></graphic>
</fig>
<fig id="f7-sensors-13-11797" position="float"><label>Figure 7.</label>
<caption><p>Well distributed dataset: Euclidean distances (<bold>a</bold>
), Convex hull (<bold>b</bold>
). Ill-distributed dataset: Euclidean distances (<bold>c</bold>
), Convex hull (<bold>d</bold>
).</p>
</caption>
<graphic xlink:href="sensors-13-11797f7"></graphic>
</fig>
<table-wrap id="t1-sensors-13-11797" position="float"><label>Table 1.</label>
<caption><p>Results of the training process of the Single-indicator Thresholding Validator.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="center" valign="middle" rowspan="1" colspan="1"><bold>Training set</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Indicator</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Max. Error tol. (<italic>∈<sub>max</sub>
</italic>
)</bold>
.</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Optimal threshold</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Sensitivity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Specifity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>AUC</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Average AUC</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">A</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">59.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9648 ± 0.0497</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">A</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">109.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9231</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9310</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9297</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">B</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.3530E + 3</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9947 ± 0.0075</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">B</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.3040E + 3</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9894</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">2.3810E + 3</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9987 ± 0.0019</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">2.2440E + 3</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9973</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.1030 + E8</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="middle" rowspan="2" colspan="1">1.0000 ± 0.0000</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">9.8000 + E7</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="t2-sensors-13-11797" position="float"><label>Table 2.</label>
<caption><p>Results of the test procedure of the Single-indicator Thresholding Validator.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="center" valign="middle" rowspan="1" colspan="1"><bold>Training Set</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Indicator</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Optimal threshold</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Sensitivity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Specifity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Average ROC</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">A</td>
<td align="center" valign="top" rowspan="1" colspan="1">59.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7241</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8620 ± 0.1951</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">A</td>
<td align="center" valign="top" rowspan="1" colspan="1">109.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.6667</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8333 ± 0.2357</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">B</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.3530E + 03</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8966</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9290 ± 0.0459</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">B</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.3040E + 03</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8333</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9166 ± 0.1179</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">C</td>
<td align="center" valign="top" rowspan="1" colspan="1">2.3810E + 03</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9231</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9616 ± 0.0544</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">C</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.2440E + 03</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7778</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8889 ± 0.1571</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">D</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.1030E + 08</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000 ± 0.0000</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">D</td>
<td align="center" valign="top" rowspan="1" colspan="1">9.8000E + 07</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7778</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8889 ± 0.1571</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="t3-sensors-13-11797" position="float"><label>Table 3.</label>
<caption><p>Results of the test procedure of the Multiple-indicator Fuzzy Validator. Datasets 1 and 2.</p>
</caption>
<table frame="hsides" rules="groups"><thead><tr><th align="center" valign="middle" rowspan="1" colspan="1"><bold>Training Set</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Indicators</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Max. Error Tol. (<italic>∈<sub>max</sub>
</italic>
)</bold>
.</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Optimal Thr.</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Sensitivity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Specifity</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>AUC</bold>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"><bold>Average AUC</bold>
</th>
</tr>
</thead>
<tbody><tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&B</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0250</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8276</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9038</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.8963 ± 0.0105</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&B</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0220</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7778</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8889</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0230</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8966</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8893</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9168 ± 0.0390</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0230</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8889</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9444</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0310</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9310</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9198</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9460 ± 0.0371</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">A&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0250</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9444</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9722</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">B&C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0360</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8621</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.8548</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9274 ± 0.1027</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">B&C</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0490</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">B&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0260</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9615</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7931</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.7858</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.8790 ± 0.1318</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">B&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0240</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9444</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9722</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">1</td>
<td align="center" valign="top" rowspan="1" colspan="1">C&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0262</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0250</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="middle" rowspan="2" colspan="1">0.9861 ± 0.0197</td>
</tr>
<tr><td align="center" valign="top" rowspan="1" colspan="1">2</td>
<td align="center" valign="top" rowspan="1" colspan="1">C&D</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0273</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.0220</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9444</td>
<td align="center" valign="top" rowspan="1" colspan="1">1.0000</td>
<td align="center" valign="top" rowspan="1" colspan="1">0.9722</td>
<td align="center" valign="top" rowspan="1" colspan="1"></td>
</tr>
</tbody>
</table>
</table-wrap>
</floats-group>
</pmc>
</record>
Pour manipuler ce document sous Unix (Dilib)
EXPLOR_STEP=$WICRI_ROOT/Ticri/CIDE/explor/TelematiV1/Data/Pmc/Corpus
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 000643 | SxmlIndent | more
Ou
HfdSelect -h $EXPLOR_AREA/Data/Pmc/Corpus/biblio.hfd -nk 000643 | SxmlIndent | more
Pour mettre un lien sur cette page dans le réseau Wicri
{{Explor lien |wiki= Ticri/CIDE |area= TelematiV1 |flux= Pmc |étape= Corpus |type= RBID |clé= |texte= }}
![]() | This area was generated with Dilib version V0.6.31. | ![]() |