PocketSphinx  5.0.0rc5
A small speech recognizer
Classes | Macros | Typedefs | Functions
logmath.h File Reference

Fast integer logarithmic addition operations. More...

#include <pocketsphinx/export.h>
#include <pocketsphinx/prim_type.h>

Go to the source code of this file.

Classes

struct  logadd_s
 

Macros

#define LOGMATH_TABLE(lm)   ((logadd_t *)lm)
 

Typedefs

typedef struct logadd_s logadd_t
 
typedef struct logmath_s logmath_t
 

Functions

POCKETSPHINX_EXPORT logmath_tlogmath_init (float64 base, int shift, int use_table)
 
POCKETSPHINX_EXPORT logmath_tlogmath_read (const char *filename)
 
POCKETSPHINX_EXPORT int32 logmath_write (logmath_t *lmath, const char *filename)
 
POCKETSPHINX_EXPORT int32 logmath_get_table_shape (logmath_t *lmath, uint32 *out_size, uint32 *out_width, uint32 *out_shift)
 
POCKETSPHINX_EXPORT float64 logmath_get_base (logmath_t *lmath)
 
POCKETSPHINX_EXPORT int logmath_get_zero (logmath_t *lmath)
 
POCKETSPHINX_EXPORT int logmath_get_width (logmath_t *lmath)
 
POCKETSPHINX_EXPORT int logmath_get_shift (logmath_t *lmath)
 
POCKETSPHINX_EXPORT logmath_tlogmath_retain (logmath_t *lmath)
 
POCKETSPHINX_EXPORT int logmath_free (logmath_t *lmath)
 
POCKETSPHINX_EXPORT int logmath_add_exact (logmath_t *lmath, int logb_p, int logb_q)
 
POCKETSPHINX_EXPORT int logmath_add (logmath_t *lmath, int logb_p, int logb_q)
 
POCKETSPHINX_EXPORT int logmath_log (logmath_t *lmath, float64 p)
 
POCKETSPHINX_EXPORT float64 logmath_exp (logmath_t *lmath, int logb_p)
 
POCKETSPHINX_EXPORT int logmath_ln_to_log (logmath_t *lmath, float64 log_p)
 
POCKETSPHINX_EXPORT float64 logmath_log_to_ln (logmath_t *lmath, int logb_p)
 
POCKETSPHINX_EXPORT int logmath_log10_to_log (logmath_t *lmath, float64 log_p)
 
POCKETSPHINX_EXPORT float logmath_log10_to_log_float (logmath_t *lmath, float64 log_p)
 
POCKETSPHINX_EXPORT float64 logmath_log_to_log10 (logmath_t *lmath, int logb_p)
 
POCKETSPHINX_EXPORT float64 logmath_log_float_to_log10 (logmath_t *lmath, float log_p)
 

Detailed Description

Fast integer logarithmic addition operations.

In evaluating HMM models, probability values are often kept in log domain, to avoid overflow. To enable these logprob values to be held in int32 variables without significant loss of precision, a logbase of (1+epsilon) (where epsilon < 0.01 or so) is used. This module maintains this logbase (B).

However, maintaining probabilities in log domain creates a problem when adding two probability values. This problem can be solved by table lookup. Note that:

So:

The first entry in logadd_table is simply $ log_b(2.0) $, for the case where $ y = x $ and thus $ z = log_b(2x) = log_b(2) + x $. The last entry is zero, where $ log_b(x+y) = x = y $ due to loss of precision.

Since this table can be quite large particularly for small logbases, an option is provided to compress it by dropping the least significant bits of the table.

Macro Definition Documentation

◆ LOGMATH_TABLE

#define LOGMATH_TABLE (   lm)    ((logadd_t *)lm)

Obtain the log-add table from a logmath_t *

Typedef Documentation

◆ logadd_t

typedef struct logadd_s logadd_t

Integer log math computation table.

This is exposed here to allow log-add computations to be inlined.

◆ logmath_t

typedef struct logmath_s logmath_t

Integer log math computation class.

Function Documentation

◆ logmath_add()

POCKETSPHINX_EXPORT int logmath_add ( logmath_t lmath,
int  logb_p,
int  logb_q 
)

Add two values in log space (i.e. return log(exp(p)+exp(q)))

◆ logmath_add_exact()

POCKETSPHINX_EXPORT int logmath_add_exact ( logmath_t lmath,
int  logb_p,
int  logb_q 
)

Add two values in log space exactly and slowly (without using add table).

◆ logmath_exp()

POCKETSPHINX_EXPORT float64 logmath_exp ( logmath_t lmath,
int  logb_p 
)

Convert integer log in base B to linear floating point.

◆ logmath_free()

POCKETSPHINX_EXPORT int logmath_free ( logmath_t lmath)

Free a log table.

Returns
new reference count (0 if freed completely)

◆ logmath_get_base()

POCKETSPHINX_EXPORT float64 logmath_get_base ( logmath_t lmath)

Get the log base.

◆ logmath_get_shift()

POCKETSPHINX_EXPORT int logmath_get_shift ( logmath_t lmath)

Get the shift of the values in a log table.

◆ logmath_get_table_shape()

POCKETSPHINX_EXPORT int32 logmath_get_table_shape ( logmath_t lmath,
uint32 *  out_size,
uint32 *  out_width,
uint32 *  out_shift 
)

Get the log table size and dimensions.

◆ logmath_get_width()

POCKETSPHINX_EXPORT int logmath_get_width ( logmath_t lmath)

Get the width of the values in a log table.

◆ logmath_get_zero()

POCKETSPHINX_EXPORT int logmath_get_zero ( logmath_t lmath)

Get the smallest possible value represented in this base.

◆ logmath_init()

POCKETSPHINX_EXPORT logmath_t* logmath_init ( float64  base,
int  shift,
int  use_table 
)

Initialize a log math computation table.

Parameters
baseThe base B in which computation is to be done.
shiftLog values are shifted right by this many bits.
use_tableWhether to use an add table or not
Returns
The newly created log math table.

◆ logmath_ln_to_log()

POCKETSPHINX_EXPORT int logmath_ln_to_log ( logmath_t lmath,
float64  log_p 
)

Convert natural log (in floating point) to integer log in base B.

◆ logmath_log()

POCKETSPHINX_EXPORT int logmath_log ( logmath_t lmath,
float64  p 
)

Convert linear floating point number to integer log in base B.

◆ logmath_log10_to_log()

POCKETSPHINX_EXPORT int logmath_log10_to_log ( logmath_t lmath,
float64  log_p 
)

Convert base 10 log (in floating point) to integer log in base B.

◆ logmath_log10_to_log_float()

POCKETSPHINX_EXPORT float logmath_log10_to_log_float ( logmath_t lmath,
float64  log_p 
)

Convert base 10 log (in floating point) to float log in base B.

◆ logmath_log_float_to_log10()

POCKETSPHINX_EXPORT float64 logmath_log_float_to_log10 ( logmath_t lmath,
float  log_p 
)

Convert float log in base B to base 10 log.

◆ logmath_log_to_ln()

POCKETSPHINX_EXPORT float64 logmath_log_to_ln ( logmath_t lmath,
int  logb_p 
)

Convert integer log in base B to natural log (in floating point).

◆ logmath_log_to_log10()

POCKETSPHINX_EXPORT float64 logmath_log_to_log10 ( logmath_t lmath,
int  logb_p 
)

Convert integer log in base B to base 10 log (in floating point).

◆ logmath_read()

POCKETSPHINX_EXPORT logmath_t* logmath_read ( const char *  filename)

Memory-map (or read) a log table from a file.

◆ logmath_retain()

POCKETSPHINX_EXPORT logmath_t* logmath_retain ( logmath_t lmath)

Retain ownership of a log table.

Returns
pointer to retained log table.

◆ logmath_write()

POCKETSPHINX_EXPORT int32 logmath_write ( logmath_t lmath,
const char *  filename 
)

Write a log table to a file.