|
PocketSphinx 5prealpha
|
Implementation of HMM base structure. More...
#include <stdio.h>#include <sphinxbase/fixpoint.h>#include <sphinxbase/listelem_alloc.h>#include "bin_mdef.h"Go to the source code of this file.
Data Structures | |
| struct | hmm_context_s |
| struct | hmm_s |
Macros | |
| #define | MAX_N_FRAMES MAX_INT32 |
| Maximum number of frames in index, should be in sync with above. | |
| #define | SENSCR_SHIFT 10 |
| Shift count for senone scores. | |
| #define | WORST_SCORE ((int)0xE0000000) |
| Large "bad" score. | |
| #define | TMAT_WORST_SCORE (-255) |
| Watch out, though! | |
| #define | BETTER_THAN > |
| Is one score better than another? | |
| #define | WORSE_THAN < |
| Is one score worse than another? | |
| #define | HMM_MAX_NSTATE 5 |
| Hard-coded limit on the number of emitting states. | |
| #define | hmm_context(h) |
| Access macros. | |
| #define | hmm_is_mpx(h) |
| #define | hmm_in_score(h) |
| #define | hmm_score(h, st) |
| #define | hmm_out_score(h) |
| #define | hmm_in_history(h) |
| #define | hmm_history(h, st) |
| #define | hmm_out_history(h) |
| #define | hmm_bestscore(h) |
| #define | hmm_frame(h) |
| #define | hmm_mpx_ssid(h, st) |
| #define | hmm_nonmpx_ssid(h) |
| #define | hmm_ssid(h, st) |
| #define | hmm_mpx_senid(h, st) |
| #define | hmm_nonmpx_senid(h, st) |
| #define | hmm_senid(h, st) |
| #define | hmm_senscr(h, st) |
| #define | hmm_tmatid(h) |
| #define | hmm_tprob(h, i, j) |
| #define | hmm_n_emit_state(h) |
| #define | hmm_n_state(h) |
| #define | hmm_context_set_senscore(ctx, senscr) |
| Change the senone score array for a context. | |
Typedefs | |
| typedef int32 | frame_idx_t |
| Type for frame index values. | |
| typedef struct hmm_context_s | hmm_context_t |
| typedef struct hmm_s | hmm_t |
Functions | |
| hmm_context_t * | hmm_context_init (int32 n_emit_state, uint8 **const *tp, int16 const *senscore, uint16 *const *sseq) |
| Create an HMM context. | |
| void | hmm_context_free (hmm_context_t *ctx) |
| Free an HMM context. | |
| void | hmm_init (hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid) |
| Populate a previously-allocated HMM structure, allocating internal data. | |
| void | hmm_deinit (hmm_t *hmm) |
| Free an HMM structure, releasing internal data (but not the HMM structure itself). | |
| void | hmm_clear (hmm_t *h) |
| Reset the states of the HMM to the invalid condition. | |
| void | hmm_clear_scores (hmm_t *h) |
| Reset the scores of the HMM. | |
| void | hmm_normalize (hmm_t *h, int32 bestscr) |
| Renormalize the scores in this HMM based on the given best score. | |
| void | hmm_enter (hmm_t *h, int32 score, int32 histid, int frame) |
| Enter an HMM with the given path score and history ID. | |
| int32 | hmm_vit_eval (hmm_t *hmm) |
| Viterbi evaluation of given HMM. | |
| int32 | hmm_dump_vit_eval (hmm_t *hmm, FILE *fp) |
| Like hmm_vit_eval, but dump HMM state and relevant senscr to fp first, for debugging;. | |
| void | hmm_dump (hmm_t *h, FILE *fp) |
| For debugging, dump the whole HMM out. | |
Implementation of HMM base structure.
HMM data structure and operation.
Hidden Markov Model base structures.
For efficiency, this version is hardwired for two possible HMM topologies, but will fall back to others:
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):
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)
5-state topologies that contain a subset of the above transitions should work as well.
3-state left-to-right HMMs (similar notation as the 5-state topology above):
0 1 2 E (destination-states)
0 x x x
1 x x x
2 x x
(source-states)
3-state topologies that contain a subset of the above transitions should work as well.
Definition in file hmm.h.
| #define BETTER_THAN > |
Is one score better than another?
Definition at line 95 of file hmm.h.
Referenced by hmm_normalize(), ngram_search_find_exit(), ngram_search_lattice(), ps_lattice_bestpath(), ps_lattice_link(), ps_lattice_posterior(), ps_lattice_write(), and ps_lattice_write_htk().
| #define hmm_context_set_senscore | ( | ctx, | |
| senscr ) |
Change the senone score array for a context.
Definition at line 227 of file hmm.h.
Referenced by ngram_fwdflat_search().
| #define HMM_MAX_NSTATE 5 |
Hard-coded limit on the number of emitting states.
Definition at line 160 of file hmm.h.
Referenced by hmm_context_init().
| #define hmm_mpx_senid | ( | h, | |
| st ) |
| #define hmm_senid | ( | h, | |
| st ) |
| #define hmm_senscr | ( | h, | |
| st ) |
| #define hmm_ssid | ( | h, | |
| st ) |
| #define hmm_tprob | ( | h, | |
| i, | |||
| j ) |
| #define MAX_N_FRAMES MAX_INT32 |
| #define SENSCR_SHIFT 10 |
Shift count for senone scores.
Definition at line 73 of file hmm.h.
Referenced by ps_astar_start(), ps_latlink_prob(), ps_lattice_bestpath(), ps_lattice_posterior(), ps_lattice_write(), ps_lattice_write_htk(), senone_init(), and tmat_init().
| #define TMAT_WORST_SCORE (-255) |
| #define WORSE_THAN < |
Is one score worse than another?
Definition at line 100 of file hmm.h.
Referenced by ngram_fwdflat_search(), ngram_fwdtree_search(), ngram_search_lattice(), ngram_search_save_bp(), ps_lattice_read(), ps_lattice_write(), and ps_lattice_write_htk().
| #define WORST_SCORE ((int)0xE0000000) |
Large "bad" score.
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.
Definition at line 84 of file hmm.h.
Referenced by hmm_clear(), hmm_clear_scores(), hmm_normalize(), ngram_fwdflat_search(), ngram_fwdtree_search(), ngram_search_find_exit(), ngram_search_lattice(), ngram_search_save_bp(), ps_astar_start(), ps_lattice_read(), ps_lattice_write(), and ps_lattice_write_htk().
| typedef int32 frame_idx_t |
| void hmm_clear | ( | hmm_t * | h | ) |
Reset the states of the HMM to the invalid condition.
i.e., scores to WORST_SCORE and hist to undefined.
Definition at line 183 of file hmm.c.
References WORST_SCORE.
| void hmm_clear_scores | ( | hmm_t * | h | ) |
| void hmm_context_free | ( | hmm_context_t * | ctx | ) |
| hmm_context_t * hmm_context_init | ( | int32 | n_emit_state, |
| uint8 **const * | tp, | ||
| int16 const * | senscore, | ||
| uint16 *const * | sseq ) |
| void hmm_deinit | ( | hmm_t * | hmm | ) |
| void hmm_dump | ( | hmm_t * | h, |
| FILE * | fp ) |
| int32 hmm_dump_vit_eval | ( | hmm_t * | hmm, |
| FILE * | fp ) |
| void hmm_enter | ( | hmm_t * | h, |
| int32 | score, | ||
| int32 | histid, | ||
| int | frame ) |
| void hmm_init | ( | hmm_context_t * | ctx, |
| hmm_t * | hmm, | ||
| int | mpx, | ||
| int | ssid, | ||
| int | tmatid ) |
| void hmm_normalize | ( | hmm_t * | h, |
| int32 | bestscr ) |
Renormalize the scores in this HMM based on the given best score.
Definition at line 209 of file hmm.c.
References BETTER_THAN, and WORST_SCORE.
| int32 hmm_vit_eval | ( | hmm_t * | hmm | ) |
Viterbi evaluation of given HMM.