Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > e9280da098bff237733732ce38a34d57 > files > 136

pocketsphinx-devel-0.7-1.fc14.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>PocketSphinx: src/libpocketsphinx/hmm.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">PocketSphinx&#160;<span id="projectnumber">0.6</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('hmm_8h.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<h1>src/libpocketsphinx/hmm.h File Reference</h1>  </div>
</div>
<div class="contents">

<p>Implementation of HMM base structure.  
<a href="#_details">More...</a></p>
<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;sphinxbase/fixpoint.h&gt;</code><br/>
<code>#include &lt;sphinxbase/listelem_alloc.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="bin__mdef_8h_source.html">bin_mdef.h</a>&quot;</code><br/>
</div>
<p><a href="hmm_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structhmm__context__s.html">hmm_context_s</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structhmm__s.html">hmm_s</a></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#af94da16e3e5b550b9be05b0f07402cc7">SENSCR_SHIFT</a>&#160;&#160;&#160;10</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Shift count for senone scores.  <a href="#af94da16e3e5b550b9be05b0f07402cc7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a">WORST_SCORE</a>&#160;&#160;&#160;((int)0xE0000000)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Large "bad" score.  <a href="#a833f100ee293ad0f1c03f2a5ef9be77a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9b38399b544dbb93bc9b7d0094e91db7"></a><!-- doxytag: member="hmm.h::TMAT_WORST_SCORE" ref="a9b38399b544dbb93bc9b7d0094e91db7" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a9b38399b544dbb93bc9b7d0094e91db7">TMAT_WORST_SCORE</a>&#160;&#160;&#160;(-255)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Watch out, though! Transition matrix entries that are supposed to be "zero" don't actually get that small due to quantization. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2874ab52613ff781c96f570ec0eb0d98"></a><!-- doxytag: member="hmm.h::BETTER_THAN" ref="a2874ab52613ff781c96f570ec0eb0d98" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a2874ab52613ff781c96f570ec0eb0d98">BETTER_THAN</a>&#160;&#160;&#160;&gt;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Is one score better than another? <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa930fb8fb6fce7f34bcf4018b81d7066"></a><!-- doxytag: member="hmm.h::WORSE_THAN" ref="aa930fb8fb6fce7f34bcf4018b81d7066" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#aa930fb8fb6fce7f34bcf4018b81d7066">WORSE_THAN</a>&#160;&#160;&#160;&lt;</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Is one score worse than another? <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1eb055ab0e55008f27d78e7b07a55a1c"></a><!-- doxytag: member="hmm.h::HMM_MAX_NSTATE" ref="a1eb055ab0e55008f27d78e7b07a55a1c" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a1eb055ab0e55008f27d78e7b07a55a1c">HMM_MAX_NSTATE</a>&#160;&#160;&#160;5</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Hard-coded limit on the number of emitting states. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a3756f3c269d928924bf783f57c90adef">hmm_context</a>(h)&#160;&#160;&#160;(h)-&gt;ctx</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Access macros.  <a href="#a3756f3c269d928924bf783f57c90adef"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9bb998720796e947722c4e0e36b55c61"></a><!-- doxytag: member="hmm.h::hmm_is_mpx" ref="a9bb998720796e947722c4e0e36b55c61" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_is_mpx</b>(h)&#160;&#160;&#160;(h)-&gt;mpx</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3b6af4838a0485b4d44c04680e2e5bf6"></a><!-- doxytag: member="hmm.h::hmm_in_score" ref="a3b6af4838a0485b4d44c04680e2e5bf6" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_in_score</b>(h)&#160;&#160;&#160;(h)-&gt;score[0]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7ff8a1aba5458c587868ebf5a9898d4"></a><!-- doxytag: member="hmm.h::hmm_score" ref="ae7ff8a1aba5458c587868ebf5a9898d4" args="(h, st)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_score</b>(h, st)&#160;&#160;&#160;(h)-&gt;score[st]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a196fd6a12e2d34e19d17f1338aa66727"></a><!-- doxytag: member="hmm.h::hmm_out_score" ref="a196fd6a12e2d34e19d17f1338aa66727" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_out_score</b>(h)&#160;&#160;&#160;(h)-&gt;out_score</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4569baec920021f78c92976049fabe1b"></a><!-- doxytag: member="hmm.h::hmm_in_history" ref="a4569baec920021f78c92976049fabe1b" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_in_history</b>(h)&#160;&#160;&#160;(h)-&gt;history[0]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ad265671ea1ec72913641444adf3cda"></a><!-- doxytag: member="hmm.h::hmm_history" ref="a1ad265671ea1ec72913641444adf3cda" args="(h, st)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_history</b>(h, st)&#160;&#160;&#160;(h)-&gt;history[st]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad2c9f925fe7f3edd761391e524ccbe81"></a><!-- doxytag: member="hmm.h::hmm_out_history" ref="ad2c9f925fe7f3edd761391e524ccbe81" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_out_history</b>(h)&#160;&#160;&#160;(h)-&gt;out_history</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a59323e9a29074f3d1fd4cc07b310785e"></a><!-- doxytag: member="hmm.h::hmm_bestscore" ref="a59323e9a29074f3d1fd4cc07b310785e" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_bestscore</b>(h)&#160;&#160;&#160;(h)-&gt;bestscore</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef81c7d2e36140c8f9873b8a49fbbf12"></a><!-- doxytag: member="hmm.h::hmm_frame" ref="aef81c7d2e36140c8f9873b8a49fbbf12" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_frame</b>(h)&#160;&#160;&#160;(h)-&gt;frame</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad00a55e9d9e9fdfa030da184cdb4c2ba"></a><!-- doxytag: member="hmm.h::hmm_mpx_ssid" ref="ad00a55e9d9e9fdfa030da184cdb4c2ba" args="(h, st)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_mpx_ssid</b>(h, st)&#160;&#160;&#160;(h)-&gt;senid[st]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c0be1206da75b5c560524549de72f7d"></a><!-- doxytag: member="hmm.h::hmm_nonmpx_ssid" ref="a1c0be1206da75b5c560524549de72f7d" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_nonmpx_ssid</b>(h)&#160;&#160;&#160;(h)-&gt;ssid</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_ssid</b>(h, st)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_mpx_senid</b>(h, st)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45850600910ae0839f34792b00b5970b"></a><!-- doxytag: member="hmm.h::hmm_nonmpx_senid" ref="a45850600910ae0839f34792b00b5970b" args="(h, st)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_nonmpx_senid</b>(h, st)&#160;&#160;&#160;((h)-&gt;senid[st])</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_senid</b>(h, st)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_senscr</b>(h, st)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a749193daefb4247e56dbc6b3f2d75c14"></a><!-- doxytag: member="hmm.h::hmm_tmatid" ref="a749193daefb4247e56dbc6b3f2d75c14" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_tmatid</b>(h)&#160;&#160;&#160;(h)-&gt;tmatid</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d6e71af2d2ce897e63a5ee8c5741593"></a><!-- doxytag: member="hmm.h::hmm_tprob" ref="a3d6e71af2d2ce897e63a5ee8c5741593" args="(h, i, j)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_tprob</b>(h, i, j)&#160;&#160;&#160;(-(h)-&gt;ctx-&gt;tp[hmm_tmatid(h)][i][j])</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ef324f17daafd4de126b88671c7e93c"></a><!-- doxytag: member="hmm.h::hmm_n_emit_state" ref="a4ef324f17daafd4de126b88671c7e93c" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_n_emit_state</b>(h)&#160;&#160;&#160;((h)-&gt;n_emit_state)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a16311c1d64310ad3a8af33eec0fbe9f1"></a><!-- doxytag: member="hmm.h::hmm_n_state" ref="a16311c1d64310ad3a8af33eec0fbe9f1" args="(h)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_n_state</b>(h)&#160;&#160;&#160;((h)-&gt;n_emit_state + 1)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a44d0b5515cb269bf9b95f62aada18cbb"></a><!-- doxytag: member="hmm.h::hmm_context_set_senscore" ref="a44d0b5515cb269bf9b95f62aada18cbb" args="(ctx, senscr)" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a44d0b5515cb269bf9b95f62aada18cbb">hmm_context_set_senscore</a>(ctx, senscr)&#160;&#160;&#160;((ctx)-&gt;senscore = (senscr))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Change the senone score array for a context. <br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87dd8e0478af63326664232541d2ade6"></a><!-- doxytag: member="hmm.h::hmm_context_t" ref="a87dd8e0478af63326664232541d2ade6" args="" -->
typedef struct <a class="el" href="structhmm__context__s.html">hmm_context_s</a>&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_context_t</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f69b65f5fd63aa882fbe6002be74c13"></a><!-- doxytag: member="hmm.h::hmm_t" ref="a6f69b65f5fd63aa882fbe6002be74c13" args="" -->
typedef struct <a class="el" href="structhmm__s.html">hmm_s</a>&#160;</td><td class="memItemRight" valign="bottom"><b>hmm_t</b></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d6e2799cbe290112e8517adcab1b038"></a><!-- doxytag: member="hmm.h::hmm_context_init" ref="a4d6e2799cbe290112e8517adcab1b038" args="(int32 n_emit_state, uint8 **const *tp, int16 const *senscore, uint16 *const *sseq)" -->
<a class="el" href="structhmm__context__t.html">hmm_context_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a4d6e2799cbe290112e8517adcab1b038">hmm_context_init</a> (int32 n_emit_state, uint8 **const *tp, int16 const *senscore, uint16 *const *sseq)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Create an HMM context. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#ab66534ad7970d49527f1b2a1e76bb05e">hmm_context_free</a> (<a class="el" href="structhmm__context__t.html">hmm_context_t</a> *ctx)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free an HMM context.  <a href="#ab66534ad7970d49527f1b2a1e76bb05e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa911ae0d1c0eba562692fbeebca90d78"></a><!-- doxytag: member="hmm.h::hmm_init" ref="aa911ae0d1c0eba562692fbeebca90d78" args="(hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#aa911ae0d1c0eba562692fbeebca90d78">hmm_init</a> (<a class="el" href="structhmm__context__t.html">hmm_context_t</a> *ctx, <a class="el" href="structhmm__t.html">hmm_t</a> *hmm, int mpx, int ssid, int tmatid)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Populate a previously-allocated HMM structure, allocating internal data. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7440ced1649225beb6816bf62481e08b"></a><!-- doxytag: member="hmm.h::hmm_deinit" ref="a7440ced1649225beb6816bf62481e08b" args="(hmm_t *hmm)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a7440ced1649225beb6816bf62481e08b">hmm_deinit</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *hmm)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free an HMM structure, releasing internal data (but not the HMM structure itself). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#af4c0cefb23087a0b1731b34048cfdaf9">hmm_clear</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *h)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the states of the HMM to the invalid condition.  <a href="#af4c0cefb23087a0b1731b34048cfdaf9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9561d7ffa1e61c99de2d2b900774152f"></a><!-- doxytag: member="hmm.h::hmm_clear_scores" ref="a9561d7ffa1e61c99de2d2b900774152f" args="(hmm_t *h)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a9561d7ffa1e61c99de2d2b900774152f">hmm_clear_scores</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *h)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Reset the scores of the HMM. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0438bc7672ff9200274ffe7b5051eb92"></a><!-- doxytag: member="hmm.h::hmm_normalize" ref="a0438bc7672ff9200274ffe7b5051eb92" args="(hmm_t *h, int32 bestscr)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a0438bc7672ff9200274ffe7b5051eb92">hmm_normalize</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *h, int32 bestscr)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Renormalize the scores in this HMM based on the given best score. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7285d01d533996d750c78e0d96042716"></a><!-- doxytag: member="hmm.h::hmm_enter" ref="a7285d01d533996d750c78e0d96042716" args="(hmm_t *h, int32 score, int32 histid, int frame)" -->
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a7285d01d533996d750c78e0d96042716">hmm_enter</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *h, int32 score, int32 histid, int frame)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Enter an HMM with the given path score and history ID. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a24ed030b10cb07e12173b45d3800db4b">hmm_vit_eval</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *hmm)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Viterbi evaluation of given HMM.  <a href="#a24ed030b10cb07e12173b45d3800db4b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#a84947383bf7940f799918c37ece85cf0">hmm_dump_vit_eval</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *hmm, FILE *fp)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Like hmm_vit_eval, but dump HMM state and relevant senscr to fp first, for debugging;.  <a href="#a84947383bf7940f799918c37ece85cf0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hmm_8h.html#ad747fa967b5e414ad48fdffb9b767baf">hmm_dump</a> (<a class="el" href="structhmm__t.html">hmm_t</a> *h, FILE *fp)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">For debugging, dump the whole HMM out.  <a href="#ad747fa967b5e414ad48fdffb9b767baf"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Implementation of HMM base structure. </p>
<p>HMM data structure and operation.</p>
<p>Hidden Markov Model base structures.</p>
<p>For efficiency, this version is hardwired for two possible HMM topologies, but will fall back to others:</p>
<p>5-state left-to-right HMMs: (0 is the *emitting* entry state and E is a non-emitting exit state; the x's indicate allowed transitions between source and destination states):</p>
<pre>
               0   1   2   3   4   E (destination-states)
           0   x   x   x
           1       x   x   x
           2           x   x   x
           3               x   x   x
           4                   x   x
    (source-states)
 </pre><p>5-state topologies that contain a subset of the above transitions should work as well.</p>
<p>3-state left-to-right HMMs (similar notation as the 5-state topology above):</p>
<pre>
               0   1   2   E (destination-states)
           0   x   x   x
           1       x   x   x
           2           x   x 
    (source-states)
 </pre><p>3-state topologies that contain a subset of the above transitions should work as well. </p>

<p>Definition in file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a3756f3c269d928924bf783f57c90adef"></a><!-- doxytag: member="hmm.h::hmm_context" ref="a3756f3c269d928924bf783f57c90adef" args="(h)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define hmm_context</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">h</td><td>)</td>
          <td>&#160;&#160;&#160;(h)-&gt;ctx</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Access macros. </p>

<p>Definition at line <a class="el" href="hmm_8h_source.html#l00176">176</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

</div>
</div>
<a class="anchor" id="a90d5493e8a3ef5826a1158e02e3b055c"></a><!-- doxytag: member="hmm.h::hmm_mpx_senid" ref="a90d5493e8a3ef5826a1158e02e3b055c" args="(h, st)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define hmm_mpx_senid</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">h, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">st&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">(hmm_mpx_ssid(h,st) == <a class="code" href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc" title="Invalid senone ID (limited to 16 bits for PocketSphinx).">BAD_SENID</a> \
                             ? <a class="code" href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc" title="Invalid senone ID (limited to 16 bits for PocketSphinx).">BAD_SENID</a> : (h)-&gt;ctx-&gt;sseq[hmm_mpx_ssid(h,st)][st])
</pre></div>
<p>Definition at line <a class="el" href="hmm_8h_source.html#l00193">193</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

</div>
</div>
<a class="anchor" id="ae3f2856c4774fe4ba0217bdf97410264"></a><!-- doxytag: member="hmm.h::hmm_senid" ref="ae3f2856c4774fe4ba0217bdf97410264" args="(h, st)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define hmm_senid</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">h, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">st&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">(hmm_is_mpx(h)                                  \
                         ? hmm_mpx_senid(h,st) : hmm_nonmpx_senid(h,st))
</pre></div>
<p>Definition at line <a class="el" href="hmm_8h_source.html#l00196">196</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

</div>
</div>
<a class="anchor" id="a0c8de8756d4263b2a36957cb42075740"></a><!-- doxytag: member="hmm.h::hmm_senscr" ref="a0c8de8756d4263b2a36957cb42075740" args="(h, st)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define hmm_senscr</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">h, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">st&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">(hmm_senid(h,st) == <a class="code" href="bin__mdef_8h.html#ab6c771eca798ab8c94e0933a1f8daafc" title="Invalid senone ID (limited to 16 bits for PocketSphinx).">BAD_SENID</a>                  \
                          ? <a class="code" href="hmm_8h.html#a833f100ee293ad0f1c03f2a5ef9be77a" title="Large &amp;quot;bad&amp;quot; score.">WORST_SCORE</a>                                 \
                          : -(h)-&gt;ctx-&gt;senscore[hmm_senid(h,st)])
</pre></div>
<p>Definition at line <a class="el" href="hmm_8h_source.html#l00198">198</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

</div>
</div>
<a class="anchor" id="a373c24cfb5d5e2d732b0b88f716c0d55"></a><!-- doxytag: member="hmm.h::hmm_ssid" ref="a373c24cfb5d5e2d732b0b88f716c0d55" args="(h, st)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define hmm_ssid</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">h, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">st&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">(hmm_is_mpx(h)                                   \
                        ? hmm_mpx_ssid(h,st) : hmm_nonmpx_ssid(h))
</pre></div>
<p>Definition at line <a class="el" href="hmm_8h_source.html#l00191">191</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

</div>
</div>
<a class="anchor" id="af94da16e3e5b550b9be05b0f07402cc7"></a><!-- doxytag: member="hmm.h::SENSCR_SHIFT" ref="af94da16e3e5b550b9be05b0f07402cc7" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SENSCR_SHIFT&#160;&#160;&#160;10</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Shift count for senone scores. </p>

<p>Definition at line <a class="el" href="hmm_8h_source.html#l00063">63</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

<p>Referenced by <a class="el" href="ps__lattice_8c_source.html#l01659">ps_astar_start()</a>, <a class="el" href="ps__lattice_8c_source.html#l00844">ps_latlink_prob()</a>, <a class="el" href="ps__lattice_8c_source.html#l01225">ps_lattice_bestpath()</a>, <a class="el" href="ps__lattice_8c_source.html#l01395">ps_lattice_posterior()</a>, <a class="el" href="ps__lattice_8c_source.html#l00233">ps_lattice_write()</a>, <a class="el" href="ps__lattice_8c_source.html#l00293">ps_lattice_write_htk()</a>, <a class="el" href="ms__senone_8c_source.html#l00286">senone_init()</a>, and <a class="el" href="tmat_8c_source.html#l00191">tmat_init()</a>.</p>

</div>
</div>
<a class="anchor" id="a833f100ee293ad0f1c03f2a5ef9be77a"></a><!-- doxytag: member="hmm.h::WORST_SCORE" ref="a833f100ee293ad0f1c03f2a5ef9be77a" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define WORST_SCORE&#160;&#160;&#160;((int)0xE0000000)</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Large "bad" score. </p>
<p>This number must be "bad" enough so that 4 times WORST_SCORE will not overflow. The reason for this is that the search doesn't check the scores in a model before evaluating the model and it may require as many was 4 plies before the new 'good' score can wipe out the initial WORST_SCORE initialization. </p>

<p>Definition at line <a class="el" href="hmm_8h_source.html#l00074">74</a> of file <a class="el" href="hmm_8h_source.html">hmm.h</a>.</p>

<p>Referenced by <a class="el" href="hmm_8c_source.html#l00183">hmm_clear()</a>, <a class="el" href="hmm_8c_source.html#l00170">hmm_clear_scores()</a>, <a class="el" href="hmm_8c_source.html#l00209">hmm_normalize()</a>, <a class="el" href="ngram__search__fwdflat_8c_source.html#l00811">ngram_fwdflat_search()</a>, <a class="el" href="ngram__search_8c_source.html#l00513">ngram_search_find_exit()</a>, <a class="el" href="ngram__search_8c_source.html#l01220">ngram_search_lattice()</a>, <a class="el" href="ngram__search_8c_source.html#l00396">ngram_search_save_bp()</a>, <a class="el" href="ps__lattice_8c_source.html#l01659">ps_astar_start()</a>, <a class="el" href="ps__lattice_8c_source.html#l00410">ps_lattice_read()</a>, <a class="el" href="ps__lattice_8c_source.html#l00233">ps_lattice_write()</a>, and <a class="el" href="ps__lattice_8c_source.html#l00293">ps_lattice_write_htk()</a>.</p>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="af4c0cefb23087a0b1731b34048cfdaf9"></a><!-- doxytag: member="hmm.h::hmm_clear" ref="af4c0cefb23087a0b1731b34048cfdaf9" args="(hmm_t *h)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void hmm_clear </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structhmm__t.html">hmm_t</a> *&#160;</td>
          <td class="paramname"><em>h</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Reset the states of the HMM to the invalid condition. </p>
<p>i.e., scores to WORST_SCORE and hist to undefined. </p>

<p>Definition at line <a class="el" href="hmm_8c_source.html#l00183">183</a> of file <a class="el" href="hmm_8c_source.html">hmm.c</a>.</p>

<p>References <a class="el" href="hmm_8h_source.html#l00074">WORST_SCORE</a>.</p>

</div>
</div>
<a class="anchor" id="ab66534ad7970d49527f1b2a1e76bb05e"></a><!-- doxytag: member="hmm.h::hmm_context_free" ref="ab66534ad7970d49527f1b2a1e76bb05e" args="(hmm_context_t *ctx)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void hmm_context_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structhmm__context__t.html">hmm_context_t</a> *&#160;</td>
          <td class="paramname"><em>ctx</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Free an HMM context. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The transition matrices, senone scores, and senone sequence mapping are all assumed to be allocated externally, and will NOT be freed by this function. </dd></dl>

<p>Definition at line <a class="el" href="hmm_8c_source.html#l00080">80</a> of file <a class="el" href="hmm_8c_source.html">hmm.c</a>.</p>

</div>
</div>
<a class="anchor" id="ad747fa967b5e414ad48fdffb9b767baf"></a><!-- doxytag: member="hmm.h::hmm_dump" ref="ad747fa967b5e414ad48fdffb9b767baf" args="(hmm_t *h, FILE *fp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void hmm_dump </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structhmm__t.html">hmm_t</a> *&#160;</td>
          <td class="paramname"><em>h</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fp</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>For debugging, dump the whole HMM out. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">h</td><td>In/Out: HMM being updated </td></tr>
    <tr><td class="paramname">fp</td><td>An output file pointer </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="hmm_8c_source.html#l00116">116</a> of file <a class="el" href="hmm_8c_source.html">hmm.c</a>.</p>

</div>
</div>
<a class="anchor" id="a84947383bf7940f799918c37ece85cf0"></a><!-- doxytag: member="hmm.h::hmm_dump_vit_eval" ref="a84947383bf7940f799918c37ece85cf0" args="(hmm_t *hmm, FILE *fp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32 hmm_dump_vit_eval </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structhmm__t.html">hmm_t</a> *&#160;</td>
          <td class="paramname"><em>hmm</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FILE *&#160;</td>
          <td class="paramname"><em>fp</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Like hmm_vit_eval, but dump HMM state and relevant senscr to fp first, for debugging;. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">hmm</td><td>In/Out: HMM being updated </td></tr>
    <tr><td class="paramname">fp</td><td>An output file pointer </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="hmm_8c_source.html#l00810">810</a> of file <a class="el" href="hmm_8c_source.html">hmm.c</a>.</p>

</div>
</div>
<a class="anchor" id="a24ed030b10cb07e12173b45d3800db4b"></a><!-- doxytag: member="hmm.h::hmm_vit_eval" ref="a24ed030b10cb07e12173b45d3800db4b" args="(hmm_t *hmm)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int32 hmm_vit_eval </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structhmm__t.html">hmm_t</a> *&#160;</td>
          <td class="paramname"><em>hmm</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Viterbi evaluation of given HMM. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>If this module were being used for tracking state segmentations, the dummy, non-emitting exit state would have to be updated separately. In the Viterbi DP diagram, transitions to the exit state occur from the current time; they are vertical transitions. Hence they should be made only after the history has been logged for the emitting states. But we're not bothered with state segmentations, for now. So, we update the exit state as well. </dd></dl>

<p>Definition at line <a class="el" href="hmm_8c_source.html#l00789">789</a> of file <a class="el" href="hmm_8c_source.html">hmm.c</a>.</p>

</div>
</div>
</div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="hmm_8h.html">hmm.h</a>      </li>
      <li class="footer">Generated on Wed Apr 20 2011 for PocketSphinx by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </li>
    </ul>
  </div>

</body>
</html>